# 基于BearPi-HM_Nano开发板和OpenHarmony对接IoTDA
本文主要介绍基于OpenHarmony 3.0来接入IoTDA，以BearPi-HM_Nano开发板为例，使用huaweicloud_iotlink SDK对接华为云物联网平台的简单流程。基于OpenHarmony 3.1及更高版本参考[链接](https://github.com/LiteOS/LiteOS_Lab/blob/iot-device-sdk-tiny-oh/docs/OHOSBUILD.md)。
#### 前提条件
- 已注册华为云官方账号。未注册可单击[注册页面](https://reg.huaweicloud.com/registerui/public/custom/register.html#/register)完成注册。
- 已完成实名制认证。未完成可在华为云上单击[实名认证](https://account.huaweicloud.com/usercenter/#/accountindex/realNameAuth)完成认证，否则无法使用设备接入功能。
- 已开通设备接入服务。未开通则访问[设备接入服务](https://www.huaweicloud.com/product/iothub.html)，单击"管理控制台"后开通该服务。
 
#### 硬件环境
BearPi-HM_Nano开发板、E53_IA1扩展模块、Type-C数据线、PC。
#### 软件环境
参考链接单击[这里](https://gitee.com/openharmony/docs/tree/master/zh-cn/device-dev/quick-start)，搭建环境可以选择基于IDE方式或者基于命令行方式，其中BearPi-HM_Nano主控芯片为Hi3861，因此搭建环境时需要安装Hi3861对应环境。
图1软件环境创建步骤
![](https://support.huaweicloud.com/bestpractice-iothub/figure/zh-cn_image_0000001669121228.png)
![](https://support.huaweicloud.com/bestpractice-iothub/public_sys-resources/note_3.0-zh-cn.png)
- 在"安装Hi3861开发板特有环境"安装gcc_riscv32时，强烈建议直接下载gcc_riscv32镜像，否则可能出现某些插件下载或安装失败，具体操作如下[图2]所示。
- 开源代码量较大，下载时间可能较长，需预留好充足时间。
 
图2直接下载gcc_riscv32镜像   
![](https://support.huaweicloud.com/bestpractice-iothub/figure/zh-cn_image_0000001717160721.png "点击放大")
#### 创建产品
1. 登录[管理控制台](https://console.huaweicloud.com/iotdm/#/dm-portal/home)，单击左侧导航栏"产品"，单击页面左侧的"创建产品"。
2. 根据页面提示填写参数，然后单击"确认"，完成产品的创建。 
   
   |                                                                                            **基本信息**                                                                                            ||
   |---|---|
   | 所属资源空间 | 平台自动将新创建的产品归属在默认资源空间下。如需归属在其他资源空间下，下拉选择所属的资源空间。如无对应的资源空间，请先创建[资源空间](https://support.huaweicloud.com/usermanual-iothub/iot_01_0006.html)。 |
   | 产品名称   | 为产品命名。产品名称在相同资源空间有唯一性。长度不超过64，只允许中文、字母、数字、以及_?'#().,\&%@!-等字符的组合。                                                                        |
   | 协议类型   | 选择MQTT。                                                                                                                                   |
   | 数据格式   | 选择JSON。                                                                                                                                  |
   | 所属行业    | 请根据实际情况选择。                                                                                                                              |
   | 设备类型     | 请根据实际情况选择。                                                                                                                              |
   | 高级配置                                                                                                                                                                                            ||
   | 产品ID    | 定制ProductID，用于唯一标识一个产品。如果携带此参数，平台将产品ID设置为该参数值；如果不携带此参数，产品ID在物联网平台创建产品后由平台分配获得。                                                           |
      
   图3创建产品-MQTT   
   ![](https://support.huaweicloud.com/bestpractice-iothub/figure/zh-cn_image_0000001981306829.png "点击放大")
   
   
 
#### 开发产品模型
1. 找到新增的产品，单击"查看"进入产品界面。
2. 在产品详情"基本信息"页面，直接上传模型文件[BearPi_Agriculture.zip](https://iot-developer.obs.cn-north-4.myhuaweicloud.com:443/BearPi_Agriculture.zip)。
   
   图4上传产品模型-MQTT   
   ![](https://support.huaweicloud.com/bestpractice-iothub/figure/zh-cn_image_0000001981471833.png "点击放大")
   ![](https://support.huaweicloud.com/bestpractice-iothub/public_sys-resources/note_3.0-zh-cn.png)
   1. 在产品列表中，单击对应的产品，进入产品详情页。您可以查看产品ID、产品名称、设备类型、数据格式、厂商名称、所属资源空间、协议类型等产品基本信息。
   
   2. 产品创建成功后，您可以单击"删除"删除不再使用的产品。删除产品后，该产品下的产品模型、编解码插件等资源将被清空，请谨慎操作。
    
   
   
 
#### 注册设备
1. 访问[设备接入服务](https://www.huaweicloud.com/product/iothub.html)，单击[管理控制台](https://console.huaweicloud.com/iotdm/#/dm-portal/home)进入设备接入控制台。
2. 在左侧导航栏选择" 设备 \> 所有设备"，单击"注册设备"，按照如下表格填写参数后，单击"确定"。 
   图5单设备注册-MQTT   
   ![](https://support.huaweicloud.com/bestpractice-iothub/figure/zh-cn_image_0000001981327497.png "点击放大")
   
   | 参数名称                   | 说明                                                                                                                                               |
   |:---|:---|
   | 所属资源空间                | 选择设备所属的资源空间。                                                                                                                                    |
   | 所属产品                 | 选择设备所属的产品。如没有，请先[创建产品](https://support.huaweicloud.com/bestpractice-iothub/iot_bp_0077.html#ZH-CN_TOPIC_0000001160366184__section980065112310)。 |
   | 设备标识码                  | 即node_id，填写为设备的IMEI、MAC地址或Serial No；若没有真实设备，填写自定义字符串，长度为4至64个字符，只允许字母、数字、下划线（_）、连接符（-）的组合。                                                      |
   | 设备名称                 | 即device_name，可自定义。                                                                                                                             |
   | 设备认证类型                | 选择"密钥"。                                                                                                                                        |
   | 密钥 | 设备密钥，可自定义，不填写物联网平台会自动生成。                                                                                                                        |
      
   图6设备-注册设备成功   
   ![](https://support.huaweicloud.com/bestpractice-iothub/figure/zh-cn_image_0000001981487333.png "点击放大")
   ![](https://support.huaweicloud.com/bestpractice-iothub/public_sys-resources/note_3.0-zh-cn.png)
   - 设备注册成功后，请妥善保管好设备ID和密钥，用于设备接入平台认证。
   
   - 若密钥丢失，只能通过[重置密钥](https://support.huaweicloud.com/usermanual-iothub/iot_01_0065.html#section1)生成新的密钥，无法找回注册设备时生成的密钥。
   
   - 用户可在[设备列表](https://support.huaweicloud.com/usermanual-iothub/iot_01_0065.html#section2)删除不再使用的设备。删除设备不支持撤回，请谨慎操作。
    
   
   
 
#### Huaweicloud_iotlink SDK使用
1. 下载源码：[oh3.0_hwcloud_iotlink-master.zip](https://obs-pipeline.obs.cn-north-4.myhuaweicloud.com/sdkDeploy/quickStart/oh3.0_hwcloud_iotlink-master.zip)。
2. 将上述源码直接拷贝到OpenHarmony源码根目录下的src-\>third_party目录中，此处需要注意的是OpenHarmony和Huaweicloud_iotlink SDK共同具备的三方库直接使用OpenHarmony的库文件，如CJSON和mbedtls。
3. 在OpenHarmony 3.0源码device\\bearpi\\bearpi_hm_nano\\app\\BUILD.gn中添加如下代码，根据#是否注释来决定具体编译demo的选择。 
   ```
   "//third_party/hwcloud_iotlink/demos/mqtt_tiny_v5_agriculture_demo:mqtt_tiny_v5_agriculture_demo",
   ```
   图7demo的选择   
   ![](https://support.huaweicloud.com/bestpractice-iothub/figure/zh-cn_image_0000001225933589.png "点击放大")
   ![](https://support.huaweicloud.com/bestpractice-iothub/public_sys-resources/note_3.0-zh-cn.png)
   上图中2为使用MQTT对接华为云的demo，确认该demo的BUILD.gn文件，具体如[图7]所示，其中A区域包含开发板硬件和wifi相关的库文件，B区域包括MQTT对接华为云必须的一些库文件，如cJson，mqtt相关、osal相关以及配置库文件，C区域表示编译该文件时需要编译hwcloud_iotlink库，编译时会按照指定路径找到该文件所必要的库以及C文件进行编译。
   图8代码编译文件   
   ![](https://support.huaweicloud.com/bestpractice-iothub/figure/zh-cn_image_0000001226053529.png "点击放大")
   图9demo的主函数文件   
   ![](https://support.huaweicloud.com/bestpractice-iothub/figure/zh-cn_image_0000001180453870.png "点击放大")
   ![](https://support.huaweicloud.com/bestpractice-iothub/public_sys-resources/note_3.0-zh-cn.png)
   [图8]中A区域表示MQTT对接华为云所必须的一些库文件以及dtls的库文件，入口函数IoTMainTaskEntry()中务必先调用link_main_task_entry()函数，来确保osal的安装以及其他配置的初始化。
   
   
4. 设置参数。 
   图10参数修改
   ![](https://support.huaweicloud.com/bestpractice-iothub/figure/zh-cn_image_0000001757671772.png "点击放大")
   ![](https://support.huaweicloud.com/bestpractice-iothub/public_sys-resources/note_3.0-zh-cn.png)
   - 如果需要对接上云需要根据自己的设备修改配网信息，wifi热点账号以及密码以及自己在云端注册的设备ID和设备密钥，注意此设备仅支持2.4G频段的wifi。
   
   - 对接地址修改为[管理控制台](https://console.huaweicloud.com/iotdm/#/dm-portal/home)界面"总览"的"接入信息"设备接入MQTT协议地址。
   
   - 编译和烧录，分为IDE方式和命令行方式，这里不一一介绍。可以参考[图1] 对应链接。
   
   - 烧录后，按下开发板RESET复位键，设备将启动。
   
   - 上述代码基于OpenHarmony3.0版本，若为其他版本按需修正相应BUILD.gn文件中引入的OpenHarmony源码路径。
    
   
   
 
#### 设备接入平台
代码烧录到设备后重启设备（首次使用需重启两次，第一次烧录时可能需要配置内部信息），第二次设备重启之后可以正常对接华为云。
登录平台可以看见数据上报的具体信息，也可以进行命令下发等操作控制设备，具体如下图10-12。
图11查看上报数据-MQTT   
![](https://support.huaweicloud.com/bestpractice-iothub/figure/zh-cn_image_0000001981489749.png "点击放大")
图12在线调试-模拟命令下发   
![](https://support.huaweicloud.com/bestpractice-iothub/figure/zh-cn_image_0000002332228073.png "点击放大")
图13日志信息   
![](https://support.huaweicloud.com/bestpractice-iothub/figure/zh-cn_image_0000001993074901.png "点击放大")
