移远EC600S-CN(4)-MQTT接⼊阿⾥云
MQTT是⼀种基于 发布/订阅 模式的轻量级通信协议。MQTT专门针对 物联⽹设备 开发,是⼀种 低开销、低带宽占⽤的即时通讯协议。该协议构建于 TCP/IP 上,旨在为低带宽和不稳定⽹络环境中的物联⽹设备,提供可靠的⽹络服务。它的设计思想是简单、开放、规范,易于实现,这些特点使其⾮常适合 机器间通信(M2M)、物联⽹(IoT)等场景。因其协议简单、数据流量开销低、时延低、对⽹络条件的容忍度⾼等特点,特别适合于硬件受限的嵌⼊式设备。MQTT 最⼤优点在于,可以以极少的代码和有限的⽹络带宽,为远程设备连接提供实时可靠的消息服务。
HTTP连接并不适合于物联⽹设备通信,原因主要如下:
1. 流量、功耗⼤。HTTP可以看作是单向连接,所以需要设备定时查询状态,导致即使设备空闲还是会产⽣多余的流量开销,同时增⼤
了空闲功耗。
2. 时延⾼。云服务器会限制HTTP接⼊的查询频率,例如OneNET将HTTP的最短刷新间隔限制在3s,以减轻服务器的压⼒。但导致从
⽤户到设备会产⽣数秒的时延,⽤户体验⾮常不好。
上⼀章使⽤HTTP连接OneNET,但不建议产品中这么应⽤,仅作为了解。实际产品肯定要MQTT,体验好太多。
EC600S的MQTT指令⽀持阿⾥云、移动OneNET、华为IoT三种云平台,可实现云服务的快速接⼊,下⾯介绍如何⽤EC600S的AT指令以MQTT⽅式接⼊阿⾥云。
同样也适⽤于 EC200S。(EC200S不⽀持QuecPython,体积⽐EC600S略⼤,但便宜很多)
1. 准备
QCOM_V1.6
ma_MQTT.ini(QCOM的配置导⼊⽂件,包含我调试使⽤到的AT命令)
Quectel_EC200x&EC600S&EG912Y系列_MQTT_应⽤指导_V1.0.pdf
阿⾥云设备管理账号:
以上⼯具和⽂档已上传GitHub:
对MQTT协议及帧构成有兴趣的,可以看下:(⾮必要可不看)
MQTT 3.1.1报⽂帧详解:
⽹络调试助⼿接⼊阿⾥云:
2. MQTT接⼊阿⾥云 - AT操作流程
1. 开机,设置运营商信息,打开PDP场景。
2. 设置MQTT可选参数。例如:客户端标识、接收模式、阿⾥云 设备三元组。
3. 打开客户端,连接客户端到阿⾥云MQTT服务器。
4. 订阅/退订主题,接收/上发物模型数据报⽂。
5. 断开客户端与MQTT服务器的连接,关机。
3. 关键AT命令格式
3.1 AT+QMTCFG 配置MQTT可选参数
主要配置 客户端标识、接收模式、阿⾥云 设备三元组。
(1)配置接收模式:AT+QMTCFG="recv/mode",0,0,1
(2)配置阿⾥云设备三元组:AT+QMTCFG="aliauth",<client_idx>,<product_key>,<device_name>,<device_secret>例:
AT+QMTCFG="aliauth",0,"a1wFylTxYeD","co_0001","7ab0c4b3532b5783df5fdc58a2895d7a"
<client_idx>:MQTT客户端标识符,范围0~5。(跟TCP使⽤的socket_id是差不多的意思)<product_key>:阿⾥云设备三元组的 ProductKey。
<device_name>:阿⾥云设备三元组的 DeviceName。
<device_secret>:阿⾥云设备三元组的 DeviceSecret。
3.2 AT+QMTOPEN 打开MQTT客户端⽹络
(1)查询已经打开的MQTT客户端:AT+QMTOPEN?
(2)设置并打开MQTT客户端:AT+QMTOPEN=<client_idx>,<host_name>,<port>
例:
AT+QMTOPEN=0,"iot-as-mqtt-shanghai.aliyuncs",1883
<client_idx>:MQTT客户端标识符,范围0~5。
<host_name>:MQTT服务器地址,可以是IP地址或者域名。最⼤长度100字节。
<port>:服务器端⼝。范围1~65535。MQTT的端⼝为 1883。
3.3 AT+QMTCONN 连接客户端到MQTT服务器
(1)查询当前有哪些的连接:AT+QMTCONN?
(2)设置客户端连接:AT+QMTCONN=<client_idx>,<clientid>
例:
AT+QMTCONN=0,"clientExample_0"
<client_idx>:MQTT客户端标识符,范围0~5。
<clientid>:客户端标识符。字符串类型。(完全⾃定义)
3.4 AT+QMTSUB 订阅主题
该命令可订阅⼀个或多个主题。
(1)订阅主题:AT+QMTSUB=<client_idx>,<msgid>,<topic1>,<qos1>[,<topic2>,<qos2>...]
例:
AT+QMTSUB=0,1,"/sys/a1wFylTxYeD/co_0001/thing/service/property/set",0
AT+QMTSUB=0,1,"/sys/a1wFylTxYeD/co_0001/thing/event/property/post",0
<client_idx>:MQTT客户端标识符,范围0~5。
<msgid>:数据包标识符。范围1~65535。(完全⾃定义,可以与其他帧有重复,但相邻帧尽量不同,⽅便区分错误返回消息)<topic>:订阅的主题。字符串类型。
<qos>:消息的QoS等级。默认0,各⼤⼚的服务器⼀般也只⽀持0。
阿⾥云下发开关状态、上报温湿度消息,使⽤的是物模型中⾃带的主题。可在 " 产品 " - " Topic类列表 " 中查看。
设备上报:/sys/a1wFylTxYeD/${deviceName}/thing/event/property/post
阿⾥云下发:/sys/a1wFylTxYeD/${deviceName}/thing/service/property/set
3.5 AT+QMTUNS 退订主题
该命令可退订⼀个或多个主题。
(1)退订⼀个或多个主题:AT+QMTUNS=<client_idx>,<msgid>,<topic1>[,<topic2>...]
例:
AT+QMTUNS=0,2,"/sys/a1wFylTxYeD/co_0001/thing/service/property/set"
AT+QMTUNS=0,2,"/sys/a1wFylTxYeD/co_0001/thing/event/property/post"
<client_idx>:MQTT客户端标识符,范围0~5。
<msgid>:数据包标识符。范围1~65535。(完全⾃定义,可以与其他帧有重复,但相邻帧尽量不同,⽅便区分错误返回消息)<topic>:退订的主题。字符串类型。
3.6 AT+QMTPUBEX 发布消息
设备通过该命令发布定长消息到服务器。
发布消息到服务器:AT+QMTPUBEX=<client_idx>,<msgid>,<qos>,<retain>,<topic>,<length>
例:
AT+QMTPUBEX=0,0,0,0,"/sys/a1wFylTxYeD/co_0001/thing/event/property/post",103
报⽂内容:
{"method":"thing.event.property.post","id":"1142523359","params":{"PowerSwitch_1":0},"version":"1.0.0"}
<client_idx>:MQTT客户端标识符,范围0~5。
<msgid>:数据包标识符。范围1~65535。(完全⾃定义,可以与其他帧有重复,但相邻帧尽量不同,⽅便区分错误返回消息)<qos>:消息的QoS等级。默认0,各⼤⼚的服务器⼀般也只⽀持0。
<retain>:消息发送到当前订阅者后,服务器是否保持该消息。0-不保存;1-保存。默认值为0。
<topic>:待发布的主题。
<length>:待发布消息的数据长度。单位字节。
4. MQTT接⼊阿⾥云平台
阿⾥云设备管理账号:
上电后,短按POWKY,待串⼝接收到 RDY后,表⽰模块已经开机。
开源mqtt服务器
4.1 PDP场景配置
(设置运营商信息,与上两章TCP、HTTP连接的前半部分操作⼀样)
RDY
AT
OK
AT+CPIN?
+CPIN: READY
OK
AT+CREG?
+CREG: 0,1
OK
AT+CGREG?
+CGREG: 0,1
OK
AT+CEREG?
+CEREG: 0,1
OK
AT+QICSGP=1
+QICSGP: 1,"CMNET","","",1
OK
AT+QICSGP=1,1,"CMNET","","",1
OK
AT+QIACT=1
OK
AT+QIACT?
+QIACT: 1,1,1,"10.189.73.246"
OK
4.2 设置MQTT可选参数
如:客户端标识、接收模式、阿⾥云 设备三元组。
AT+QMTCFG="recv/mode",0,0,1
OK
AT+QMTCFG="aliauth",0,"a1wFylTxYeD","co_0001","7ab0c4b3532b5783df5fdc58a2895d7a" OK
4.3 打开客户端
连接客户端到阿⾥云MQTT服务器。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。