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