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. 测试环境搭建

共用mqtt服务器列表

   使用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 开发环境搭建

ESP32 SDK 开发——ESP32/ESP-IDF环境搭建-linux

ESP32-IDF编译问题

ESP32学习笔记之ESP32-idf环境搭载心得

VSCode ESP32-IDF安装