OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 21187|回复: 51

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

  [复制链接]

17

主题

56

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
394
金钱
394
注册时间
2015-1-7
在线时间
101 小时
发表于 2019-3-27 16:16:34 | 显示全部楼层 |阅读模式
本帖最后由 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,用到的就是MQTTPacket\src目录下的文件和MQTTPacket\samples目录下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, 下载次数: 928)
https://shop72315368.taobao.com
承接软硬件项目开发
微信搜索 “嵌入式技术开发”,关注我的公众号
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

17

主题

56

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
394
金钱
394
注册时间
2015-1-7
在线时间
101 小时
 楼主| 发表于 2019-3-27 16:18:57 | 显示全部楼层
本帖最后由 zhang062061 于 2019-3-28 11:28 编辑

重新整理了一下
回复 支持 反对

使用道具 举报

3

主题

1155

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7464
金钱
7464
注册时间
2015-1-15
在线时间
1368 小时
发表于 2019-3-27 17:17:35 | 显示全部楼层
直接转过来啊
一分耕耘一分收获。
回复 支持 反对

使用道具 举报

17

主题

56

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
394
金钱
394
注册时间
2015-1-7
在线时间
101 小时
 楼主| 发表于 2019-3-28 11:10:00 | 显示全部楼层

不会弄  怎么转啊
https://shop72315368.taobao.com
承接软硬件项目开发
微信搜索 “嵌入式技术开发”,关注我的公众号
回复 支持 反对

使用道具 举报

0

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2018-11-7
在线时间
17 小时
发表于 2019-4-1 10:50:02 | 显示全部楼层
老哥,你的发布消息里是先判断接收发布消息的回复,但是实际上那个时候还没有发布消息,这一次会有回复吗
回复 支持 反对

使用道具 举报

0

主题

295

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
335
金钱
335
注册时间
2019-3-26
在线时间
9 小时
发表于 2019-4-1 11:15:02 | 显示全部楼层
谢谢楼主分享!
回复 支持 反对

使用道具 举报

17

主题

56

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
394
金钱
394
注册时间
2015-1-7
在线时间
101 小时
 楼主| 发表于 2019-4-4 08:22:24 | 显示全部楼层
王年年 发表于 2019-4-1 10:50
老哥,你的发布消息里是先判断接收发布消息的回复,但是实际上那个时候还没有发布消息,这一次会有回复吗

第一次发布之前肯定没有回复,判断的是上一次发布的回复
https://shop72315368.taobao.com
承接软硬件项目开发
微信搜索 “嵌入式技术开发”,关注我的公众号
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2019-4-13
在线时间
4 小时
发表于 2019-4-13 14:26:36 | 显示全部楼层
哥,发布你的代码讲得很清楚,订阅能讲讲吗?
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2019-4-15
在线时间
2 小时
发表于 2019-4-15 22:46:30 | 显示全部楼层
插个眼
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2013-8-20
在线时间
2 小时
发表于 2019-5-8 15:03:48 | 显示全部楼层
资料不错,请问阿里云用基础版可以吗?
回复 支持 反对

使用道具 举报

4

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
140
金钱
140
注册时间
2016-9-26
在线时间
26 小时
发表于 2019-5-12 22:38:21 | 显示全部楼层
插个标
回复 支持 反对

使用道具 举报

24

主题

106

帖子

0

精华

高级会员

Rank: 4

积分
637
金钱
637
注册时间
2018-7-13
在线时间
197 小时
发表于 2019-5-24 16:15:43 | 显示全部楼层
楼主,按照你的步骤。可是WIFI在建立TCP连接成功后,
MQTTSerialize_connect();wifi发送数据后,WIFI收不到反馈包,请问是什么问题呢?谢谢了
回复 支持 反对

使用道具 举报

13

主题

271

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
5387
金钱
5387
注册时间
2017-8-14
在线时间
248 小时
发表于 2019-6-4 22:43:52 | 显示全部楼层
我们 也 类似的 开发板,通过互联网和云服务器实时交换数据的功能的源程序;
详细介绍见:
http://www.openedv.com/forum.php ... d=294206&extra=
详细资料扣扣群204408503自行下载
回复 支持 反对

使用道具 举报

1

主题

232

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3413
金钱
3413
注册时间
2015-4-19
在线时间
372 小时
发表于 2019-7-29 14:24:13 | 显示全部楼层
谢谢楼主分享!
回复 支持 反对

使用道具 举报

0

主题

12

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2019-5-2
在线时间
12 小时
发表于 2019-8-1 19:00:40 | 显示全部楼层
这个很好
回复 支持 反对

使用道具 举报

10

主题

80

帖子

0

精华

高级会员

Rank: 4

