3 步体验在 DAYU200 开发板上完成 OpenHarmony 对接华为云 IoT

本文分享自华为云社区《DAYU200+OpenHarmony 3.1.1对接华为云IOT【华为云IoT+鸿蒙】》,作者:DS 小龙哥。
一、前言
OpenHarmony 3.1.1 是一个开源的智能终端操作系统,主要用于智能家居、智能手机、平板电脑、智能穿戴设备等智能终端设备。是一个分布式操作系统,支持多种硬件平台和多种编程语言,可以方便地进行移植和定制。
特点:
(1) 分布式:支持分布式计算和分布式存储,可以在多个设备之间进行任务调度和数据共享。
(2)可裁剪:支持根据设备的需求进行裁剪,以满足不同设备的资源限制。
(3)安全:提供了安全机制,保护设备的隐私和安全。
(4)可移植:支持多种硬件平台和多种编程语言,可以方便地进行移植和定制。
当前文章介绍在 DAYU200 开发板上烧写 OpenHarmony 系统,利用huaweicloud-iot-device-sdk
完成华为云 IOT 平台对接,完成物联网数据通信。
所需硬件:DAYU200 开发板(RK3568)
二、DAYU200 开发板
2.1 开发板介绍
关于开发板的介绍在这里:https://gitee.com/hihope_iot/docs/tree/master/HiHope_DAYU200



2.2 开发板实物图





三、环境安装
3.1 串口终端
开发板插上串口线之后,打开设备管理器可以看到识别到串口COM8
,这就是开发板的 Debug 串口。(需要提前安装好 USB 转串口驱动)。

打开串口工具,新建会话,选择串口协议。

波特率选择1500000
也就是 1.5M。

创建完成。

选择刚才创建好的会话,点击连接。

复位开发板(开发板上有一个 RESET 按钮),正常情况下会在终端上看到内核启动过程;启动完成后按下回车即可进入到 Linux 终端命令行。
从打印的命令行数据可以看出当前设备的配置:
这是 uboot 打印出来的配置信息。从当前信息里可以看出 CPU 型号 RK3568,内存 2GB。
内核启动打印的信息;从信息里可以看出当前系统使用的内核是 Linux 5.10 内核。

在串口软件上可以设置终端类型,方便区分 Linux 终端文件类型。

3.2 固件烧写
【1】烧写工具下载
下来下来之后打开HiHope_DAYU200
文件夹。

我这里在 windows 下进行烧写。

在DriverAssitant_v5.1.1.zip
目录下是 USB 驱动,解压后进行安装。如果已经安装旧版本的烧写工具, 需要先点击“驱动卸载” 按钮下载驱动, 然后再点击“驱动安装” 按钮安装驱动。

RKDevTool.exe
就是烧写工具。

【2】HiHope 官方固件下载
地址:https://gitee.com/hihope_iot/images/tree/master/HiHope_DAYU200

下载下来解压,打开烧写工具选择路径。

确认开发板是否进入烧写模式
(1)如果界面显示"发现一个 LOADER 设备", 说明开发板进入 Loader 模式等待烧写固件。
(2)如果界面显示"发现一个 MASKROM 设备", 说明开发板进入 Maskrom 模式等待烧写固 件。
(3)如果界面显示"没有发现设备", 说明开发板没有进入烧写模式, 需要先让开发板进入烧写模式
进入烧写模式的步骤
(1)先按住 VOL-/RECOVERY 按键 和 RESET 按钮不松开, 烧录工具此时显示“没有发现设备”
(2)然后再 松开 RESER 键, 烧录工具显示“发现一个 LOADER 设备” , 说明此时已经进入烧写模式。

