本文介绍如何使用阿里云官网售卖的云模组HAAS210(WiFi+BLE Combo模组)接入阿里云物联网平台。
背景信息
- 云模组集成了阿里云物联网平台的Link SDK,实现了AT指令和物联网平台能力的无缝对接。云模组通过提供更精简的指令和更丰富的功能,改善了用户通过模组接入物联网平台的体验。主要支持以下功能:
- 蓝牙和设备热点配网
- 免计算username/passwd直接连云
- 订阅平台常用Topic免订阅
- 简化物模型交互
- 支持阿里云物联网平台通过AT指令对MCU固件升级
- 无法直接连网的设备,外接WiFi模组后,通过AT指令控制WiFi模组,设备即可实现连网。不同模组有不同的AT指令,用户的对接体验也参差不齐。HAAS210云模组在接入体验方面针对阿里云物联网平台做了特定的优化。本文以使用该模组为例,介绍如何将设备接入物联网平台,并实现消息上报和设备管理等功能。
开发准备
- 购买模组
购买模组以及获取相应资料请填写阿里云IoT解决方案咨询。
- 连接模组
请参考下图进行模组连线,波特率为115200。
开发流程
-
WiFi配网
本模组支持2种配网能力,设备热点配网和蓝牙辅助配网。以蓝牙辅助配网为例,步骤如下:
- 在安卓客户端输入路由器的ssid和passwd,然后单击开始蓝牙配网。
- 在模组的AT命令窗口输入如下指令。
AT+IBLECONFIGSTART=1 OK
配网成功后,AT口将返回如下日志,提示已经成功接入WiFi路由器。OK +INETSTAT:4,192.**.**.104,B4:**:**:**:8E:71
-
接入物联网平台
该模组支持以阿里云物联网的设备证书接入IoT平台,用户无需关心设备证书与MQTT协议的username、password、clientId等字段的对应关系,方便用户快速连云。
- 设备证书设置
输入:
AT+IDMAUTH=<product_key>, <device_name>, <device_secret>,<product_secret>
。参考示例:AT+IDMAUTH=gb***u1U,module_***_dev,b2a5*************************059,a1****k OK
- 设备接入物联网平台
输入:
AT+IDMCONN=<host>,<port>
,其中host字段为MQTT的终端节点。MQTT的终端节点详细信息,请参见查看实例终端节点。参考示例:
IDMSTATE返回1时,表示MQTT已成功连接。AT+IDMCONN=iot-06****ql.mqtt.iothub.aliyuncs.com,1883 +IDMSTATE:1 OK
说明- 上述方式适用于使用一机一密方式(预先在物联网平台录入设备名称并生成设备密钥)接入物联网平台。
- 用户如果需要使用免预注册的一型一密方式,即设备首次连接物联网平台时,平台自动创建设备身份并下发密钥给设备。具体请参见下文步骤6“免预注册的一型一密”。
- 用户如果需要预注册的一型一密方式,即预先在物联网平台创建设备身份,在设备首次连接物联网平台时下发设备密钥给设备。具体请参见下文步骤7“预注册的一型一密”。
- 设备证书设置
-
MQTT消息收发
- 发消息
输入
AT+IMQTTPUB=<topic>,<qos>,<message>
。参考上行:上报helloworldAT+IMQTTPUB=/gb8*****1U/eng_**_005/user/update,0,helloworld +IMQTTPUB:0 OK
- 收消息
云模组具备了Link SDK的免订阅能力(在不发送subscribe报文的情况下,平台为模组自动订阅,包括OTA、设备影子、物模型等,详细信息,请参见自动订阅Topic说明)。
收到消息的格式:+IMQTTRCVPUB:<topic>,<msg_len>,<message>
参考下行:控制台设置设备影子后,设备收到的下行报文订阅, 取消订阅等基础MQTT指令请联系与您对接的阿里云工程师,获取AT指令手册。+IMQTTRCVPUB:/shadow/get/gb80***u1U/eng_**_005,258,{"method":"control","payload":{*****},"timestamp":1650447219,"version":1}
- 发消息
-
使用物模型
物模型的协议基础是Alink协议。该协议是针对物联网开发领域设计的一种数据交换规范,数据格式为JSON,用于设备端和物联网平台的双向通信。云模组集成了Link SDK,为用户屏蔽了Alink协议实现的细节,节省了封装、解析Alink协议报文的时间。
Alink协议详细信息,请参见Alink协议。
消息类型 消息格式 示例 属性上报 AT+IDMPP=<message>
参考交互: AT+IDMPP={"LightStatus":1} +IDMPP:8 OK
属性下发 +IDMPS:<msg_id>,<msg_len>,<message>
参考输出: +IDMPS:238420054,17,{"LightStatus":1} OK
事件上报 AT+IDMEP=<event_id>,<event_payload>
参考交互: AT+IDMEP=OnSync,{"SyncTime":1} +IDMEP:15 OK
更多的物模型的指令,例如同步服务请求、同步服务响应、异步服务请求、异步服务响应等,请联系与您对接的阿里云工程师,获取AT指令手册。
-
使用OTA命令
云模组集成了LinkSDK中的固件升级能力,用户可以在控制台部署OTA任务,为连接在云模组上的MCU下推升级固件。交互步骤如下
- 控制台部署OTA任务后,模组收到了OTA消息,告知MCU
+IOTASTATE:<state>,<version>,<image_size>
。参考交互:+IOTASTATE:0,2.0.1,521540
- MCU收到上述消息后,通知模组是否接受OTA升级
AT+IOTASTART=<enable>
,模组响应OK。参考交互:AT+IOTASTART=1 OK +IOTASTATE:1
如果接受,模组开始下载固件。
- 模组完成下载固件,通知MCU开始收取
+IOTASTATE:<state>,<version>,<image_size>
。参考交互:+IOTASTATE:2 //模组在校验固件 +IOTASTATE:5 //模组已经收完固件,通知MCU去分片读取
- MCU查询固件的分片详情
AT+IOTASHO
,模组响应+IOTASHO:<total_frame>, <frame_size>,<version>, <image_size>,<digest_method>, <expect_digest>
。参考交互:AT+IOTASHO +IOTASHO:2038,256,2.0.1,521540,0,fe52d2203d3406160f440a55fa7e6073
- MCU获取其中某个分片
AT+IOTASTX=<frame>
,模组响应:+IOTASTX:<frame>,<data_size>, <crc16>,<data>
。参考交互:
MCU要持续请求(frame数值持续增加,直到total_frame-1),并将取到的固件要存到MCU的Flash里面。AT+IOTASTX=0 +IOTASTX:0,256,27069,**********************
- 升级结束,上报新的固件版本号,确认固件版本号与步骤i中的下发的version字段一致。
参考交互:
AT+IOTAVER=2.0.1 //2.0.1表示新的固件版本号. 控制台收到后进行校验, 如果一致则更新任务状态
- 设备如果要主动查询云端是否有OTA任务,可采用AT+IOTAQUERY命令向云端查询。
参考交互:
AT+IOTAQUERY +IOTASTATE:0,2.0.1,521540
- 控制台部署OTA任务后,模组收到了OTA消息,告知MCU
- 免预注册的一型一密
设备首次连接物联网平台时,平台自动创建设备身份并下发密钥给设备,目前仅上海region支持。
- 配置一型一密。
AT+IMQTTPARA=AUTHMODE,2
- 设置设备密钥,deviceSecret这一项为空,productSecret这一项不为空。
AT+IDMAUTH=<product_key>, <device_name>, <device_secret>, <product_secret>
- 设置完成后,请接着执行上文中步骤2接入物联网平台。
- 配置一型一密。
- 预注册的一型一密
预先在物联网平台创建设备,设备首次连接物联网平台时,平台下发密钥给设备,各个region均支持。
- 配置一型一密。
AT+IMQTTPARA=AUTHMODE,1
- 设置设备密钥,deviceSecret这一项为空,productSecret这一项不为空。
AT+IDMAUTH=<product_key>, <device_name>, <device_secret>,<product_secret>
- 设置完成后,请接着执行上文中步骤2接入物联网平台。
- 配置一型一密。
参考资料
资料 | 获取途径 |
---|---|
HAAS210模组规格手册 | 请根据需要,联系与您对接的阿里云工程师获取。 |
云模组HAAS210快速入门 | |
配网APP和相应源码 | |
AT命令手册 |