前言
MQTT 协议的全称是 Message Queuing Telemetry Transport,翻译为消息队列传输探测,它是 ISO 标准下的一种基于发布 - 订阅模式的消息协议,它是基于 TCP/IP 协议簇的,它是为了改善网络设备硬件的性能和网络的性能来设计的。MQTT 一般多用于 IoT 即物联网上,广泛应用于工业级别的应用场景,比如汽车、制造、石油、天然气等。
一、mqtt
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是 IBM 开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器的通信协议。
MQTT 协议是为大量计算能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议,它具有以下主要的几项特性:
1)使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合。
2)对负载内容屏蔽的消息传输。
3)使用 TCP/IP提供网络连接。
4)有三种消息发布服务质量:
至多一次:消息发布完全依赖底层TCP/IP 网络。会发生消息丢失或重复。
至少一次:确保消息到达,但消息重复可能会发生。
只有一次:确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的
结果。
5)小型传输,开销很小,固定长度的头部是 2 字节,协议交换最小化,以降低网络流量。
二、使用步骤
1.阿里平台添加设备
登录到阿里物联网平台,点击“设备管理”,再点击“产品”,然后点击“创建产品”,开始创建产品
产品创建后,出现如下界面,表示产品已经创建成功 点击“添加设备”,填写DeviceName,添加成功后,会出现设备证书,点击“一键复制”保存好设备
信息。设备证书中的ProductKey,DeviceName和DeviceSecret,以及产品名称,是创建 MQTT
client的必须信息。
设备创建成功后,可以看到设备没有被激活
2.使用AT指令连接阿里平台
使用mqtt的at命令的流程如下:
步骤1:设置阿里设备的认证信息设备鉴权设置
指令 | 上报 |
---|---|
AT+IMQTTAUTH=<ProduceKey>,<DeviceName>,<DeviceSecret> | OK |
可在设备表查看
AT+IMQTTAUTU=a1QThfQoy2A,cxx_mqtt,19b3442cca463e66518d8866595b7859
OK
步骤2:设置 cloud 平台类型为阿里物联网
指令 | 上报 |
---|---|
OK | |
参数 | 数值 |
<mode> | MQTT 连接模式 1 – 阿里云 MQTT 2 – 标准 MQTT |
<tls> | 0 – 不采用 TLS 1 – 采用 TLS |
<recvMode> | 0 – 直接上报 1 – 缓存后主动读取 |
AT+IMQTTMODE=2,0,0
OK
步骤3:设置mqtt相关参数
指令 | 上报 |
---|---|
AT+IMQTTPARA=TIMEOUT ,<value>,CLEAN,<value>,KEEPALIVE,<value>,VERSION,<value> | OK |
参数 | 数值 |
TIMEOUT | MQTT 请求超时时间 单位秒 范围1~3 |
CLEAN | 保活时间 单位秒 范围 60~180 |
VERSION | MQTT 版本 3.1 或者 3.1.1 默认 3.1.1 |
<value> | 参数值 |
AT+IMQTTPARA=TIMEOUT,1,CLEAN,0,KEEPALIVE,60,VERSION,3.1.1
OK
步骤4:使用mqtt open和mqtt connect创建mqtt连接
指令 | 上报 |
---|---|
AT+IMQTTCONN | OK +IMQTTCONN:<STATE> |
AT+IMQTTCONN
OK
+IMQTTCONN:0
步骤5:使用mqtt sub 订阅 topic
指令 | 上报 |
---|---|
AT+IMQTTSUB=<topic>,<qos> | OK+IMQTTSUB:, |
AT+IMQTTSUB=/a1R3d3WsBI0/test1/user/test,0
OK
步骤6:使用mqtt pub 发送数据
指令 | 上报 |
---|---|
AT+IMQTTPUB=<topic>,<qos>,<message>[,<retained>] | OK |
+IMQTTPUB:<packetID>,<status> |
AT+IMQTTPUB= /a1R3d3WsBI0/test1/user/test,1,test message!!
OK
+IMQTTPUB:11,0
+IMQTTRCVPUB:46438,"/a1R3d3WsBI0/test1/user/test",14,"test message!!"
步骤7:当mqtt server下发数据的时候,mqtt receive命令会自动接收,并以”+IMQTTRCVPUB:XXX”的格式,打印出来
上报 |
---|
+IMQTTRCVPUB:<packetid>,<topic>,<messageLen>,<message> |
+IMQTTRCVPUB:13770,"/a1R3d3WsBI0/test1/user/test",14,"test message!!"
步骤8:使用mqtt disconnect删除mqtt连接
指令 | 上报 |
---|---|
AT+IMQTTDISCONN | OK |
+IMQTTCONN: | state |
AT+ IMQTTDISCONN
OK
+IMQTTCONN:-1
---