目录
MQTT 协议
什么是 MQTT 协议
MQTT 是基于订阅和发布的,建立在 TCP/IP 之上的应用层协议。
为什么学习 MQTT
因为很多物联网平台的接入协议是 MQTT,阿里云,华为云,腾讯云等都支持 MQTT.
MQTT 的相关术语
MQTT 报文有哪些
MQTT 协议分为哪几部分组成
分为三部分:固定报头(必须有)+可变报头(可能有)+有效载荷(可能有)
固定报头
哪些报文有固定报头
所有的报文都有固定报头
固定报头有哪些组成
控制报文类型(第 1 个字节高 4 位)+ 报文类型的标志位(第 1 个字节低 4 位)+剩余长度
剩余长度如何计算
最高位为符号位,低 7 位代表长度
固定报头的长度范围
2—5 个字节
可变报头
哪些报文有可变报头
可变报头有哪些组成
注意:QoS 等于 0 的 PUBLISH 报文不能包含报文标识符
有效载荷
哪些报文有有效载荷
有效载荷有哪些组成
不同报文类型,有效载荷不同,要去具体章节看。
有效载荷的格式一定是 JSON 格式吗?
只有发布报文的有效载荷部分是 JSON 格式
常见报文
连接报文
连接报文方向
客户端→服务端
连接报文的固定报头
连接报文的可变报头
连接标志占 1 个字节,按位分为不同的功能。
连接报文的有效载荷
连接应答报文
连接应答报文方向
服务端→客户端
连接应答报文固定报头
连接应答报文可变报头
连接应答报文有效载荷
连接应答报文无有效载荷
发布报文
发布报文方向
可以是客户端→服务端,也可以是服务端→客户端
发布报文固定报头
发布报文可变报头
可变报头按顺序包含主题名和报文标识符。
发布报文有效载荷
有效载荷包含将被发布的应用消息。数据的内容和格式是应用特定的 Json 格式
订阅报文
订阅报文方向
客户端→服务端
订阅报文固定报头
订阅报文可变报头
可变报头包含报文标识符
订阅报文有效载荷
支持一次订阅多个主题
订阅确定报文
订阅确定报文方向
服务端→客户端
订阅确认报文固定报头
订阅确认报文可变报头
可变报头包含等待确认的 SUBSCRIBE 报文的报文标识符
订阅确认报文有效载荷
有效载荷包含一个返回码清单
心跳报文
心跳报文方向
客户端→服务端
心跳报文作用
在没有任何其它控制报文从客户端发给服务的时,告知服务端客户端还活着。
请求服务端发送 响应确认它还活着。
使用网络以确认网络连接没有断开。
心跳报文固定报头
心跳报文可变报头
无
心跳报文有效载荷
无
心跳应答报文
订阅报文方向
客户端→服务端
心跳应答报文作用
可以通过是否收到平台的心跳应答,来判断设备是否在线
订阅报文固定报头
订阅报文可变报头
无
订阅报文有效载荷
无
Qos 的理解
Qos=0:如果消息丢失,是不补发。 -- 使用 0
Qos=2:消息最靠谱,需要有往复的确认。
Json 格式介绍
一个无序的键值对集合。
使用花括号“{}”包围。
每个键值对由一个键和一个值组成,键和值之间用冒号“:”分隔,键值对之间用逗号“,”分隔。
键必须是字符串,并且用双引号""包围。
值可以是字符串、数值、布尔值、数组、对象或“null”。
工具链接
十六进制和 ASCLL 码转换
https://coding.tools/cn/hex-to-ascii
JSON 在线工具
https://www.sojson.com/
云平台
常见的云平台
设备需要连接云平台,远程交互云平台可以是共用的,也可以是私有的。
共用的:阿里云 华为云 腾讯云 OneNet 巴法云
私有的:服务器上自己部署。
云平台创建设备
登陆云平台
华为云618年中钜惠_特价云服务器秒杀_企业上云爆款优惠券-华为云成长地图_设备接入 IoTDA-华为云华为云618年中钜惠_特价云服务器秒杀_企业上云爆款优惠券-华为云
Mqtt.fx 验证平台功能
目的:通过 Mqtt.fx 模拟客户端设备,验证交互的过程
1. 安装,将安装路径下的图标,发送快捷方式到桌面,并打开软件
2. 电脑连接网络
3. 打开设置,填入设备信息
注意:填写的时候,先 CTRL+A 全选删除,再填入
注意:端口是 1883
4. 点击连接,设备显示在线
5. 填写发布消息的主题和有效载荷,并点击发布
6. 查看是否发布成功
7. 切换到订阅页面,填入要订阅的主题并点击订阅
8. 下发信息到设备并确认是否可以收到
9. 回复收到下发的应答消息,避免平台显示超时
10. 也可以从这里下发消息
11. 断开设备与平台的连接,避免后续与程序冲突
软件可以模拟封装报文和平台进行交互
如何实现 STM32 连接华为云
如何封装 MQTT 格式的报文
自己定义大数组,根据协议挨着字节填充
Mqtt 库(Paho 库)
使用联网模块中,自带的 MQTT 固件
如何使用 Paho 库实现 STM32 连接服务器
1. 准备 mqtt 库文件
2. 在自己的工程目录下,新建 1 个名字为 mqtt 的文件夹
3. 将 MQTT 的源文件全部拷贝到 mqtt 文件夹下
4. 在 keil 工程中,新建文件夹
5. 添加.c 文件
6. 包含.h 的路径
7. 函数详细的介绍
8. 库如何使用
9. 连接报文封装
10. 发布报文封装
11. 订阅报文封装
12. 心跳报文封装