当前位置:首页 > IT技术 > 其他 > 正文

MQTT 协议笔记
2022-05-31 17:14:42

教程看的零基础入门学用物联网 – MQTT基础篇教程制作非常精良,强烈推荐!

  • MQTT是一个客户端服务端架构的发布/订阅模式的消息传输协议。

  • 用MQTT 3.1.1版本 5的版本还没有流行


  • MQTT 客户端: 数据产生和数据接收的角色都称为客户端.(传感器和APP都需要接收和发送数据所以他们都是客户端.)
  • MQTT服务端: 接收和分发数据的服务器.可以解决网络不稳定,以及多设备分发的问题.
  • MQTT 主题: 发布与订阅 都需要主题. 服务器也是根据主题来管理数据的(接收和分发)发布者发布数据到相应的主题,订阅者得到服务器推送已经订阅主题的数据.
  • MQTT通讯的三个特点,彼此可独立,空间可分离、时间可异步。

MQTT与服务器的连接

MQTT连接服务器一共有两部

  1. 客户端向服务端发送请求连接.也就是发送一个请求数据包叫做:CONNECT
  • CONNECT 所包含的内容(示例):
    image.png
  • clientId: 客户端名字,不同的客户端不能有相同的名字
  • cleanSession:干净会话,服务端不保存数据,设置为flase会要求客户端对接收信息进行确认,如果没有得到确认会认为数据没发送到,会保留数据,反复重新发送.确保数据准确到达.这个字段就是告诉服务端我是不是一个重要的客户端用的. 重要的会话要设置为flase.光设置这个是不够的还需要QoS>0 以后在讲.
  • keepAlive :心跳时间间隔.给设备连接状态可知用的.每个客户端给服务器发送心跳包的间隔.如果超过时间就是掉线了.
  1. 服务端接收到客户端请求后向客户端发送连接确认,也是发送一个数据包叫做:CONNACK
  • CONNACK 所包含的内容:
    image.png
  • returnCode: 连接返回码 成功连接返回0,1-5是连接错误.具体表达什么意思网上查.
  • sessionPresent: 当前会话.值为true,表示上个会话有内容没有确认还存有上次未发送的信息.和干净会话相关.
  1. Publish 界面有QoS 0 1 2可选
  2. Reained 就是 retainFlag后面讲解 选中后,后订阅的会立即发送此条信息 只会保留最后一条.

MQTT.fx连接MQTT服务端

  1. MQTT公用服务端:然也物联 www.ranye-iot.net ,MQTT服务器地址:test.ranye-iot.net,TCP端口:1883,TCP/TLS端口:8883
  2. clientId:英文字符,不重复即可
  3. keepalive
  4. clean session
  5. 订阅主题 Subscribe:输入主题 点击订阅,多了一条右上角0 表示接收数据数量
  6. 发布信息 Publish : 右侧输入主题名称 ,然后输入信息内容 点Publish

ESP8266连接MQTT服务端

  1. PubSubClient库最流行 用这个.
    暂时略过 需要编程时回来看看思路

MQTT客户端发布/订阅/取消 主题

  1. PUBLISH 发布信息
  • 客户端给服务器发送PUBLISH报文.
  • 内容如下
    image.png
    • topicName 主题名字: 发布的主题.
    • payload 发布的具体内容
    • retainFlag 保留标志,当客户端订阅时正常不会给客户端发送信息,只有在新的数据产生时才会发送.如果时间很久新来的客户端获取不到数据.如果retainFlag为True,客户端在订阅后马上会收到为True的这些内容.(貌似只保留最后一个?)
    • packetId 数据包id:数据包编号.服务器管理数据包用的
    • qos 服务质量:决定数据信息重要性.0最低
    • dupFlag 重发标志,如果信息为重新发的会为True
  1. SUBSCRIBE 订阅主题
  • 客户端给服务器发送SUBSCRIBE报文.
  • 报文中可以包含一个或多个主题名字
  • 也有Qos
  1. SUBACK 订阅确认
    • 服务端收到订阅请求后,回复的订阅确认包
    • 订阅返回码 有没有成功的订阅主题. 0/1/2都为成功取决于订阅请求时候的QoS0/QoS1/QoS2. 128为订阅失败
  2. UNSUBSCRIBE 取消订阅
    • 客户端向服务端发送 取消订阅包
    • topic 主题可以有一个或者多个.
      image.png

ESP8266 发布信息

只记下流程 具体编程语法先略过.

  1. 先连接WiFi
  2. MQTT 服务器连接成功 返回服务器地址
  3. 返回CLientID
  4. 向一个主题发布内容,保持心跳.
  5. 内容的信息.

MQTT主题进阶

  1. 主题基本形式
  • 就是一个字符串
  • 主题区分大小写
  • 主题可以使用空格 但是尽量不要用 容易出问题
  • 主题尽量使用ASCII字符 不要用中文 容易出错
  1. 主题分级
  • MQTT主题可以用 / 分级处理
  1. 主题通配符
  • 单级别通配符 + :可以替代一个主题级别
  • 当订阅主题的时候 可以收到通配的主题内容. 或者跳过一个级别的主题.
    image.png
  • 多级别通配符 用 # 可以代替任意数量主题级别
  • 多级别通配符只能放在主题的最后面.
  1. 主题应用注意事项
  • 以$开始的主题是MQTT主题服务端系统保留的特殊主题,不能随意订阅
  • 不要用 / 作为主题开头 没有意义.
  • 保持主题简洁明了 对通讯也有好处.
  • 在主题中尽量嵌入客户端ID 方便调试 好习惯.

ESP8266 订阅主题

暂略

总结测试

本文摘自 :https://www.cnblogs.com/