积分
514
金钱
514
注册时间
2017-5-21
在线时间
82 小时
发表于 2019-8-1 21:33:40 | 显示全部楼层
楼主厉害呀,我最近也在研究这个MQTT,我也参考了那个库,不过有一个疑问,你的transport_getdata这个函数,我看网上的一些帖子都是这么写得
uint16_t first_index_to_read;
int transport_getdata(unsigned char* buf, int count)
{
  memcpy(buf,&ReceiveBuf2[first_index_to_read],count);
  first_index_to_read += count;// 更新读取的序号,以便下次读取
  return count;
}

你那样写真的没问题吗?我之前也是写0的,然后MQTT conn那一步都挂掉,改成我上面发的这个就没问题了,好神奇呀
回复 支持 反对

使用道具 举报

10

主题

80

帖子

0

精华

高级会员

Rank: 4

积分
514
金钱
514
注册时间
2017-5-21
在线时间
82 小时
发表于 2019-8-1 21:43:50 | 显示全部楼层
if (MQTTDeserialize_connack(&sessionPresent, &connack_rc, buf, buflen) != 1 || connack_rc != 0)


楼主这行代码 connack_rc = 2,进入了这个if 就会打印Unable to connect, return code 2  然后就挂掉了。

我发现问题在transport_getdata这个函数
改成下面我这么写就对了,楼主你那边没有这个问题吗?

uint16_t first_index_to_read;
int transport_getdata(unsigned char* buf, int count)
{
  memcpy(buf,&ReceiveBuf2[first_index_to_read],count);
  first_index_to_read += count;// 更新读取的序号,以便下次读取
  return count;
}
回复 支持 反对

使用道具 举报

11

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
499
金钱
499
注册时间
2015-10-26
在线时间
125 小时
发表于 2019-8-11 22:07:15 | 显示全部楼层
感谢大佬分享,好好学习一下
我想好好学习RTOS,不管哪一种,学会一种就行
回复 支持 反对

使用道具 举报

2

主题

5

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2019-7-15
在线时间
9 小时
发表于 2019-8-22 11:47:05 | 显示全部楼层
ip 和 gateway都是什么啊???
回复 支持 反对

使用道具 举报

2

主题

20

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
495
金钱
495
注册时间
2016-4-23
在线时间
67 小时
发表于 2019-8-22 12:02:28 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

3

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2016-10-26
在线时间
23 小时
发表于 2019-8-28 09:02:21 | 显示全部楼层
楼主 。。。好厉害啦
回复 支持 反对

使用道具 举报

0

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2017-8-2
在线时间
10 小时
发表于 2019-8-28 10:00:56 | 显示全部楼层
谢谢楼主分享!
回复 支持 反对

使用道具 举报

0

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2019-6-17
在线时间
16 小时
发表于 2019-8-29 17:48:02 | 显示全部楼层

哥哥他那个mqtt协议在哪里获取的
回复 支持 反对

使用道具 举报

0

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
157
金钱
157
注册时间
2016-4-21
在线时间
70 小时
发表于 2019-9-21 18:01:18 | 显示全部楼层
Anyint 发表于 2019-8-1 21:43
if (MQTTDeserialize_connack(&sessionPresent, &connack_rc, buf, buflen) != 1 || connack_rc != 0)


...

楼主的代码跟你情况一样日志输出 Unable to connect, return code 2   改成你上面的代码后rc=0不会调用connack处理。。。transport_getdata这个函数使用串口到底怎么移植啊!
回复 支持 反对

使用道具 举报

7

主题

43

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
293
金钱
293
注册时间
2018-3-28
在线时间
43 小时
发表于 2019-9-29 09:05:12 | 显示全部楼层
楼主。你好,问个问题,8266建立MQTT链接之后几秒钟TCP连接就断了,然后MQTT也就断了,然后又开始重连,然后又断,一直循环,这个是怎么回事啊。
回复 支持 反对

使用道具 举报

1

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2013-8-5
在线时间
31 小时
发表于 2019-10-15 15:11:48 | 显示全部楼层
标记一下
回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
119
金钱
119
注册时间
2019-2-1
在线时间
32 小时
发表于 2019-12-22 20:10:01 | 显示全部楼层
最近在玩这个,感谢楼主分享
回复 支持 反对

使用道具 举报

4

主题

77

帖子

0

精华

高级会员

Rank: 4

积分
637
金钱
637
注册时间
2019-1-12
在线时间
67 小时
发表于 2020-1-12 23:00:55 | 显示全部楼层
怎么玩。我也想玩
回复 支持 反对

使用道具 举报

0

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2019-7-2
在线时间
12 小时
发表于 2020-1-16 15:36:41 | 显示全部楼层
谢楼主分享
回复 支持 反对

使用道具 举报

0

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2019-12-8
在线时间
21 小时
发表于 2020-1-17 10:17:46 来自手机 | 显示全部楼层
谢谢楼主无私分享
回复 支持 反对

使用道具 举报

0

主题

11

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2019-7-23
在线时间
10 小时
发表于 2020-2-21 14:27:28 | 显示全部楼层
这个就非常棒啊
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2019-5-21
在线时间
3 小时
发表于 2020-2-28 10:24:07 | 显示全部楼层
不错刚好要用到
回复 支持 反对

