本帖最后由 奋斗小范 于 2019-6-19 23:40 编辑
JSON解析器增加完成。
在增加过程中,没注意内存的分配,导致内存溢出,上电就进HardFault_Handler,查了好一会才找到原因 。确实难为这20k的RAM了······
直接从JSON官网下载解析器源代码。
http://www.json.org/
将其C代码直接加入工程,从中调用相关函数。
接收WiFi模组发来的数据,从中截取JSON格式数据,并使用JSON解析器解析:
- if(USART_RX_STA&0x8000)
- {
- len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
- USART_printf(USART1,"RX_BUF:%s\r\n",USART_RX_BUF);
- USART_printf(USART1,"len=%d\r\n",len);
- j=len;
-
- for(i=0;i<j;i++)
- {
- if(USART_RX_BUF[i]=='{')
- {
- // USART_printf(USART1,"{=%d\r\n",i);
- m=i;
- }
- if(USART_RX_BUF[i]=='}')
- {
- // USART_printf(USART1,"}=%d\r\n",i);
- n=i;
- }
- }
- if(n>m)
- {
- for(i=m;i<=n;i++)
- {
- Message[i-m]=USART_RX_BUF[i];
- }
- Message[i+1]='\0';
- USART_printf(USART1,"Message=%s\r\n",Message);
- }
-
- root = cJSON_Parse(Message);
- // USART_printf(USART1,"cJSON_Parse\r\n");
- if(root != NULL)
- {
- LightSwitch = cJSON_GetObjectItem(root,"LightSwitch")->valueint;
- USART_printf(USART1,"LightSwitch=%d\r\n",LightSwitch);
- if(LightSwitch)
- {
- USART_printf(USART1,"主控电源打开\r\n");
- }
- else
- {
- USART_printf(USART1,"主控电源关闭\r\n");
- }
- cJSON_Delete(root);
- }
- else
- {
- // printf("Error before: [%s]\n\r",cJSON_GetErrorPtr());
- USART_printf(USART1,"Error before: [%s]\n\r",cJSON_GetErrorPtr());
- }
- USART_RX_STA=0;
- }
目前已实现的功能:
1、从控制器将主控制器状态、AD值以及LED状态上传至阿里云,并在APP显示。
2、使用APP可以控制主从控制器之间相互切换,其他功能待考虑中。
到目前为止,对接阿里云基本完成,待整理细节后,会对帖子进行重新编辑(现在帖子编辑的有点乱 ),以及最后的视频展示和总结。
|