今天来给大家分享一下720开发板通过AT命令连接阿里云物联网平台的方法,阿里云物联网平台支持很多种连接协议,后台非常强大,可以清楚、直观的了解当前设备的连接状况。
本文主要介绍的是连接、发送部分,阿里云物联网平台还可以实现规则引擎、边缘计算、设备影子等非常强大的功能,感兴趣的小伙伴自行研究下。
首先,我们先来了解一下阿里云物联网平台,这里是官方介绍链接:
https://www.aliyun.com/product/iot-deviceconnect
这是关于设备端开发协议的官方文档:
https://help.aliyun.com/document_detail/30540.html
本教程对应阿里云中“MQTT客户端域名直连”部分,主要是讲解连接域名、设备ID、用户名、密码的计算步骤
一、阿里云平台设备创建
1、登陆阿里云,进入控制台->物联网平台
2、进入设备管理-产品
3、创建产品
关于基础版和高级版可以参考阿里云文档,这里以创建基础版为例
4、添加设备
此处DeviceName建议填写IMEI号,也可填写其他可以保证唯一的号码(比如SN、MAC等)
5、得到设备证书(三元组数据)
这个设备证书里面有三个参数,稍后计算请求信息会用到,非常重要
6、配置Topic类
回到刚刚创建的产品,在消息和通信选项卡下,创建Topic类
Topic类分为发布、订阅、发布和订阅,发布是指可以向平台发送消息,订阅是指可以从平台接收消息,发布和订阅是指发送消息到平台并从平台接收消息(设备发布的消息平台会返回相同信息)
阿里云Topic规则如下:
Topic格式必须以“/”进行分层,区分每个类目。其中前两个类目已经规定好,第一个代表产品标识productKey,第二个{deviceName}通配deviceName。简单来说,Topic类:/pk/{deviceName}/update是具体Topic: /pkTopic格式必须以“/”进行分层,区分每个类目。其中前两个类目已经规定好,第一个代表产品标识productKey,第二个{deviceName}通配deviceName。简单来说,Topic类:/pk/{deviceName}/update是具体Topic: /pk/mydevice/update 或者 /pk/yourdevice/update 的集合
这里我们先添加一个发布和订阅的test Topic类
二、计算请求信息
本教程示范步骤采用的是“MQTT客户端域名直连”方法,如采用“使用HTTPS认证再连接模式”需要先调用HTTP请求获取设备iotId和密钥iotToken,其余步骤基本相同
这里假设我的设备三元组信息如下:
ProductKey: a1hahpgAs3s
DeviceName: test
DeviceSecret: qIpssQEfjxuGoiDHCiQ6PZb1vUJ7SsAM
1、请求域名
{YourProductKey}.iot-as-mqtt.{YourRegionId}.aliyuncs.com:1883
{YourProductKey}请替换为您的产品key。{YourRegionId}请参考地域和可用区替换为您的Region ID。
目前阿里云物联网平台在国内只有华东2(上海)节点是开放的,对应的Region ID 为 cn-shanghai
因此我的请求域名为:a1hahpgAs3s.iot-as-mqtt.cn-shanghai.aliyuncs.com
2、请求端口
阿里云物联网平台请求端口都为1883,与地域、产品、设备无关
3、请求ID
我的请求ID:test|securemode=3,signmethod=hmacsha1,timestamp=1544257319|
其中test为DeviceName;securemode可选值有2 (TLS直连模式)和3(TCP直连模式)我们这里采用TCP直连模式因此选3;signmethod是加密方法,我们这里采用哈希SHA1加密,官方支持的还有hmacmd5、hmacsha256;timestamp是时间戳,代表当前时间
4、请求username用户名
我的请求用户名:test&a1hahpgAs3s
其中test为DeviceName;a1hahpgAs3s为我的产品ProductKey
5、请求password密码
我的请求密码:c65de7069643b59fc972e8884fede9aaffeada38
请求密码计算方法如下:
(1)拼接签名原文
此处{{}}中表示对应变量
clientId{{DeviceName}}deviceName{{DeviceName}}productKey{{ProductKey}}timestamp{{time}}
例如,我的签名原文为:clientIdtestdeviceNametestproductKeya1hahpgAs3stimestamp1544257319
(2)计算签名
签名密钥为DeviceSecret
根据哈希SHA1方法计算得出签名值为c65de7069643b59fc972e8884fede9aaffeada38
签名计算部分比较复杂,因此我用JS开发了一个签名计算工具,地址:
http://lhb.ink/mqtt
工具采用JS计算签名值,所有信息在本地计算不会经过网络,可放心使用
三、合宙720连接MQTT
连接之前,建议将固件版本升级为最新版本
1、连接MQTT
AT+CGREG?
查询注册状态
AT+CGATT?
查看当前GPRS附着状态
AT+CSTT="3GWAP"
设置APN 我这里用的是联通卡,如果是电信卡换成AT+CSTT="CMNET"
AT+CIICR
激活移动场景
AT+CIFSR
查询当前IP
AT+MCONFIG="test|securemode=3,signmethod=hmacsha1,timestamp=1544257319|","test&a1hahpgAs3s","c65de7069643b59fc972e8884fede9aaffeada38"
设置当前连接参数,包括请求客户端ID、用户名、密码,此处请根据实际设备参数填写
AT+MIPSTART="a1hahpgAs3s.iot-as-mqtt.cn-shanghai.aliyuncs.com","1883"
设置当前连接参数,包括请求地址、端口,此处请根据实际设备参数填写
AT+MCONNECT=1,600
建立连接会话,此处600为MQTT保活时间
设备端在保活时间间隔内,至少需要发送一次报文,包括ping请求。
如果服务端在保活时间内无法收到任何报文,物联网平台会断开连接,设备端需要进行重连。
设置保活时间的取值,取值范围为30至1200秒,建议取值300秒以上。
AT+MSUB="/a1hahpgAs3s/test/test",0
订阅消息,第一个test为设备DeviceName,第二个test为消息路径(在一、6中创建的,可在物联网平台配置)
AT+MPUB="/a1hahpgAs3s/test/test",0,0,"helloworld"
发布消息helloworld
到test路径中
AT+MDISCONNECT
关闭MQTT连接
此部分前后关联较强,附我测试的AT命令交互:
16:39:24.390]发→◇AT+CGREG?
[16:39:24.391]收←◆AT+CGREG?
+CGREG: 2,1,”2317″,”0a541706″
OK
[16:39:25.590]发→◇AT+CGATT?
[16:39:25.592]收←◆AT+CGATT?
+CGATT: 1
OK
[16:39:27.048]发→◇AT+CSTT=”3GWAP”
[16:39:27.050]收←◆AT+CSTT=”3GWAP”
OK
[16:39:27.844]发→◇AT+CIICR
[16:39:27.847]收←◆AT+CIICR
[16:39:28.137]收←◆
+CGEV: ME PDN ACT 7
OK
[16:39:29.510]发→◇AT+CIFSR
[16:39:29.513]收←◆
AT+CIFSR
10.69.48.127
[16:39:48.025]收←◆+UPGRADEIND: 0
[16:39:54.611]收←◆+UPGRADEIND: -1002
[16:39:56.309]收←◆
+CGEV: NW MODIFY 5,2
[16:39:56.339]收←◆
+CGEV: NW MODIFY 7,2
[16:41:35.502]发→◇AT+MCONFIG=”test|securemode=3,signmethod=hmacsha1,timestamp=1544257319|”,”test&a1hahpgAs3s”,”c65de7069643b59fc972e8884fede9aaffeada38″
[16:41:35.505]收←◆
AT+MCONFIG=”test|securemode=3,signmethod=hmacsha1,timestamp=1544257319|”,”test&a1hahpgAs3s”,”c65de7069643b59fc972e8884fede9aaffeada38″
OK
[16:41:36.960]发→◇AT+MIPSTART=”a1hahpgAs3s.iot-as-mqtt.cn-shanghai.aliyuncs.com”,”1883″
[16:41:36.962]收←◆AT+MIPSTART=”a1hahpgAs3s.iot-as-mqtt.cn-shanghai.aliyuncs.com”,”1883″
OK
[16:41:37.271]收←◆
CONNECT OK
[16:41:38.519]发→◇AT+MCONNECT=1,600
[16:41:38.522]收←◆AT+MCONNECT=1,600
OK
[16:41:38.720]收←◆
CONNACK OK
[16:41:58.578]发→◇AT+MSUB=”/a1hahpgAs3s/test/test”,0
[16:41:58.582]收←◆AT+MSUB=”/a1hahpgAs3s/test/test”,0
OK
[16:41:58.791]收←◆
SUBACK
[16:42:06.912]发→◇AT+MPUB=”/a1hahpgAs3s/test/test”,0,0,”helloworld”
[16:42:06.915]收←◆AT+MPUB=”/a1hahpgAs3s/test/test”,0,0,”helloworld”
OK
[16:42:07.073]收←◆
+MSUB: “/a1hahpgAs3s/test/test”,10 byte,helloworld
[16:42:17.258]发→◇AT+MDISCONNECT
[16:42:17.261]收←◆
AT+MDISCONNECT
OK
[16:42:19.824]收←◆
CLOSED
注:实际请求请使用根据设备计算的参数进行连接
2、在阿里云后台查看设备连接情况
激活设备:首次连接连接后设备由未激活变为激活状态
3、查看设备日志
内容较长难免出现纰漏,如有错误欢迎批评指正