[STM32F1] 基于STM32+FreeRtos+ESP8266+MQTT连接阿里云

[复制链接]
5088|102
 楼主| 无法去污粉 发表于 2022-5-29 16:13 | 显示全部楼层
5.2.7.服务器发布消息

1789962932b1d3b823.png
 楼主| 无法去污粉 发表于 2022-5-29 16:14 | 显示全部楼层
当服务器发布消息的时候,会进入此函数,对数据进行解析数据,数据格式为json格式,如代码所示。
  1. u8 MQTT_Publish(unsigned char* data,int len)
  2. {
  3.         int buflen = sizeof(buf);
  4.         int rc = 0;
  5.         unsigned char dup;
  6.         int qos;
  7.         unsigned char retained = 0;
  8.         unsigned short msgid = 1;
  9.         int payloadlen_in;
  10.         unsigned char* payload_in;
  11.         MQTTString receivedTopic;
  12.                
  13.         cJSON *json , *json_params, *json_id, *json_led, *json_display;
  14.        
  15.         memcpy(buf,data,len);
  16.        
  17.         rc = MQTTDeserialize_publish(&dup, &qos, &retained, &msgid, &receivedTopic,&payload_in, &payloadlen_in, (unsigned char*)buf, buflen);        //服务器有推送信息
  18.         printf("message arrived : %s\r\n", payload_in);
  19.        
  20.         json = cJSON_Parse((char *)payload_in);                        //解析数据包
  21.         if (!json)  
  22.         {  
  23.                 printf("Error before: [%s]\r\n",cJSON_GetErrorPtr());  
  24.         }
  25.         else
  26.         {
  27.                 json_id = cJSON_GetObjectItem(json , "id");
  28.                 if(json_id->type == cJSON_String)
  29.                 {
  30.                         printf("id:%s\r\n", json_id->valuestring);  
  31.                 }
  32.                 json_params = cJSON_GetObjectItem(json , "params");  
  33.                 if(json_params)  
  34.                 {  
  35.                         if(cJSON_GetObjectItem(json_params, "LED0"))
  36.                         {
  37.                                 json_led  = cJSON_GetObjectItem(json_params, "LED0");
  38.                                 if(json_led->type == cJSON_Number)
  39.                                 {
  40.                                         printf("LED:%d\r\n", json_led->valueint);  
  41.                                         if(json_led->valueint == 1)
  42.                                         {
  43.                                                 LED0 = 0;
  44.                                         }
  45.                                         else
  46.                                         {
  47.                                                 LED0 = 1;
  48.                                         }                       
  49.                                 }
  50.                         }
  51.                         if(cJSON_GetObjectItem(json_params, "display"))
  52.                         {
  53.                                 json_display = cJSON_GetObjectItem(json_params, "display");
  54.                                 if (json_display->type == cJSON_String)  
  55.                                 {  
  56.                                         //暂不处理
  57.                                 }  
  58.                         }
  59.                 }
  60.         }
  61.         cJSON_Delete(json);
  62.        
  63.         return TRUE;
  64. }
 楼主| 无法去污粉 发表于 2022-5-29 16:15 | 显示全部楼层
5.2.8.轮询,读MQTT返回数据类型

5078662932b923661b.png
 楼主| 无法去污粉 发表于 2022-5-29 16:16 | 显示全部楼层
5.2.9.向服务器发送dht12温湿度传感器的数据

8613162932bc00e890.png
 楼主| 无法去污粉 发表于 2022-5-29 16:17 | 显示全部楼层
注释:由于本设计使用了ESP8266来联网,ESP8266联网部分代码就不再过多解释,可参考相关的例子进行。

 楼主| 无法去污粉 发表于 2022-5-29 16:17 | 显示全部楼层
6.连接信息

9710162932c12746e3.png
 楼主| 无法去污粉 发表于 2022-5-29 16:19 | 显示全部楼层
注释:串口通信这块使用串口DMA的方式,开启串口DMA中断收发的方式,同时使用了freertos操作系统。
 楼主| 无法去污粉 发表于 2022-5-29 16:20 | 显示全部楼层
7.实物图
6048462932caf91090.png
 楼主| 无法去污粉 发表于 2022-5-29 16:21 | 显示全部楼层
gygp 发表于 2022-6-6 13:03 | 显示全部楼层
stm32可以接收并保存从esp8266传输过来的的文件吗?
51xlf 发表于 2022-6-7 12:19 | 显示全部楼层
stm32+esp8266怎么将数据传给云平台
hellosdc 发表于 2022-6-7 15:55 | 显示全部楼层
esp8266 ap模初始化  
selongli 发表于 2022-6-7 16:41 | 显示全部楼层
WIFI模块怎么通过STM32自组网
cehuafan 发表于 2022-6-7 17:48 | 显示全部楼层
STM32+ESP8266怎样使用TCP
mickit 发表于 2022-6-20 19:13 | 显示全部楼层
stm32和esp8266 功耗多少?
skyred 发表于 2022-6-20 20:40 | 显示全部楼层
8266怎么烧写的固件?
touser 发表于 2022-6-22 21:45 | 显示全部楼层
和esp8266连接完成mqtt协议通信
quickman 发表于 2022-6-24 09:33 | 显示全部楼层
ESP8266如何配置
macpherson 发表于 2022-6-24 12:43 | 显示全部楼层
stm32收不到阿里云ping包回复
mmbs 发表于 2022-6-24 14:27 | 显示全部楼层
ESP8266如何实现与服务器的TCP通讯
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部