
# 通过华为认证模组接入
#### 概述
认证模组是指通过预集成[IoT Device SDK Tiny](https://support.huaweicloud.com/sdkreference-iothub/iot_02_9980.html)，并且通过[华为测试认证](https://marketplace.huaweicloud.com/search/internet/)，遵循[华为指定AT命令](https://support.huaweicloud.com/api-iothub/iot_06_v5_1401.html)规范的模组。使用华为认证的模组可以带来以下好处：
- 设备厂商在MCU上无需关心如何连接到华为云IoT（例如，MQTT建链时密钥的加密算法，clientID的组成方式等），只通过调用该模组提供的AT指令对接华为IoT平台，可以节约设备对接工作量和设备调试周期。
- 由于MCU已预集成IoT Device SDK Tiny，无须再集成MQTT协议栈，因此大大节省了MCU资源的消耗。
使用认证模组开发设备的示意图如下所示：
![](https://support.huaweicloud.com/devg-iothub/figure/zh-cn_image_0276877025.png "点击放大")
#### 推荐模组列表
表1预集成华为SDK的认证模组 
| 模组类型      | 厂商   | 具体型号       |
|:---|:---|:---|
| 4G Cat1模组 | 广和通  | L610       |
| 4G Cat1模组 | 中移物联 | ML302      |
| 4G Cat4模组 | 移远   | EC20CEFASG |
| 4G Cat4模组 | 移远   | EC20CEHDLG |
| 4G Cat4模组 | 有方   | N720       |
| NB-IoT模组  | 中移物联 | M5319-A    |
   
![](https://support.huaweicloud.com/devg-iothub/public_sys-resources/note_3.0-zh-cn.png)
- LTE Cat4模组适用于业务数据传输速率为50Mbps\~150Mbps的场景，LTE Cat1模组适用于业务数据传输速率为5 Mbps\~10 Mbps的场景。
- 若上述列表中没有您所需的模组型号，请[提交工单](https://console.huaweicloud.com/ticket/?locale=zh-cn#/ticketindex/createIndex)说明您的业务场景和诉求。
 
表2未集成华为SDK、但通过华为测试的模组 
| 模组类型       | 厂商   | 具体型号       |
|:---|:---|:---|
| NB-IoT模组   | 移远   | BC39       |
| NB-IoT模组   | 移远   | BC95       |
| NB-IoT模组   | 移远   | BC35       |
| NB-IoT模组   | 移远   | BC26       |
| NB-IoT模组   | 移远   | BC28       |
| NB-IoT模组   | 有方   | N27        |
| NB-IoT模组   | 有方   | N25        |
| NB-IoT模组   | 有方   | N21        |
| NB-IoT模组   | 中怡数宽 | TPB41      |
| NB-IoT模组   | 中怡数宽 | TPB23      |
| NB-IoT模组   | 云程科技 | CFB-609    |
| NB-IoT模组   | 利尔达  | NB86-G     |
| 4G Cat4模组  | 域格   | CLM920_NC5 |
| 4G Cat4模组  | 域格   | CLM920_NC3 |
| 4G Cat4模组  | 移远   | EC20       |
| 4G Cat1模组  | 有方   | N58        |
| 4G Cat1模组  | 移远   | EC200S     |
| 2G/3G模组    | 移远   | M25        |
| Zigbee智能模组 | 顺舟   | SZ05       |
| 5G模组       | 华为   | MH5000     |
| LoRa模组     | 有方   | LR70       |
| LoRa模组     | 唯传   | M100C      |
   
#### 前提条件
- 已开通SIM卡流量，模组能够上网。
- 已开通设备接入服务。
 
#### 整体流程
设备商开发设备的流程为：
![](https://support.huaweicloud.com/devg-iothub/figure/zh-cn_image_0263961313.png "点击放大")
- 购买华为云认证模组
  
- 在设备接入控制台创建产品和设备
- 在MCU上通过模组提供的AT指令连接华为云IoT，以及从华为云IoT收发数据
  
- 在设备接入控制台对设备进行管理
  
 
#### 硬件连接
将4G卡插入到SIM卡卡槽，确保插卡的时候卡的**缺口朝里，且芯片朝上**（本文以L610模组为例）。
![](https://support.huaweicloud.com/devg-iothub/figure/zh-cn_image_0277041385.png "点击放大")
#### 安装USB驱动
- 安装USB驱动：
  1. 运行安装文件，根据界面提示进行安装。
     ![](https://support.huaweicloud.com/devg-iothub/public_sys-resources/note_3.0-zh-cn.png)
     不同厂家匹配的USB驱动版本不同，请联系厂家获取符合要求的驱动程序。
     
  
  2. 驱动安装成功后，连接开发板的USB接口到PC，并打开电源，可在设备管理器中查看到枚举出的串口设备。
     ![](https://support.huaweicloud.com/devg-iothub/figure/zh-cn_image_0267182659.png "点击放大")
     
   
- 使用串口工具进行AT命令调试
  1. 运行安装文件，根据界面提示进行安装。
     ![](https://support.huaweicloud.com/devg-iothub/public_sys-resources/note_3.0-zh-cn.png)
     不同厂家匹配的串口工具版本不同，请联系厂家获取符合要求的串口工具。
     
  
  2. 打开串口工具，选择步骤[2]枚举的AT串口，波特率设置为115200，单击"Open Port"。
     ![](https://support.huaweicloud.com/devg-iothub/figure/zh-cn_image_0266710740.png "点击放大")
     ![](https://support.huaweicloud.com/devg-iothub/public_sys-resources/note_3.0-zh-cn.png)
     请确保设置正确，否则AT命令不能够被解析或者解析出错。
     
  
  3. 输入"AT+COPS?"指令，单击"Send Command"，若返回OK，表明网络注册状态成功，否则请检查设置以及硬件接线。 ![](https://support.huaweicloud.com/devg-iothub/figure/zh-cn_image_0266706833.png "点击放大")
     ![](https://support.huaweicloud.com/devg-iothub/public_sys-resources/note_3.0-zh-cn.png)
     若返回的消息中"+COPS: 0,0,"CHN-CT",7"最后一位数字不是7，表明网络存在问题，请更换SIM卡或确认SIM卡能够上网。
     
   
 
#### 创建产品和设备
1. 参考[创建产品](https://support.huaweicloud.com/usermanual-iothub/iot_01_0054.html)，创建基于MQTT协议的产品。
2. 参考[注册设备](https://support.huaweicloud.com/usermanual-iothub/iot_01_0031.html)，获取设备ID（deviceID）和设备密钥。
   
   ![](https://support.huaweicloud.com/devg-iothub/public_sys-resources/note_3.0-zh-cn.png)
   注册设备后，请妥善保管设备ID和设备密钥。设备密钥无法找回，如果忘记，可在"设备详情"页面单击"重置密钥"设置新的密钥。
   
   
3. 访问[设备接入控制台](https://console.huaweicloud.com/iotdm/#/dm-portal/home)，获取MQTT/MQTTS设备对接地址。若使用MQTT协议的话，端口为1883；MQTTS协议的话，端口为8883。
 
#### 通过模组提供的AT指令连接华为云IoT
模组提供两种编码方式的AT指令连接华为云，ASCII码方式和hexstring模式，ASCII表示原始编码，hexstring表示十六进制编码。
- 使用ASCII模式连接华为IoT平台 ![](https://support.huaweicloud.com/devg-iothub/figure/zh-cn_image_0267182660.png "点击放大")
  1. 连接华为云IoT平台。发送AT+HMCON=bsmode,lifetime,"serverip","serverport","deviceID","passwd",codec指令，例如AT+HMCON=0,300,"iot-mqtts.cn-north-4.myhuaweicloud.com","8883","deviceID","passwd"，0，若收到"+HMCON OK"，表明设备成功连接到平台。
     其中各参数含义如下所示：
     - bsmode：是否使用设备发放，填写为0。0表示直接连接设备接入平台；1表示经过设备发放连接设备接入平台；
     
     - lifetime：MQTT心跳时间，默认300；
     
     - serverip：MQTTS/MQTT协议的对接地址，请参考[平台对接信息](https://support.huaweicloud.com/devg-iothub/iot_02_1004.html#ZH-CN_TOPIC_0187644975__section436212919379)获取。如果经过设备发放连接平台，则为设备发放的地址，请参考[设备发放](https://support.huaweicloud.com/qs-iotps/iot_03_0006.html)获取；
     
     - serverport：设备接入的对接端口。如果使用MQTTS协议，端口为8883；MQTT协议，端口则为1883。如果使用设备发放则为设备发放的端口；
     
     - deviceID：注册设备返回的设备ID，参考[步骤2]获取；
     
     - passwd：注册设备设置的密钥，参考[步骤2]获取；如果使用证书模式，该项可以设置为空，但是需要提前设置设备端的公钥以及私钥证书。
     
     - codec：数据传输方式，请填写0或1。0表示是可视的ASCII码方式；1表示使用的是hexstring模式。如果是ascii模式，则数据模式一般为len，ascii_payload。例如2，"ab"；如果是hextring模式，则表示为2，"6162"。
       
  
  2. 订阅自定义主题。发送**AT+HMSUB=qos,topic** 指令，例如AT+HMSUB=0,"$oc/devices/device_id/user/mytopic"，若收到"+HMSUB OK" ，表明订阅成功。
     其中各参数含义如下所示：
     - qos：topic的qos，默认填写0；
     
     - topic：新增的自定义Topic。详细操作指导请参考[新增自定义Topic](https://support.huaweicloud.com/usermanual-iothub/iot_02_9992.html#section3)，其中设备操作权限选择"订阅"，deviceID需要替换为实际设备ID。
      
  
  3. 消息上报。发送**AT+HMPUB=qos，topic，payload_len，payload** 指令，例如，
     AT+HMPUB=0,"$oc/devices/device_id/user/mytopic",16,"{\\"test\\":\\"hello\\"}"，若收到"+HMPUB OK"，表明发布成功。
     ![](https://support.huaweicloud.com/devg-iothub/public_sys-resources/note_3.0-zh-cn.png)
     payload为ASCII模式，要求字符串首尾为双引号，中间的特殊字符要用转义字符。
     其中各参数含义如下所示：
     - qos：对应MQTT的qos，建议使用0。
     
     - topic：新增的自定义Topic。详细操作指导请参考[新增自定义Topic](https://support.huaweicloud.com/usermanual-iothub/iot_02_9992.html#section3)，其中设备操作权限选择"发布"，deviceID需要替换为实际设备ID。
     
     - payload_len：上报消息的长度，不包含\\。
     
     - payload：上报的消息。
      
  
  4. 属性上报。发送**AT+HMPUB=qos，topic，** **payload_len，payload** 指令，例如，
     AT+HMPUB=0,"$oc/devices/device_id/sys/properties/report",82,"{\\"services\\":\[{\\"service_id\\":\\"Clock\\",\\"properties\\":{\\"card_no\\":\\"3028\\",\\"use_type\\":1}}\]}"，若收到"+HMPUB OK"，表明上报成功，您可以在设备详情页面查看上报的属性值。
     ![](https://support.huaweicloud.com/devg-iothub/public_sys-resources/note_3.0-zh-cn.png)
     属性上报前需要自定义产品模型或使用平台预置的产品模型。详细操作说明请参考[在线开发产品模型](https://support.huaweicloud.com/devg-iothub/iot_02_0005.html)，[平台预置产品模型](https://support.huaweicloud.com/devg-iothub/iot_01_0053.html)。
     - qos：对应MQTT的qos，建议使用0；
     
     - topic：平台预置的Topic。更多Topic请参考[Topic定义](https://support.huaweicloud.com/api-iothub/iot_06_v5_3004.html)，deviceID需要替换为实际设备ID。
     
     - payload_len：上报属性的长度，不包含\\；
     
     - payload：上报的属性。
      
  
  5. 下发命令。在设备接入控制台"设备详情 \> 云端下发-命令下发"页签，单击"同步命令下发"下方的"命令下发"。选择要下发的命令和命令值。下发成功后，设备侧收到**+HMREC:topic，** **payload_len，payload** ，例如，+HMREC: "$oc/devices/device_id/sys/commands/request_id={request_id}{"paras":{"value":1},"service_id":"SmokeDetectorControl","command_name":"QUITSILENCE"}",86,{"paras":{"value":1},"service_id":"SmokeDetectorControl","command_name":"QUITSILENCE"
     图1命令下发-SmokeDetectorControl_SILENCE   
     ![](https://support.huaweicloud.com/devg-iothub/figure/zh-cn_image_0000001996492217.png "点击放大")
     其中各参数含义如下所示：
     - qos：对应MQTT的qos，建议使用0；
     
     - topic：平台预置的Topic。更多Topic请参考[Topic定义](https://support.huaweicloud.com/api-iothub/iot_06_v5_3004.html)，deviceID需要替换为实际设备ID，{request_id}用于唯一标识这次请求。设备侧发起的消息带该参数时，需要保证设备侧该参数值的唯一性，可以用递增的数字或者UUID来实现。设备侧收到的消息带该参数时，响应消息需要将该参数值返回给平台。
     
     - payload_len：下发命令的长度，不包含\\；
     
     - payload：下发的命令。
      
  
  6. 取消自定义主题。发送**AT+HMUNS="topic"** ，例如，AT+HMUNS="$oc/devices/deviceID/user/mytopic"，若收到"+HMUNS OK"，表明取消成功。
     其中topic为[2]中新增的自定义Topic，deviceID需要替换为实际设备ID。
     
  
  7. 断开和IoT平台的连接。发送**AT+HMDIS**指令。
  
  8. 设置服务器或客户端证书。
     - 设置CA证书：AT+HMPKS=type，para1,\[para2\]，"Certificate"，例如发送AT+HMPKS=0，1360
     
     - 设置客户端证书： AT+HMPKS=type，para1,\[para2\],"Certificate"，例如发送 AT+HMPKS=1，1022
     
     - 设置私钥证书： AT+HMPKS=type，para1,\[para2\]，"Certificate"，例如发送AT+HMPKS=2，1732
     
     
     ![](https://support.huaweicloud.com/devg-iothub/public_sys-resources/note_3.0-zh-cn.png)
     - type：取值0，1，2。其中0表示CA证书，证书通过para1传递；1表示客户端证书，证书通过para1传递；2表示设备私钥证书，设备的私钥证书通过para1传递；如果有密码，则通过para2传输。
     
     - para1/\[para2\]：其中para1用于存放证书，为空时表示清除证书；para2用于存放私有证书的密码，仅当设置私有证书时有效，证书以字符串格式传输PEM。
     
     - Certificate：证书内容的字符长度值。
       
   
- 使用HEXSTRING模式 ![](https://support.huaweicloud.com/devg-iothub/figure/zh-cn_image_0267182661.png "点击放大")
  1. 连接华为云IoT平台。发送AT+HMCON=bs,lifetime,"serverip","serverport","deviceID","passwd",codec指令，例如AT+HMCON=0, 300,"iot-mqtts.cn-north-4.myhuaweicloud.com","8883","deviceID","passwd"，0，若收到"+HMCON OK"，表明设备成功连接到平台。 其中参数说明请参考[1]。
     
  
  2. 订阅自定义主题。发送**AT+HMSUB=qos，topic** 指令，例如AT+HMSUB=0,"$oc/devices/device_id/user/mytopic"，若收到"+HMSUB OK" ，表明订阅成功。
     其中参数说明请参考[2]。
     
  
  3. 消息上报。发送**AT+HMPUB=qos，topic，** **payload_len，payload** 指令，例如，AT+HMPUB=0,"$oc/devices/device_id/user/mytopic",16,7b2274657374223a2268656c6c6f227d
     **注**：payload为HEX数据格式，可以直接是HEX字符串，且首尾无需双引号。
     其中参数说明请参考[3]。
     
  
  4. 属性上报。此处以消息上报为例，其中参数说明请参考[4]。
  
  5. 下发命令。在设备接入控制台"设备详情 \> 命令"页签，单击"同步命令下发"右侧的"命令下发"。选择要下发的命令和命令值。下发成功后，设备侧收到**+HMREC，topic，** **payload_len，payload** 指令，例如，
     +HMREC: "$oc/devices/device_id/sys/commands/request_id={request_id}",102,7B227061726173223A7B2276616C7565223A223132333435363738393071617A77737865646372667674676279686E756A6D696B6F6C70227D2C22736572766963655F6964223A224E42444F4F52222C22636F6D6D616E645F6E616D65223A2273656E64227D
     其中参数说明请参考[5]。
     
  
  6. 取消自定义主题。发送**AT+HMUNS="topic"** ，例如，AT+HMUNS="$oc/devices/device_id/user/mytopic"，若收到"+HMUNS OK"，表明取消成功。
     其中参数说明请参考[6]。
     
  
  7. 断开和IoT平台的连接。发送**AT+HMDIS**指令。
  
  8. 设置服务器或客户端证书。参考步骤[8]。
   
 
#### 管理设备
模组设备接入平台后，物联网平台支持批量设备管理、[远程控制和监控](https://support.huaweicloud.com/usermanual-iothub/iot_01_0030.html)、[OTA升级](https://support.huaweicloud.com/usermanual-iothub/iot_01_0155.html)等，并支持将设备数据灵活[流转](https://support.huaweicloud.com/usermanual-iothub/iot_01_0022.html)到华为云其他服务。
