前言:
本文介绍如何运用STM32F103与SIM800C组成的设备端连接百度物接入的教程,文章中主要以介绍连接方法为主,代码部分后续考虑发布(一般情况下通过本文的参考即可完成与百度物接入的连接)。
由于STM32与SIM800C的使用教学在网上随处可见,本文将不在此介绍。
正文:
首先打开百度物接入主界面,复制我们的TCP服务器地址到STM32代码中,用SIM800C模块连接到百度物接入的TCP服务器。(具体连接请自行百度)
以下重点介绍MQTT协议常用的三种报文:
在实际应用中常用的报文有三类:连接报文、订阅报文、发布报文
连接报文:
组成:10+后续数据长度+00 04 4D 51 54 54 04 C2 00 78 +客户端ID长度+客户端ID+用户名长度+用户名+密码长度+密码
如:10 37 00 04 4D 51 54 54 04 C2 00 78 00 0C 44 65 76 69 63 65 49 64 2D 6B 66 62 00 0B 35 71 75 61 6E 37 6B 2F 6B 66 62 00 10 68 50 34 55 36 78 52 62 38 78 53 52 49 61 54 5A
解释:
固定头与可变头:
10:报文类型为连接报文
37:后续数据总长度
00 04:协议名长度
4D 51 54 54:协议名为MQTT
04:协议级别(固定)
C2:连接标志,没特殊要求可不改,详细说明在MQTT手册3.1.2.3
00 78:最大保持连接时间为120S,当120秒内没进行任何数据的收发时连接将会断开
客户端ID与登陆凭证:
00 0C:客户端ID长度
44 65 76 69 63 65 49 64 2D 6B 66 62:客户端ID
00 0B:用户名长度
35 71 75 61 6E 37 6B 2F 6B 66 62:用户名
00 10:密钥长度
68 50 34 55 36 78 52 62 38 78 53 52 49 61 54 5A :密钥
说明:连接报文需要客户端ID、用户名、密钥。
客户端ID:可以随机定义(只要在服务器中客户端ID不出现重复即可)
用户名:用户名即我们在百度物接入创建的用户名
秘钥:在用户创建完成时服务器提供的秘钥,若丢失只能通过物接入平台重新生成。
将客户端ID、用户名、密钥转换为16进制码并根据上述说明组成连接报文发送至服务器当中,即可完成连接。
连接报文的功能:连接百度IOT服务器
订阅报文:
组成:82+后续数据长度+需订阅的主题长度+00 0A+主题名长度+主题名+等级
如:82 15 00 0A 00 10 35 71 75 61 6E 37 6B 2F 50 43 5F 74 6F 70 69 63 00
解释:
82:报文类型为订阅报文
15:后续数据长度
00 0A:订阅报文的可变头(固定)
00 10:主题名长度
35 71 75 61 6E 37 6B 2F 50 43 5F 74 6F 70 69 63:主题名
00:报文等级为0
主题即在百度物接入平台创建策略时为其添加的主题,详细可查看上一文章。
订阅报文功能:订阅想要接收的报文主题,当组网内有客户端向该主题发布信息的时候,服务器会将该信息转发至该策略所有已订阅该主题的客户端当中。
发布报文:
30+后续数据长度+要发布的主题名长度+主题名+数据
如:30 16 00 11 35 71 75 61 6E 37 6B 2F 4B 46 42 5F 74 6F 70 69 63 31 32 33
#####解释:
30:报文类型为发布报文
16:后续数据长度
00 11:要发布的主题名长度
35 71 75 61 6E 37 6B 2F 4B 46 42 5F 74 6F 70 69 63:主题名
31 32 33:发布的数据为123
发布报文的功能:将数据发布到某个主题当中,策略内所有订阅了该主题的客户端将收到此报文。
运用:
STM32通过SIM800C连接TCP服务器后向其发送连接报文完成连接,再向其发送订阅报文完成主题的订阅操作。同一个策略中的客户端向该主题发布信息时服务器会将该信息转发至单片机当中。同理,单片机向服务器发送发布报文,订阅了该报文的主题的客户端将收到单片机所发送的报文。