本文介绍如何使用阿里云官网售卖的云模组HAAS210(WiFi+BLE Combo模组)接入阿里云物联网平台。

背景信息

  • 云模组集成了阿里云物联网平台的Link SDK,实现了AT指令和物联网平台能力的无缝对接。云模组通过提供更精简的指令和更丰富的功能,改善了用户通过模组接入物联网平台的体验。主要支持以下功能:
    • 蓝牙和设备热点配网
    • 免计算username/passwd直接连云
    • 订阅平台常用Topic免订阅
    • 简化物模型交互
    • 支持阿里云物联网平台通过AT指令对MCU固件升级
  • 无法直接连网的设备,外接WiFi模组后,通过AT指令控制WiFi模组,设备即可实现连网。不同模组有不同的AT指令,用户的对接体验也参差不齐。HAAS210云模组在接入体验方面针对阿里云物联网平台做了特定的优化。本文以使用该模组为例,介绍如何将设备接入物联网平台,并实现消息上报和设备管理等功能。云模组上云概述

开发准备

  • 购买模组

    购买模组以及获取相应资料请填写阿里云IoT解决方案咨询

  • 连接模组
    请参考下图进行模组连线,波特率为115200。模组连线

开发流程

  1. WiFi配网

    本模组支持2种配网能力,设备热点配网和蓝牙辅助配网。以蓝牙辅助配网为例,步骤如下:

    1. 在安卓客户端输入路由器的ssid和passwd,然后单击开始蓝牙配网
    2. 在模组的AT命令窗口输入如下指令。
      AT+IBLECONFIGSTART=1
      
      OK
      配网成功后,AT口将返回如下日志,提示已经成功接入WiFi路由器。
      OK
      
      +INETSTAT:4,192.**.**.104,B4:**:**:**:8E:71
  2. 接入物联网平台

    该模组支持以阿里云物联网的设备证书接入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的终端节点详细信息,请参见查看实例终端节点

      参考示例:
      AT+IDMCONN=iot-06****ql.mqtt.iothub.aliyuncs.com,1883
      
      +IDMSTATE:1
      
      OK
      IDMSTATE返回1时,表示MQTT已成功连接。
      说明
      • 上述方式适用于使用一机一密方式(预先在物联网平台录入设备名称并生成设备密钥)接入物联网平台。
      • 用户如果需要使用免预注册的一型一密方式,即设备首次连接物联网平台时,平台自动创建设备身份并下发密钥给设备。具体请参见下文步骤6“免预注册的一型一密”。
      • 用户如果需要预注册的一型一密方式,即预先在物联网平台创建设备身份,在设备首次连接物联网平台时下发设备密钥给设备。具体请参见下文步骤7“预注册的一型一密”。
  3. MQTT消息收发

    • 发消息

      输入AT+IMQTTPUB=<topic>,<qos>,<message>

      参考上行:上报helloworld
      AT+IMQTTPUB=/gb8*****1U/eng_**_005/user/update,0,helloworld
      
      +IMQTTPUB:0
      
      OK
    • 收消息

      云模组具备了Link SDK的免订阅能力(在不发送subscribe报文的情况下,平台为模组自动订阅,包括OTA、设备影子、物模型等,详细信息,请参见自动订阅Topic说明)。

      收到消息的格式:+IMQTTRCVPUB:<topic>,<msg_len>,<message>
      参考下行:控制台设置设备影子后,设备收到的下行报文
      +IMQTTRCVPUB:/shadow/get/gb80***u1U/eng_**_005,258,{"method":"control","payload":{*****},"timestamp":1650447219,"version":1}
      订阅, 取消订阅等基础MQTT指令请联系与您对接的阿里云工程师,获取AT指令手册。
  4. 使用物模型

    物模型的协议基础是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指令手册。

  5. 使用OTA命令

    云模组集成了LinkSDK中的固件升级能力,用户可以在控制台部署OTA任务,为连接在云模组上的MCU下推升级固件。交互步骤如下

    1. 控制台部署OTA任务后,模组收到了OTA消息,告知MCU+IOTASTATE:<state>,<version>,<image_size>
      参考交互:
      +IOTASTATE:0,2.0.1,521540
    2. MCU收到上述消息后,通知模组是否接受OTA升级AT+IOTASTART=<enable>,模组响应OK。
      参考交互:
      AT+IOTASTART=1
      
      OK
      +IOTASTATE:1

      如果接受,模组开始下载固件。

    3. 模组完成下载固件,通知MCU开始收取+IOTASTATE:<state>,<version>,<image_size>
      参考交互:
      +IOTASTATE:2    //模组在校验固件
      +IOTASTATE:5    //模组已经收完固件,通知MCU去分片读取
    4. 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
    5. MCU获取其中某个分片AT+IOTASTX=<frame>,模组响应:+IOTASTX:<frame>,<data_size>, <crc16>,<data>
      参考交互:
      AT+IOTASTX=0
      
      +IOTASTX:0,256,27069,**********************
      MCU要持续请求(frame数值持续增加,直到total_frame-1),并将取到的固件要存到MCU的Flash里面。
    6. 升级结束,上报新的固件版本号,确认固件版本号与步骤i中的下发的version字段一致。

      参考交互:

      AT+IOTAVER=2.0.1   //2.0.1表示新的固件版本号. 控制台收到后进行校验, 如果一致则更新任务状态
    7. 设备如果要主动查询云端是否有OTA任务,可采用AT+IOTAQUERY命令向云端查询。

    参考交互:

    AT+IOTAQUERY
    
    +IOTASTATE:0,2.0.1,521540
  6. 免预注册的一型一密

    设备首次连接物联网平台时,平台自动创建设备身份并下发密钥给设备,目前仅上海region支持。

    1. 配置一型一密。
      AT+IMQTTPARA=AUTHMODE,2
    2. 设置设备密钥,deviceSecret这一项为空,productSecret这一项不为空。
      AT+IDMAUTH=<product_key>, <device_name>, <device_secret>, <product_secret>
    3. 设置完成后,请接着执行上文中步骤2接入物联网平台。
  7. 预注册的一型一密

    预先在物联网平台创建设备,设备首次连接物联网平台时,平台下发密钥给设备,各个region均支持。

    1. 配置一型一密。
      AT+IMQTTPARA=AUTHMODE,1
    2. 设置设备密钥,deviceSecret这一项为空,productSecret这一项不为空。
      AT+IDMAUTH=<product_key>, <device_name>, <device_secret>,<product_secret>
    3. 设置完成后,请接着执行上文中步骤2接入物联网平台。

参考资料

资料 获取途径
HAAS210模组规格手册 请根据需要,联系与您对接的阿里云工程师获取。
云模组HAAS210快速入门
配网APP和相应源码
AT命令手册