STM32F072+PM2.5检测+ESP8266+MQTT连接阿里云物联网平台

2019-07-21 00:26发布

本帖最后由 zhang062061 于 2019-3-28 11:27 编辑

前段时间做了个小东西,有些经验在此分享一下:
先上一张实物图
实物图.jpg
硬件:
        电源:锂电池供电
        单片机:STM32F072C8T6
        WIFI模块:ESP8266
        传感器:攀藤科技PM2.5传感器、DHT12
        显示屏:3.2寸并口TFT
        存储:TF卡
软件:
程序是基于STM32CubeMX+HAL库开发的,移植了FatFS文件系统、USB虚拟串口、MQTT协议和CJSON。显示界面是自己做的,一些简单的字体,没有移植GUI。
功能:
        PM2.5检测、温湿度检测、甲醛检测(可选)
        WIFI连接阿里云物联网平台
        USB与上位机通讯
        电池电压监测
        背光调节
        时钟设置(上位机设置)
        数据存储(只移植了文件系统,功能暂时未做)
原理图:
QQ浏览器截图20190326151144.png
48脚的单片机,内部高精度的48M RC时钟,做串口和USB通讯都不用外部晶振了。IO口基本都用完了。锂电池供电,充电芯片用的TP4054。PM2.5传感器需要5V供电,用了一个升压芯片SX1308。
(一)        关键分享一下MQTT连接阿里云物联网平台(MQTT协议具体内容就不详细说了):
1、        注册阿里云物联网平台,也不详细介绍了。
2、        创建产品,选择高级版。
创建产品.jpg
3、        选择产品的属性,如图所示。然后点击完成。添加完成后会在产品列表中看到所添加的设备。
产品属性.jpg
4、        增加产品功能。在设备列表中点击查看,查看产品详情,在功能定义菜单下,增加产品功能。其中标识符后面编程会用到。
产品功能.jpg
5、        添加设备。在设备菜单下,点击添加设备,选择刚创建的产品,DeviceName随便取一个名字,点击确认。
添加设备.jpg
6、        添加完成后查看设备的详细信息,其中Productkey、DeviceName、DeviceSecret后面编程会用到。
设备详情.jpg
7、        Topic列表会自动生成一些Topic,后面会用到第一个。
(二)        平台设置完毕,下面就是单片机程序了。
1.        MQTT协议移植的paho.mqtt.embedded-c-master,用到的就是MQTTPacketsrc目录下的文件和MQTTPacketsamples目录下transport.c和.h文件。需要修改的只有transport.c里的两个函数,一个发送,一个接收。
MQTT移植.jpg
2.        打开和关闭连接已经在ESP8266实现了(ESP8266工作在TCP透传模式),所以直接返回0。
3.        还需要移植cJSON,只有两个文件cJSON.c和cJSON.h,添加到工程里,直接调用里面的函数就行。
4.        连接MQTT服务器,程序如下。抹掉的部分见后面注释。用户名中间有个“&”符号。密码可以是工具生成,也可以是函数生成。
连接MQTT.jpg
5.        生成cJSON字符串,调用cJSON函数生成字符串,其中params内部的参数即为添加产品功能时的标识符。
生成cJSON字符串.jpg
6.        发布消息。函数参数char* pTopic为设备Topic列表中的第一条的字符串,char* PMessage为刚才生成的字符串。通过判断发布消息的反馈来判断服务器连接是否正常,如果不正常就重新连接。
发布消息.jpg
7.        发布成功后,在管理平台上会看到设备上传的信息,以及历史曲线。
显示.jpg
显示曲线.jpg
再分享一下USB虚拟串口的部分
STM32CubeMX生成源代码之后,只要修改usbd_cdc_if.c中的两个函数即可。在主程序中判断是否收到数据即可。
USB.jpg
顺便写了一个简单的上位机软件,可以用于设置RTC、WIFI和采集数据。
上位机.jpg
原理图.rar (33.41 KB, 下载次数: 195) 2019-3-28 11:18 上传 点击文件名下载附件
源代码.rar (2.57 MB, 下载次数: 531) 2019-3-28 11:19 上传 点击文件名下载附件
MQTT密码工具.rar (5.65 KB, 下载次数: 209) 2019-3-28 11:19 上传 点击文件名下载附件
PCB随便画了一下,就不发了,手上还有几块板子,有需要可以私信我
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
wxjia2004
1楼-- · 2019-07-22 06:11
哥,发布你的代码讲得很清楚,订阅能讲讲吗?
lalawinter
2楼-- · 2019-07-22 06:36
插个眼
wangbo
3楼-- · 2019-07-22 12:26
 精彩回答 2  元偷偷看……
a429772682
4楼-- · 2019-07-22 12:40
插个标
不學會32不改名
5楼-- · 2019-07-22 18:03
楼主,按照你的步骤。可是WIFI在建立TCP连接成功后,
MQTTSerialize_connect();wifi发送数据后,WIFI收不到反馈包,请问是什么问题呢?谢谢了
zml13917492379
6楼-- · 2019-07-22 20:39
我们 也 类似的 开发板,通过互联网和云服务器实时交换数据的功能的源程序;
详细介绍见:
http://www.openedv.com/forum.php ... d=294206&extra=

一周热门 更多>