PAGE1
PAGE1
MQTT协议入门
1.MQTT协议简介
MQTT(MessageQueuingTelemetryTransport,消息队列遥测传输)是一种基于发布/订阅模式的轻量级消息协议,特别适用于物联网(IoT)设备之间的通信。它设计用于低带宽、高延迟或不可靠的网络环境,因此在嵌入式系统和单片机上非常受欢迎。MQTT协议通过最小化传输大小来减少网络流量,同时确保消息的可靠传递。
1.1MQTT协议的基本概念
发布/订阅模式:MQTT使用发布/订阅模式,客户端可以订阅一个或多个主题(Topic),并接收发布到这些主题的消息。同样,客户端可以发布消息到某个主题,供其他订阅该主题的客户端接收。
主题(Topic):主题是消息的逻辑路径,用于将消息分类。客户端通过主题来订阅或发布消息。
消息(Message):消息是发布到主题的数据,通常是一个字节串。
代理(Broker):MQTT代理是一个中间服务器,负责接收来自客户端的消息,并将这些消息分发给订阅了相应主题的客户端。常见的MQTT代理包括Mosquitto、HiveMQ等。
QoS(QualityofService):QoS表示消息的服务质量级别,有三个级别:
0:最多一次,消息可能丢失。
1:至少一次,消息可能会重复。
2:只有一次,消息不会丢失也不会重复。
1.2MQTT协议的优势
轻量级:MQTT协议的开销非常低,适合资源受限的设备。
低带宽:通过压缩消息和减少传输数据量,有效利用网络资源。
高可靠性:通过QoS机制确保消息的可靠传输。
简单易用:协议简单,易于实现和理解。
扩展性强:支持多种网络环境和设备,便于系统扩展。
2.MQTT协议的工作原理
2.1客户端-代理模型
MQTT协议采用客户端-代理模型,客户端与代理之间通过TCP/IP协议进行通信。客户端可以是传感器、执行器、手机应用等,代理则负责消息的路由和管理。
2.2连接过程
连接请求(CONNECT):客户端向代理发送连接请求,包含客户端ID、用户名、密码等信息。
连接确认(CONNACK):代理接收到连接请求后,返回连接确认消息,告知客户端连接是否成功。
订阅请求(SUBSCRIBE):客户端向代理发送订阅请求,指定要订阅的主题和QoS级别。
订阅确认(SUBACK):代理返回订阅确认消息,告知客户端订阅是否成功。
发布消息(PUBLISH):客户端向代理发布消息,包含主题和消息内容。
接收消息(PUBLISH):订阅了相应主题的客户端从代理接收消息。
取消订阅(UNSUBSCRIBE):客户端向代理发送取消订阅请求,指定要取消订阅的主题。
取消订阅确认(UNSUBACK):代理返回取消订阅确认消息,告知客户端取消订阅是否成功。
断开连接(DISCONNECT):客户端向代理发送断开连接请求,代理确认后断开连接。
2.3消息传递过程
发布消息:客户端A向代理发布一条消息到主题sensor/temp。
路由消息:代理将消息路由到所有订阅了sensor/temp主题的客户端。
接收消息:客户端B和客户端C订阅了sensor/temp主题,因此它们会接收到该消息。
3.安装MQTT库
要使用MQTT协议,首先需要在ArduinoIDE中安装MQTT库。本文使用PubSubClient库,这是一个广泛使用的MQTT客户端库。
3.1安装PubSubClient库
打开ArduinoIDE。
进入Sketch-IncludeLibrary-ManageLibraries...。
在搜索框中输入PubSubClient,找到库后点击安装。
3.2安装WiFi库
由于ArduinoMKRWiFi1010具有内置的WiFi功能,还需要安装WiFiNINA库来管理WiFi连接。
进入Sketch-IncludeLibrary-ManageLibraries...。
在搜索框中输入WiFiNINA,找到库后点击安装。
4.连接WiFi网络
在使用MQTT协议之前,需要先连接到WiFi网络。以下是一个简单的示例代码,演示如何连接到WiFi网络。
#includeWiFiNINA.h
//WiFi网络凭据
charssid[]=yourSSID;//你的WiFiSSID
charpass[]=yourPassword;//你的WiFi密码
//代理服务器地址
charmqttServer[]=;
intmqttPort=1883;
charclientId[]=ArduinoMKR;
//初始化WiFi客户端
WiFiClientwifiCl