3.3 huaweicloud-iot-device-sdk-c 介绍
说明文档:https://gitee.com/openharmony-sig/iot_device_sdk_c/blob/master/README_CN.md#5
Huawei Cloud IOT Device SDK for C 是华为云推出的一套面向嵌入式设备的物联网开发套件,支持 C 语言开发。该套件提供了一系列 API,可以方便地实现设备与云端的连接、数据上报、远程控制等功能。
该套件主要包括以下组件:
Huawei LiteOS:一个轻量级的操作系统,提供了内核级别的任务调度、内存管理、网络协议栈等功能。
Huawei Cloud IOT Agent:一个设备端的物联网代理程序,负责与云端的物联网平台进行连接,实现设备注册、数据上报、远程控制等功能。
Huawei Cloud IOT SDK for C:一个 C 语言的开发包,提供了一系列 API,可以方便地实现设备与云端的连接、数据上报、远程控制等功能。
使用 Huawei Cloud IOT Device SDK for C 可以大大简化物联网设备的开发流程,提高开发效率,同时也可以保证设备与云端之间的连接稳定性和安全性。该套件适用于各种类型的嵌入式设备,例如智能家居、智能家电、智能穿戴等。
Huawei Cloud IOT SDK for C SDK 面向运算、存储能力较强的嵌入式终端设备,开发者通过调用 SDK 接口,便可实现设备与物联网平台的上下行通讯。SDK 当前支持的功能有:
支持物模型:设备消息/属性/事件上报,设备命令/消息/属性/事件接收
支持子设备消息转发、子设备管理
支持 OTA 升级
支持密码认证和证书认证两种设备接入方式
支持自定义 topic
支持设备影子查询
支持自定义日志收集能力
支持端侧规则引擎
支持 SSH 远程登录
支持对接边缘 M2M

四、上云实验
4.1 物联网平台介绍
华为云物联网平台(IoT 设备接入云服务)提供海量设备的接入和管理能力,将物理设备联接到云,支撑设备数据采集上云和云端下发命令给设备进行远程控制,配合华为云其他产品,帮助我们快速构筑物联网解决方案。
使用物联网平台构建一个完整的物联网解决方案主要包括 3 部分:物联网平台、业务应用和设备。
物联网平台作为连接业务应用和设备的中间层,屏蔽了各种复杂的设备接口,实现设备的快速接入;同时提供强大的开放能力,支撑行业用户构建各种物联网解决方案。
设备可以通过固网、2G/3G/4G/5G、NB-IoT、Wifi 等多种网络接入物联网平台,并使用 LWM2M/CoAP、MQTT、HTTPS 协议将业务数据上报到平台,平台也可以将控制命令下发给设备。
业务应用通过调用物联网平台提供的 API,实现设备数据采集、命令下发、设备管理等业务场景。


4.2 开通物联网服务
地址: https://www.huaweicloud.com/product/iothub.html

点击总览
,查看接入信息。 我们当前设备准备采用 MQTT 协议接入华为云平台,这里可以看到 MQTT 协议的地址和端口号等信息。

总结:
根据域名地址得到 IP 地址信息:

MQTT 协议接入端口号有两个,1883 是非加密端口,8883 是证书加密端口,单片机无法加载证书,所以使用 1883 端口比较合适。 接下来的 ESP8266 就采用 1883 端口连接华为云物联网平台。
4.3 创建产品
(1)创建产品
点击产品页,再点击左上角创建产品。

(2)填写产品信息
根据自己产品名字填写。

(3)产品创建成功

(4)添加自定义模型
产品创建完成之后,点击进入产品详情页面,翻到最下面可以看到模型定义。
这个模型就是定义自己设备接下来需要向服务器上传那些数据类型。根据自己的数据类型进行编写。
先点击自定义模型。

再创建一个服务 ID。

接着点击新增属性。


4.4 添加设备
产品是属于上层的抽象模型,接下来在产品模型下添加实际的设备。添加的设备最终需要与真实的设备关联在一起,完成数据交互。
(1)注册设备

(2)根据自己的设备填写

(3)保存设备信息
创建完毕之后,点击保存并关闭,得到创建的设备密匙信息。该信息在后续生成 MQTT 三元组的时候需要使用。

