赞
踩
实现通过stm32f103c8t6+操作系统(freertos)读取dht12温湿度传感器的数据,采用ESP8266连接网络,经过MQTT协议连接阿里云IOT,进行数据的传输,以及服务器发送数据控制LED的亮灭,包括消息的发布和订阅等操作,完成云端和设备端的通讯。
首先,我们使用MQTT.fx模拟器,通过模拟的方式去和阿里云平台进行通讯,此步骤是为了验证我们是否完成了阿里云平台的 搭建。其次是为了获取一些相关的日志信息。
其次,我们使用STM32F103C8T6,通过ESP8266连接网络,进行阿里云平台的通讯,实现本次设计的最终方案。本设计使用了dht12温湿度传感器进行读取温度,并通过阿里云平台进行发布,控制我们的LED灯的亮灭。
1.登陆网址:https://www.aliyun.com/
2.找到物联网平台
3.根据阿里云的文档创建一个产品,创建一个这个产品的设备,并添加一个自定义功能
4.我们先创建一个产品,创建流程如下:
然后点击确认即可。
5.产品弄好了,就要在产品下面挂上设备
6.设置下添加的设备的名字
7.查看添加的设备信息
注意,以下信息是连接阿里云平台的时候需要用到的。
提示:后面咱就会使用下面三个参数(三元组)组合MQTT参数
“ProductKey”: “a1Q",
“DeviceName”: “dht12”,
“DeviceSecret”: "7G****************VsU”
1.这里需要用到两个软件
1.1.阿里云物联平台配置_32
1.2.MQTT.fx
2.打开MQTT.fx软件
2.1.打开软件
2.2.配置相关信息
3.连接调试
3.1.查看Topic列表,一会需要用到
3.2.发布LED开关和温湿度功能。
3.3.添加自定义功能,
3.4.最后一定要记得发布。
3.5.连接服务器
3.6.推送的内容需要在阿里云平台点击
3.7.推送温湿度数据到阿里云平台服务器上
3.8.到此,MQTT.fx模拟器调试就结束了。
当服务器发布消息的时候,会进入此函数,对数据进行解析数据,数据格式为json格式,如代码所示。
u8 MQTT_Publish(unsigned char* data,int len) { int buflen = sizeof(buf); int rc = 0; unsigned char dup; int qos; unsigned char retained = 0; unsigned short msgid = 1; int payloadlen_in; unsigned char* payload_in; MQTTString receivedTopic; cJSON *json , *json_params, *json_id, *json_led, *json_display; memcpy(buf,data,len); rc = MQTTDeserialize_publish(&dup, &qos, &retained, &msgid, &receivedTopic,&payload_in, &payloadlen_in, (unsigned char*)buf, buflen); //服务器有推送信息 printf("message arrived : %s\r\n", payload_in); json = cJSON_Parse((char *)payload_in); //解析数据包 if (!json) { printf("Error before: [%s]\r\n",cJSON_GetErrorPtr()); } else { json_id = cJSON_GetObjectItem(json , "id"); if(json_id->type == cJSON_String) { printf("id:%s\r\n", json_id->valuestring); } json_params = cJSON_GetObjectItem(json , "params"); if(json_params) { if(cJSON_GetObjectItem(json_params, "LED0")) { json_led = cJSON_GetObjectItem(json_params, "LED0"); if(json_led->type == cJSON_Number) { printf("LED:%d\r\n", json_led->valueint); if(json_led->valueint == 1) { LED0 = 0; } else { LED0 = 1; } } } if(cJSON_GetObjectItem(json_params, "display")) { json_display = cJSON_GetObjectItem(json_params, "display"); if (json_display->type == cJSON_String) { //暂不处理 } } } } cJSON_Delete(json); return TRUE; }
注释:由于本设计使用了ESP8266来联网,ESP8266联网部分代码就不再过多解释,可参考相关的例子进行。
注释:串口通信这块使用串口DMA的方式,开启串口DMA中断收发的方式,同时使用了freertos操作系统。
下一章:基于STM32+MQTT连接阿里云获取网络时间
链接: link.(https://blog.csdn.net/qq_39721016/article/details/123090137?spm=1001.2014.3001.5501)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。