| 本帖最后由 奋斗小范 于 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可以控制主从控制器之间相互切换,其他功能待考虑中。
 到目前为止,对接阿里云基本完成,待整理细节后,会对帖子进行重新编辑(现在帖子编辑的有点乱
  ),以及最后的视频展示和总结。 
 
 |