(4)设备创建完成
可以点击设备进入到设备详情页面。

4.5 OpenHarmony 环境构建
在文件 Harmony 源码路径/build/subsystem_config.json 中添加构建脚本:
(1)添加子系统编译构建
在文件 OpenHarmony 源码路径/build/subsystem_config.json 中添加如下构建脚本:

在产品配置文件中添加子系统,其子系统名称与文件中添加内容对应,就是iot-device-sdk-c:iot-device-sdk-c
。
配置文件位于`MY_OHOS_

(2)编译依赖的动态库
此 sdk 主要依赖于libboundscheck.so
,libpaho-mqtt3as.so
,libssh.so
,libnopoll.so
这些动态库,其间接依赖于libz.so
,libssl.so
, libcrypto.so
。
(3)编译第三方动态库
对于libboundscheck.so
,libpaho-mqtt3as.so
,libssh.so
,libnopoll.so
, 这些库对应的源码没有在 OpenHarmony 中集成,如果开发板中没有这些动态库,需要自行下载并编译。
执行以下命令拉取对应源码:
分别在 OpenHarmony 源码路径/third_party/iot_device_sdk_c/third_party/huawei_secure_c,OpenHarmony 源码路径/third_party/iot_device_sdk_c/third_party/paho.mqtt.c, OpenHarmony 源码路径/third_party/iot_device_sdk_c/third_party/libssh, OpenHarmony 源码路径/third_party/iot_device_sdk_c/third_party/nopoll 文件夹中放入或替换 BUILD.gn 文件
内容如下:
由于 libssh 需要 cmake 生成一些包含各种配置的头文件,所以此处先用 cmake 命令生成中间文件。
此处需要根据开发板支持的功能向 cmake 传入参数,以便开启或关闭对应特性,如示例中的
-DHAVED_GLOB=0
命令如下:
paho.mqtt.c 需要用 make 生成VersionInfo.h
,执行如下命令生成:
nopoll 需要对应的 OpenHarmony 源码路径/third_party/iot_device_sdk_c/third_party/nopoll/src/nopoll_config.h:
最后修改文件 OpenHarmony 源码路径/third_party/iot_device_sdk_c/BUILD.gn,在 executable("mqtt_device_demo")的 deps 中加入以下依赖:
结果如图所示:

(4)其它三方库依赖
libz.so 和 libssl.so 对应的源码在拉取 OpenHarmony 时会自获取,其分别对应 OpenHarmony 源码路径/third_party/libz,则属于 OpenHarmony 源码路径/third_party/openssl。 这些库在编译 libboundscheck.so 等动态库时会以依赖的方式来驱使其编译,所以只需要将对应的产物拷贝到目标设备中。
部分产物位于 OpenHarmony 源码路径/out/{产品型号}/common/common/目录下,部分则位于特殊的位置。这些动态库通常.z.so 结尾。以 rk3568 为例,其`libssh.so 和 libz.so 分别处于:
对于示例开发板rk3861
,其内部已经存在这些动态库,所以示例中无需拷贝这些库。如果目标设备缺少这些库,可以使用以下命令来查找动态库位置:
(5)配置华为云接入参数并编译主程序
打开 OpenHarmony 源码路径/third_party/iot_device_sdk_c/src/device_demo/device_demo.c,修改接入地址,设备 id 和设备密钥,如下图所示:

最后执行编译:
输出如下内容则表示编译成功;

(6)验证对接华为云
将需要的动态库和主程序./MQTT_Demo 拷贝到目标设备的同一路径下,执行 export LD_LIBRARY_PATH=. && ./MQTT_Demo,出现 MqttBase_OnConnectSuccess 则表示成功连接华为云:

版权声明: 本文为 InfoQ 作者【华为云开发者联盟】的原创文章。
原文链接:【http://xie.infoq.cn/article/112354e19e3b68f33124094df】。文章转载请联系作者。
评论