教程看的零基础入门学用物联网 – MQTT基础篇教程制作非常精良,强烈推荐!
-
MQTT是一个客户端服务端架构的发布/订阅模式的消息传输协议。
-
用MQTT 3.1.1版本 5的版本还没有流行
- MQTT 客户端: 数据产生和数据接收的角色都称为客户端.(传感器和APP都需要接收和发送数据所以他们都是客户端.)
- MQTT服务端: 接收和分发数据的服务器.可以解决网络不稳定,以及多设备分发的问题.
- MQTT 主题: 发布与订阅 都需要主题. 服务器也是根据主题来管理数据的(接收和分发)发布者发布数据到相应的主题,订阅者得到服务器推送已经订阅主题的数据.
- MQTT通讯的三个特点,彼此可独立,空间可分离、时间可异步。
MQTT与服务器的连接
MQTT连接服务器一共有两部
- 客户端向服务端发送请求连接.也就是发送一个请求数据包叫做:CONNECT
- CONNECT 所包含的内容(示例):
- clientId: 客户端名字,不同的客户端不能有相同的名字
- cleanSession:干净会话,服务端不保存数据,设置为flase会要求客户端对接收信息进行确认,如果没有得到确认会认为数据没发送到,会保留数据,反复重新发送.确保数据准确到达.这个字段就是告诉服务端我是不是一个重要的客户端用的. 重要的会话要设置为flase.光设置这个是不够的还需要QoS>0 以后在讲.
- keepAlive :心跳时间间隔.给设备连接状态可知用的.每个客户端给服务器发送心跳包的间隔.如果超过时间就是掉线了.
- 服务端接收到客户端请求后向客户端发送连接确认,也是发送一个数据包叫做:CONNACK
- CONNACK 所包含的内容:
- returnCode: 连接返回码 成功连接返回0,1-5是连接错误.具体表达什么意思网上查.
- sessionPresent: 当前会话.值为true,表示上个会话有内容没有确认还存有上次未发送的信息.和干净会话相关.
- Publish 界面有QoS 0 1 2可选
- Reained 就是 retainFlag后面讲解 选中后,后订阅的会立即发送此条信息 只会保留最后一条.
MQTT.fx连接MQTT服务端
- MQTT公用服务端:然也物联 www.ranye-iot.net ,MQTT服务器地址:test.ranye-iot.net,TCP端口:1883,TCP/TLS端口:8883
- clientId:英文字符,不重复即可
- keepalive
- clean session
- 订阅主题 Subscribe:输入主题 点击订阅,多了一条右上角0 表示接收数据数量
- 发布信息 Publish : 右侧输入主题名称 ,然后输入信息内容 点Publish
ESP8266连接MQTT服务端
- PubSubClient库最流行 用这个.
暂时略过 需要编程时回来看看思路
MQTT客户端发布/订阅/取消 主题
- PUBLISH 发布信息
- 客户端给服务器发送PUBLISH报文.
- 内容如下
- topicName 主题名字: 发布的主题.
- payload 发布的具体内容
- retainFlag 保留标志,当客户端订阅时正常不会给客户端发送信息,只有在新的数据产生时才会发送.如果时间很久新来的客户端获取不到数据.如果retainFlag为True,客户端在订阅后马上会收到为True的这些内容.(貌似只保留最后一个?)
- packetId 数据包id:数据包编号.服务器管理数据包用的
- qos 服务质量:决定数据信息重要性.0最低
- dupFlag 重发标志,如果信息为重新发的会为True
- SUBSCRIBE 订阅主题
- 客户端给服务器发送SUBSCRIBE报文.
- 报文中可以包含一个或多个主题名字
- 也有Qos
- SUBACK 订阅确认
- 服务端收到订阅请求后,回复的订阅确认包
- 订阅返回码 有没有成功的订阅主题. 0/1/2都为成功取决于订阅请求时候的QoS0/QoS1/QoS2. 128为订阅失败
- UNSUBSCRIBE 取消订阅
- 客户端向服务端发送 取消订阅包
- topic 主题可以有一个或者多个.
ESP8266 发布信息
只记下流程 具体编程语法先略过.
- 先连接WiFi
- MQTT 服务器连接成功 返回服务器地址
- 返回CLientID
- 向一个主题发布内容,保持心跳.
- 内容的信息.
MQTT主题进阶
- 主题基本形式
- 就是一个字符串
- 主题区分大小写
- 主题可以使用空格 但是尽量不要用 容易出问题
- 主题尽量使用ASCII字符 不要用中文 容易出错
- 主题分级
- MQTT主题可以用 / 分级处理
- 主题通配符
- 单级别通配符 + :可以替代一个主题级别
- 当订阅主题的时候 可以收到通配的主题内容. 或者跳过一个级别的主题.
- 多级别通配符 用 # 可以代替任意数量主题级别
- 多级别通配符只能放在主题的最后面.
- 主题应用注意事项
- 以$开始的主题是MQTT主题服务端系统保留的特殊主题,不能随意订阅
- 不要用 / 作为主题开头 没有意义.
- 保持主题简洁明了 对通讯也有好处.
- 在主题中尽量嵌入客户端ID 方便调试 好习惯.
ESP8266 订阅主题
暂略
总结测试
本文摘自 :https://www.cnblogs.com/