ESP32-IDF05-4 WIFI-MQTT协议基础
Posted Ciaran-byte
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ESP32-IDF05-4 WIFI-MQTT协议基础相关的知识,希望对你有一定的参考价值。
mqtt协议基础
文章目录
声明
该部分是参考的太极创客的内容完成的,感觉他们的视频和教程非常好,本文仅仅是笔记,可以去听原版的
1. mqtt的组成
mqtt是一个客户端服务端架构的发布订阅模式的消息传输协议
1.1 客户端
客户端可以完成发送数据,也可以完成接收数据的功能
1.2 服务端
是个中转站,能够判断要把数据转发到哪些客户端。
可以对客户端发送来的数据进行必要的保存,为了提升mqtt传输的稳定性
能够把客户端信息进行分发
1.3 mqtt主题
mqtt服务器怎么知道要把数据发送给哪些客户端呢?
这个时候就要提到主题的概念了,发送来的数据会被加上一个标签,就是主题。客户端会告诉服务器自己需要哪些主题的数据,因此服务器就能够根据客户端的请求,转发数据了。只有订阅了主题的客户端,才能够接收到数据。
1.4 多重身份
每个客户端都可以发布或者订阅消息。每个客户端可以有不同的身份。
1.5 mqtt协议的特性
- 相互独立: mqtt客户端是一个个独立的个体,他们不需要了解彼此的存在,依然能够实现信息交流。
- 空间可分离: 只要客户端联网就能够交流
- 时间可异步:如果客户端和服务器之间连接发生了断开,服务器不能马上把信息发送给客户端,服务器可以等到客户端重新连接网络的时候再发送,因此允许时间的异步。
2. 连接和断开mqtt服务器
2.1 客户端向服务器发送请求
- 客户端向服务器发送connect数据包
- clientId :客户端的名字
- cleanSession:客户端受到服务端数据以后需不需要返回确认,比较重要的信息发送需要设置为fasle,需要返回信息,并且服务端会保存这个信息。同时,重要的客户端除了这个选项以外,还要设置Qos>0
- username
- password
- lastwillTopic
- lashWillQos
- lastWillMessage
- lastWillRetain
- keepAlive: 心跳时间间隔。要求每个客户端定时给服务端发送心跳信息,表示客户端还在线。
2.2 服务端向客户端发送确认
- 服务端向客户端回复connack数据包
- sessionPresent:当前会话,表示上一次客户端跟服务端交互的过程中,客户端是否有消息没有确认(cleansession=false的时候)
- returnCode: 连接返回码,能够表示服务端的状态
2.3 客户端与服务端断开连接
客户端会向服务端发送disconnect数据包
3. 测试环境搭建
使用mqttfx软件,可以实现mqtt测试的功能,这里我们使用公用的物联网服务器进行学习。
4. 发布订阅和取消订阅
4.1 发布信息
publish报文
- packetId: 数据包id,便于服务端管理
- topicName :主题名
- qos:服务质量。不同mqtt客户端负责的工作对信息准确性要求不同,qos用于决定数据信息的重要性,qos越大,信息越重要。
- retainFlag:保留标志,客户端可能很长时间都不向服务器发送内容。如果该标志位为true,服务器会保留这个数据包,如果客户端很长时间不向服务器发送数据,而其他接收客户端又向服务器请求信息,服务器就会把保留的数据发送给请求客户端。
- payload: 发布内容
- dupFlag: 重发标志。为了确保信息的准确性,客户端可能会向服务端发送多次报文,如果是true,表示这是重发的。
4.2 订阅主题
subscribe报文
订阅报文一次可能订阅不止一个主题。
这个报文也有qos
4.3 订阅确认
suback报文
客户端向服务端发送订阅主题的数据包时,服务器会向客户端进行回复
报文中最重要的是订阅返回码
如果订阅了多个主题,服务器会对订阅的每个主题进行单独的确认返回。
订阅返回码与客户端发送的主题的Qos大小有关。
4.4 取消订阅
客户向服务端发送unsubscribe报文
一次性可以取消订阅多个报文
4.5 使用mqttfx软件进行模拟
mqttfx是一个很好的用来学习mqtt协议的软件,能够进行各种测试
5. mqtt 主题
5.1 主题的基本形式
主题的基本形式就是一个字符串,需要注意以下几点:
- 区分大小写
- 主题可以使用空格,但是不建议使用
- 不建议使用中文字符,因为很多服务端不支持中文字符
5.2 主题分级
mqtt可以进行分级管理。使用/进行分割,如以下的四级主题
Tyler-1/motor/1/speed
5.3 主题通配符
5.3.1 单级别通配符+
单级别通配符只能代替一个级别
5.3.2 多级别通配符#
#必须放到最后
5.4 主题应用注意事项
- 以$开始的主题
以$开始的主题是mqtt服务端系统保保留的特殊主题,我们不能随意订阅或者向其发布信息
- 不要以/开头作为主体
会增加没有意义的级别
- 主体不要使用空格
- 在主题中嵌入客户端ID
便于了解该主题是哪一个设备发布的
以上是关于ESP32-IDF05-4 WIFI-MQTT协议基础的主要内容,如果未能解决你的问题,请参考以下文章
ESP32-IDF 05-2 WIFI-esp32获取温度和天气信息
ESP32 ESP-IDF开发环境搭建,Windows下基于ESP-IDF | Cmake | VScode插件的 ESP32 开发环境搭建