使用道具 举报

17

主题

56

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
394
金钱
394
注册时间
2015-1-7
在线时间
101 小时
 楼主| 发表于 2020-2-29 09:21:10 | 显示全部楼层
xieyunsky 发表于 2019-9-29 09:05
楼主。你好,问个问题,8266建立MQTT链接之后几秒钟TCP连接就断了,然后MQTT也就断了,然后又开始重连,然 ...

是不是Keep Alive的时间设的很短啊,超时断开了
https://shop72315368.taobao.com
承接软硬件项目开发
微信搜索 “嵌入式技术开发”,关注我的公众号
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2019-9-29
在线时间
70 小时
发表于 2020-3-3 19:19:17 | 显示全部楼层
阿里云服务平台消息通讯包不便宜呀 1年1000w条 151块钱,算下来1s推送一条信息也就发半年不到,是这样算吗?
回复 支持 反对

使用道具 举报

17

主题

56

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
394
金钱
394
注册时间
2015-1-7
在线时间
101 小时
 楼主| 发表于 2020-3-8 10:57:53 | 显示全部楼层
hanzy1234 发表于 2020-3-3 19:19
阿里云服务平台消息通讯包不便宜呀 1年1000w条 151块钱,算下来1s推送一条信息也就发半年不到,是这样算吗 ...

这个还真没算过~
https://shop72315368.taobao.com
承接软硬件项目开发
微信搜索 “嵌入式技术开发”,关注我的公众号
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2020-3-14
在线时间
1 小时
发表于 2020-3-14 18:55:12 | 显示全部楼层
谢谢楼主分享,新手收藏
回复 支持 反对

使用道具 举报

3

主题

20

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2019-5-14
在线时间
11 小时
发表于 2020-3-16 21:58:54 | 显示全部楼层
楼主您好我想请问一下您的这个USB是做什么用的啊具体
回复 支持 反对

使用道具 举报

1

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2019-5-19
在线时间
15 小时
发表于 2020-3-30 14:19:11 | 显示全部楼层
谢谢楼主分享,想跟楼主说下,要是随手做的还好,要正经做的话,工程最好给C文件分下模块,不然可读性比较抓急
回复 支持 反对

使用道具 举报

1

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2019-5-19
在线时间
15 小时
发表于 2020-3-30 14:20:01 | 显示全部楼层
li1997522 发表于 2020-3-16 21:58
楼主您好我想请问一下您的这个USB是做什么用的啊具体

usb就是跟上位机通信的吧
回复 支持 反对

使用道具 举报

3

主题

20

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2019-5-14
在线时间
11 小时
发表于 2020-3-31 17:32:45 | 显示全部楼层
静静开发 发表于 2020-3-30 14:20
usb就是跟上位机通信的吧

哦,谢谢
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2020-4-11
在线时间
4 小时
发表于 2020-4-12 00:04:17 | 显示全部楼层
谢谢分享,实用
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2020-5-12
在线时间
3 小时
发表于 2020-5-17 21:00:35 | 显示全部楼层
大佬有没有教学视频之类的啊
回复 支持 反对

使用道具 举报

4

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
121
金钱
121
注册时间
2013-3-15
在线时间
22 小时
发表于 2020-7-31 21:57:58 | 显示全部楼层
谢谢楼主分享!
chen
回复 支持 反对

使用道具 举报

2

主题

11

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
290
金钱
290
注册时间
2019-11-13
在线时间
69 小时
发表于 2020-8-6 10:58:11 | 显示全部楼层
谢谢无私分享
回复 支持 反对

使用道具 举报

1

主题

34

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1617
金钱
1617
注册时间
2019-4-22
在线时间
310 小时
发表于 2020-8-6 12:23:00 | 显示全部楼层
感谢楼主,Mark一下
回复 支持 反对

使用道具 举报

23

主题

90

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2018-8-12
在线时间
100 小时
发表于 2020-8-11 11:00:35 | 显示全部楼层
想问一下ESP8266烧的是什么固件
回复 支持 反对

使用道具 举报

1

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2020-7-28
在线时间
16 小时
发表于 2020-8-11 14:26:09 | 显示全部楼层
谢谢楼主分享
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2017-8-23
在线时间
14 小时
发表于 2020-8-19 18:05:14 | 显示全部楼层
感谢分享,研究一下。
回复 支持 反对

使用道具 举报

5

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
150
金钱
150
注册时间
2012-12-8
在线时间
30 小时
发表于 2020-12-2 17:25:23 | 显示全部楼层
真的不错 我爱你
回复 支持 反对

使用道具 举报

1

主题

31

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
436
金钱
436
注册时间
2017-8-30
在线时间
141 小时
发表于 2020-12-3 17:09:53 | 显示全部楼层
谢谢楼主分享!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-23 00:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表