|
1、引言
1.1、MQTT协议简介
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和致动器的通信协议。
MQTT协议是为大量计算能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议,它具有以下主要的几项特性:
1)使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合。
2)对负载内容屏蔽的消息传输。
3)使用TCP/IP提供网络连接。
4)有三种消息发布服务质量:
至多一次:消息发布完全依赖底层TCP/IP网络。会发生消息丢失或重复。这一级别可用于如下情况——环境传感器数据传输,这种情况下丢失一次读数记录无所谓,因为不久后还会有第二次发送。
至少一次:确保消息到达,但消息重复可能会发生。
只有一次:确保消息到达一次。这一级别可用于如下情况——在计费系统中,消息重复或丢失会导致不正确的结果。
5)小型传输,开销很小,固定长度的头部是2字节,协议交换最小化,以降低网络流量。
1.2、文档目的
本文描述了如何使用MQTT,采用CAT1模组实现用户设备与云的连接,以及如何实现云与设备的交互操作。并以标准MQTT、OneNET、阿里物联网云平台的接入和通信为例,进行了详细介绍,同时描述了详细的AT交互流程,可以帮助客户的开发人员尽快完成相关的应用开发。
1.3、对接总体流程
CAT1与云平台对接包括两个方面的准备工作:
1)云平台侧-----用户注册和产品创建。
2)CAT1模组侧------创建客户端和客户端与平台的交互操作。
图1.1 server云对接流程
备注:为方便阅读,本文部分AT示例中省略了回车换行,用户使用时需以模组AT指令集或实际返回值为准。
2、标准MQTT对接流程
MQTT协议提供了一种使用发布/订阅模型执行消息传递的轻量级方法。这使得它适用于物联网的信息传递,例如低功耗传感器或移动设备,如电话、嵌入式计算机或微控制器。而标准MQTT对接不需要填充阿里、onenet等云平台的三元组(deviceName、password等)信息,使用简单。这里使用标准MQTT通用测试软件MQTT.fx,给出标准MQTT操作流程。
2.1、MQTT.fx客户端操作说明
2.1.1、mosquitto介绍
mosquitto是一款实现了消息推送协议MQTT v3.1的开源消息代理软件,提供轻量级的、支持可发布/可订阅的的消息推送模式,使设备对设备之间的短消息通信变得简单。
2.1.2、MQTT.fx使用说明
步骤1:配置MQTT.fx,设置服务器地址为test.mosquitto.org,这是一个公用MQTT测试服务器,端口为1883。设置后点击"Connect",连接成功后,右侧指示灯变绿。
图2.1 配置流程
注意:设置界面中Client ID要注意唯一性,不可以与已经设置过的设备重名,否则无法连接
图2.2 连接成功
步骤2:在"subscribe"下设置订阅主题。
图2.3 订阅主题
2.2、模组侧操作说明
2.2.1、与mosquitto服务器交互介绍
MQTT的AT命令是根据MQTT的功能划分来设计的,包括MQTT config,MQTT open,MQTT close,MQTT onnect,MQTT disconnect,MQTT sub,MQTT unsub,MQTT pub,MQTT status,MQTT receive,共10个。详细AT指令介绍用户可参考《Lierda NT35E&NT26E-CN AT命令手册》。
使用MQTT的AT命令的流程如下:
步骤1:使用MQTT open和MQTT connect创建MQTT连接。
步骤2:使用MQTT sub订阅topic。
步骤3:使用MQTT pub发送数据。
步骤4:当MQTT server下发数据的时候,MQTT receive命令会自动接收,并以"+ECMTRECV:XXX"格式,打印出来。
步骤5:使用MQTT disconnect关闭MQTT连接。
2.2.2、与MQTT.fx客户端交互操作
步骤1:建立TCP连接,连接客户端到MQTT服务器。
步骤2:发起订阅,该命令发送MQTT订阅数据包。订阅的主题即上文创建的主题。
步骤3:向MQTT平台发送数据。发送成功即可在MQTT.fx客户端软件上查看数据,如图2.4所示。
图2.4 查看数据
因为模组同样订阅了/lierda/test主题,所以在PUB数据的时候能够收到自己发送的数据。
步骤4:服务器下发数据。在MQTT.fx中,点击"ublish"选择订阅的Topic,发送数据。模组即可收到对应发布的数据。
图2.5 发送数据
步骤5:完成所有通信后,即可断开连接。
3、OneNet平台对接流程
3.1、OneNet平台侧操作说明
3.1.1、用户注册
步骤1:访问https://open.iot.10086.cn。点击“注册”,进入注册页面。
步骤2:填写注册信息,完成注册。
图3.1 用户注册
3.1.2、产品创建
图3.2 登陆OneNET
图3.3 选择MQTT物联网套件
“控制台首页”→“多协议接入”→“添加产品”。
图3.4 进入多协议接入界面
图3.5 添加产品
3.1.3、添加设备
产品添加完成后添加设备,进入“设备列表”→“添加设备”,填写信息完成设备添加。
图3.6 设备列表
图3.7 添加设备
设备添加成功后,在“设备列表”中,可以看到设备,此时设备不在线。
图3.8 添加设备成功
产品概况中能够看到“产品ID”。
图3.9 产品ID
在“设备列表”中能够获取到对应的“设备ID”是884062770,“鉴权信息”是NT35E21444。
图3.10 设备ID&鉴权信息
“产品ID”,“设备ID”和“鉴权信息”是创建MQTT客户端必须填充的3个信息。
图3.11 设备信息界面
3.2、模组侧操作说明
3.2.1、与OneNet平台交互介绍
MQTT的AT命令是根据MQTT的功能划分来设计的,包括MQTT create、MQTT sub、MQTT unsub、MQTT pub、MQTT delete和MQTT receive,共6个AT命令:
MQTT create:创建socket连接和MQTT连接,使用这条AT命令后,在云平台上能看到设备上线。目前建议只创建一个MQTT client,因为单个MQTT client测试的比较充分,多个MQTT client测试的不够充分。
MQTT sub:订阅topic。
MQTT unsub:取消订阅的topic。
MQTT pub:发送数据给云平台。
MQTT delete:删除MQTT,包括MQTT连接和socket连接。
MQTT receive:接收MQTT server下发的数据。
使用MQTT的AT命令的流程如下:
步骤1:使用MQTT create创建MQTT连接,MQTT的参数在MQTT create的时候已经配置。
步骤2:使用MQTT sub订阅topic。
步骤3:使用MQTT pub发送数据。
步骤4:当MQTT server下发数据的时候,MQTT receive命令会自动接收,并以+LMQTTURC: RECV,<tcpconnectID>,<msgID>[,<topic>,<payload>]的格式,打印出来。
步骤5:使用MQTT delete删除MQTT连接。
图3.12 与OneNet交互图
3.2.2、与OneNet平台交互操作
1:设备正式连接前需要现配置平台位OneNet
2:设备上线
发送如上命令后,打开onenet的“设备列表”,可以看到对应的设备状态变成绿色,设备显示“在线”。
“产品ID”、“设备ID”、“鉴权信息”是创建MQTT客户端必须的3种信息。
注意:<ClintID>对应平台的“设备ID”,<Username>对应平台的“产品ID”,<assword>对应平台的“鉴权信息”。上述示例中280752是“产品ID”,551991549是“设备ID”,ecshpower是“鉴权信息”。
图3.13 设备在线状态
设备发送数
发送如上命令后,打开OneNET上“设备列表”—“数据流”进入如下界面。可以看到模组发送的数据值。
图3.14 设备在线状态
onenet下发数据
“设备列表”→“数据流”→“下发命令”。
图3.15 数据流
点击“下发命令”进入相应界面,选择“字符串”或“16进制”,输入命令内容后点击“发送”,此时模组会推送对应的数据。
注意:模组端串口显示的时候,因无法区分平台下发是字符串还是16进制,所以对MQTT收到的命令payload都是按照字符串打印出来。因此当用户下发16进制的消息时,串口工具可能显示乱码,但不影响MCU解析。例:16进制发送:31323334,模组收到消息:1234
图3.16 下发数据
发送完毕后,在设备的串口中,可以看到+LMQTTURC: RECV信息打印出来,如下图3.17所示。
图3.17 平台下发UART推送数据
4、阿里云物联网平台对接流程
4.1、阿里云物联网平台侧操作说明
4.1.1、用户注册
步骤1:访问https://help.aliyun.com/product/30520.html?spm=a2c4g.11174283.6.540.32021668tk7sOP。点击“注册”,进入注册页面。
步骤2:填写注册信息,完成注册。
步骤3:完成实名认证,开通物联网平台。
图4.1 用户注册
4.1.2、产品创建&设备创建
“设备管理”→“产品”→“新建产品”。
图4.2 创建产品
数据格式可以选择ICA或者透传格式,不影响数据通信。产品创建后,出现如下界面,表示产品已经创建成功。
图4.3 产品创建成功
点击“管理设备”→“添加设备”。
图4.4 设备管理界面
图4.5 添加设备
点击“添加设备”,填写DeviceName,添加成功后,会出现设备证书。设备证书中的ProductKey、DeviceName、DeviceSecret、ProductName、URL是创建MQTT client必须填充的信息。
设备创建成功后,可以看到设备还没有被激活。
图4.6 设备创建成功
图4.7 URL信息
用户每定义一类产品都会自动生成对应的Topic列表,用户也可以“自定义Topic”便于测试。
注意:系统订阅/发布的主题在“产品信息”中,每个设备的三元组信息在“设备信息”中,URL,Port在“MQTT连接参数”中
图4.8 系统默认创建Topic列表
图4.9 用户自定义Topic
4.2、模组侧操作说明
4.2.1、与阿里物联网平台交互介绍
MQTT的AT命令是根据MQTT的功能划分来设计的,包括MQTT create,MQTT sub,MQTT unsub,MQTT pub,MQTT delete和MQTT receive,共6个AT命令:
MQTT create的作用是创建socket和MQTT连接,发送这条AT命令后在云平台上能看到设备上线。由于阿里物联网平台的MQTT client创建时使用的clientID、username和password字符比较长,所以create时配置的发送和接受的buffer需要尽量大一些,最好设置为512或以上。目前建议只创建一个MQTT client,多个MQTT client测试还不够充分。
MQTT sub:订阅topic。
MQTT unsub:取消订阅的topic。
MQTT pub:发送数据给云平台。
MQTT delete:删除MQTT,包括MQTT连接和socket连接。
MQTT receive:接收MQTT server下发的数据。
使用MQTT的AT命令的流程如下:
步骤1:使用MQTT create创建MQTT连接,MQTT的参数在MQTT create的时候已经配置。
步骤2:使用MQTT sub订阅topic。
步骤3:使用MQTT pub发送数据。
步骤4:当MQTT server下发数据的时候,MQTT receive命令会自动接收,并以"+MQTTRECV: id,tag,topic,data"的格式,打印出来。
步骤5:使用MQTT delete删除MQTT连接。
图4.10 与阿里物联网平台交互图
4.2.2、与阿里物联网平台交互操作
设备正式连接前需要现配置平台为ALI模式
4.2.2.1、连接方式1:一机一密
配置"DeviceName"、"roductKey"、"DeviceSecret"、URL、Port
模组/设备上线
发送如下命令,打开阿里物联网平台的“设备管理”,可以看到对应的设备状态变成绿色,设备显示“在线”。
“产品名称”、"DeviceName"、"roductKey"、"DeviceSecret"、URL、Port是创建阿里物联网MQTT客户端必须填充的信息。上述参数对应平台信息见3.1.2节产品创建图示,模组指令参考《Lierda NT35E&NT26E-CN AT命令手册》。
图4.11 设备上线
设备发送数据
发送上述指令之后,在页面中点击“设备详情”→“日志服务”→“前往查看”,可以看到,已经收到client上报的数据。
为了考虑兼容性,LMQTTPUB指令中长度信息≥实际发送的数据即可。
图4.12 日志服务界面
点击"MessageID"查看上报数据详细情况,把内容显示设置为"Text(UTF-8)",可以看到收到的数据就是发送过来的"update"。
图4.13 上报消息详细内容
1)阿里物联网平台下发数据
平台下发数据,对应模组端是“订阅消息”。测试阿里物联网平台下发数据有2种方式,这里使用设备端直接下发方式,平台定义服务/属性方式用户自行按照阿里云协议定义相应接口。
首先用户参考图4.9定义Topic,然后模组端发送如下指令订阅该消息。
订阅成功后平台下发的数据模组就可以接受了,在“设备”→“查看”→“Topic列表”→“发布消息”中下发数据。
图4.14 平台下发消息
图4.15 填充待发送数据
图4.16 模组收到对应的数据
4.2.2.2、连接方式2:clientID、username、passwd
通过刚刚的连接方式,已经实现了模组的数据通信,但流程相对繁琐。这里使用“设备”→“查看”→“MQTT参数”统一复制,简化用户的操作步骤进行通信。
图4.17 MQTT连接参数
如图4.17,打开阿里云设备信息界面,点击“MQTT连接参数”查看待填充的参数。
用户不需要填充对应的三元组,在LMQTTOPEN中填充URL、端口,然后在LMQTTCONN中填充clientId、username、passwd,其他与上述连接方式相同,简化AT指令操作流程。
4.2.2.3、一型一密钥(预注册)
平台连接参数获取
所需参数如下图所示
至此我们获得所需的所有参数。
平台连接参数获取
4.2.2.4、一型一密钥(免预注册)
平台参数获取
同一型一密预注册,但无需创建设备,AT指令设备名称处填写任意值
新老版本实例说明:需注意平台如图显示处,如果为cn-shanghai则连接参数倒数第二位,实例id填空,不是则为新版本阿里实例需要填实际平台显示实例id。
4.2.2.5、MQTTS
5、雁飞格物平台对接流程
5.1 IOT平台测操作说明
5.1.1、登录平台
进入https://dmp.cuiot.cn/#/portal选择控制台。
图5.1 控制台
5.1.2、产品创建
图5.2 产品创建
选择Cat.1联网方式,根据需求选择所需的物模型。
5.1.3、编辑物联网模型
打开“产品”→“功能定义”→“编辑物模型”→“添加自定义功能”,按照如下图示自定义test属性后发布物模型。
图5.3 功能定义
图5.4 编辑物模型
图5.5 添加自定义功能
图5.6物模型功能定义
图5.7 发布物模型
图5.8 发布
5.1.4、设备注册
图5.9 设备注册
5.2、一机一密
模组详细登录流程,及参数说明参考雁飞格物文档。https://dmp.cuiot.cn/#/onlineDocument/display?articleId=68&articleTypeId=0
图5.10 登录流程
图5.11 鉴权信息
{"productKey":"cu2deqzucqtfr3Uq","deviceKey":"sFItIS0TMszWsGY","deviceSecret":"81C20096D019BE68A2D39ACD58969785"}
使用AT指令获取设备的ICCID,至此我们获取到一机一密所有所需参数:
"productKey":"cu2deqzucqtfr3Uq"
"deviceKey":"sFItIS0TMszWsGY"
"deviceSecret":"81C20096D019BE68A2D39ACD58969785"
"iccid":" 89860321045717364044"
根据雁飞平台文档格式要求,拼接登录所需三元组信息(注意deviceID为ICCID)。
Operator联通为1,移动为2,电信为3。
拼接MQTTclientId
{deviceId}|{productKey}|{signMethod}|{authType}|{operator};
89860321045717364044|cu2deqzucqtfr3Uq|0|0|3
拼接MQTTUsername
{deviceKey}|{productKey}
sFItIS0TMszWsGY|cu2deqzucqtfr3Uq
拼接MQTTPassword
a.拼接参数
将deviceId,deviceKey,productKey参数值按照平台要求依次进行拼接;
89860321045717364044sFItIS0TMszWsGYcu2deqzucqtfr3Uq
b.加密
使用ClientId中的加密算法标识符对应的算法,使用deviceSecret对拼接参数进行加密;此处使用在线加密工具测试,http://www.esjson.com/hashEncrypt.html
加密原文:89860321045717364044sFItIS0TMszWsGYcu2deqzucqtfr3Uq
加密密钥:81C20096D019BE68A2D39ACD58969785
生成密文:715f2130218df4dc58b1284431744a16dc7bd197cda2b8d99b0bc9c7bb849e2d
图5.12 加密
至此登录所需三元组获取完毕。
Clientid:89860321045717364044|cu2deqzucqtfr3Uq|0|0|3
Username:sFItIS0TMszWsGY|cu2deqzucqtfr3Uq
Password:715f2130218df4dc58b1284431744a16dc7bd197cda2b8d99b0bc9c7bb849e2d
模组登录AT流程示例:
6、附录
6.1、上电检查流程
6.2、标准MQTT(mosquitto代理)流程
6.3、OneNet交互流程
6.4、阿里物联网交互流程
7、相关文档
以下相关文档提供了文档的名称,版本请以最新发布的为准。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|