esp8266和MQTT(MQTT介绍)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了esp8266和MQTT(MQTT介绍)相关的知识,希望对你有一定的参考价值。
参考技术A 为什么要介绍MQTT呢?MQTT又是什么呢?MQTT能做什么呢?下面,我就来简单的介绍一下MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和致动器(比如通过Twitter让房屋联网)的通信协议。
MQTT的特点:
MQTT协议是为大量计算能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议,它具有以下主要的几项特性:
1、使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合;
2、对负载内容屏蔽的消息传输;
3、使用 TCP/IP 提供网络连接;
4、有三种消息发布服务质量:
“至多一次”,消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。
“至少一次”,确保消息到达,但消息重复可能会发生。
“只有一次”,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。
5、小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量;
6、使用 Last Will 和 Testament 特性通知有关各方客户端异常中断的机制;
说简单一点,它就是一个即时通讯协议,在占用很少的资源情况下,可完成即时通讯。说以说esp8266采用mqtt通讯协议,是一个很不错的选择,使用esp8266+mqtt实现一个物联网的小实验,也是很容易的,其运行的效率也很高,具体的mqtt我在这里就不多说了,大家可以自行去度娘问问啦。
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
便于了解该主题是哪一个设备发布的
以上是关于esp8266和MQTT(MQTT介绍)的主要内容,如果未能解决你的问题,请参考以下文章
开源app 控制ESP8266,通过mqtt,app inventor开发
我无法在 Lua 上为 ESP8266 订阅 MQTT 代理
阿里云物联网平台配置ESP8266真实设备AT串口连接,支持MQTT协议通信
阿里云物联网平台配置ESP8266真实设备AT串口连接,支持MQTT协议通信