查看: 1714|回复: 0

[应用笔记] Lierda NT35E&NT26E MQTT应用指导

[复制链接]

77

主题

118

帖子

1403

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1403
发表于 2023-2-9 14:49:02 | 显示全部楼层 |阅读模式
  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
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表