基于 Hi3861 平台的 HarmonyOS Device 开发体验--开发调试篇

815 阅读6分钟

基于 Hi3861 平台的 HarmonyOS Device 开发体验

大家好,我是不务正业的非著名 Copy 攻城狮,此篇应是 Copy 攻城狮 2020 年最后一个”Hello,World“--基于 Harmony OS 的 Hi3861 开发板进行物联网应用开发实战。Copy 攻城狮的“Hello World”之路 [1]从来都不是一帆风顺的,此次尝试开(拷)发(贝)物联网应用也走了不少弯路,最后终于跑通了蜂鸣器版的《Jingle Bells》,预祝大家新年快乐!

开发调试篇

具体的文档和教程请参考 HarmonyOS 官方文档以及厂商的开源教程如 HiHope 的《Harmony OS 物联网应用开发实战》配套视频和代码仓库、BearPi 的《HM Nano 鸿蒙·季 发布》配套视频及代码仓库。我们使用的是 HiHope 出品的 WI-FI IoT Hi3861 套件,涵盖了一个核心板(Hi3861 WLAN 模组)和七个扩展模块(交通灯板、炫彩灯板、OLED 板、NFC 板、机器人扩展板),包含了丰富的外设接口如 I2C(The Inter Integrated Circuit)、PWM(Pulse Width Modulation)、GPIO(General Purpose Input/Output)和多路 ADC(Analog to Digital Converter)等等,可玩性非常高。鸿蒙社区也有很多牛人创造了超多创意玩法,比如通过蜂鸣器演奏乐曲、通过 OLED 播放视频、俄罗斯方块小游戏、控制大疆无人机……您是不是也想来一套?接下来,请跟随 Copy 攻城狮本大狮一起探索一下 HarmonyOS Devic 开发调试吧!

3.1 从点灯开始

如果您留意到 HarmonyOS Device 官方文档中关于 Hi3861 的示例程序,除了“Hello,World”和 WLAN 模组联网,在设备开发章节还提供了一个 LED 外设控制的 Demo,通过调用 HarmonyOS 的 NDK 接口,实现对 GPIO 控制,达到 LED 闪烁的效果,也就是我们常说的“点灯”。源代码在我们下载的目录中:`harmonyos/openharmony/applications/sample/wifi-iot/app/iothardware/led_example.c`[2]。 在 Copy 代码之前,大概了解一下源码的目录:

.
├── applications          # 应用程序样例,包括wifi-iot,camera等
│   └── sample
│   ├──── camera          # 摄像头类产品
│   └──── wifi-iot        # WIFI连接类产品
├── base                  # 基础软件服务子系统集&硬件服务子系统集
├── build                 # 组件化编译、构建和配置脚本
│   └── lite
├── build.py              # 编译脚本文件
├── device                # qemu模拟不同内核运行在不同的单板
├── docs                  # OpenHarmony开发者文档
├── domains               # 增强软件服务子系统集
│   └── iot
├── drivers               # 驱动子系统
│   ├── hdf
│   └── liteos
├── foundation            # 系统基础能力子系统集
├── kernel                # 内核子系统
├── out                   # 编译输出
│   └── wifiiot           # python3 build.py wifiiot的产物
├── prebuilts             # 编译器及工具链子系统
├── test                  # 测试子系统
├── third_party           # 开源第三方组件
├── utils                 # 常用的工具集
└── vendor                # 厂商提供的软件
    ├── hisi
    └── huawei

再看看我们的开发目录applications/sample/wifi-iot

├── app
│   ├── BUILD.gn                            # 入口
│   ├── demolink                            # Hello,World
│   │   ├── BUILD.gn
│   │   └── helloworld.c
│   ├── iothardware                         # 点灯Demo
│   │   ├── BUILD.gn
│   │   └── led_example.c
│   ├── samgr                               # 服务框架子系统管理系统功能
│   │   ├── bootstrap_example.c
│   │   ├── broadcast_example.c
│   │   ├── BUILD.gn
│   │   ├── example.h
│   │   ├── feature_example.c
│   │   ├── maintenance_example.c
│   │   ├── service_example.c
│   │   ├── service_recovery_example.c
│   │   ├── specified_task_example.c
│   │   └── task_example.c
│   └── startup                             # 启动配置
│       └── BUILD.gn
└── LICENSE                                 # 许可证

根据现有的代码,要想完成“点灯”实践,我们只需在 VSCode Remote 中修改入口文件BUILD.gn:

import("//build/lite/config/component/lite_component.gni")
lite_component("app") {
    features = [
        "iothardware:led_example"
    ]
}

然后新开一个 VSCode 窗口进行 DevEco Device Tool 配置及烧录,烧录完毕通过串口工具能查看开发板的输出,再 Reset 开发板之后,伴随着节奏声,LED 灯一闪一闪,有点转向灯的赶脚,按下左边按钮时提示闪烁。

HarmonyOS Devic环境搭建-点灯体验开发调试
HarmonyOS Devic环境搭建-点灯体验开发调试

为了简化操作,我安装了串口调试工具 sscom,因此在每次烧录前我先在 sscom 中关闭串口,烧录完毕之后,我就在 sscom 中打开串口,方便的点在于不必每次都输入串口,在发送操作指令时也更加快捷。值得注意的是烧录时一定要先关闭被占用的串口,不然会提示串口繁忙而无法正常烧录。

HarmonyOS Devic环境搭建-串口调试工具
HarmonyOS Devic环境搭建-串口调试工具

这里的点灯 Demo 通过 GPIO(General-purpose input/output,通用型输入输出)实现,同样的还可以实现交通灯板上的“红黄绿”LED 及蜂鸣器的操作,我们实现蜂鸣器版的《Jingle Bells》也基于 GPIO。

3.2 走向 Copy 之路

在万物互联的世界里,传感器承担了绝大部分的数据采集工作,在 WIFI-IoTHi3861 套件中的炫彩灯板包含了光敏、人体红外,环境检测板包含了温湿度传感器、燃气传感器。这部分主要涉及到 ADC 和 I2C,因此我们在进行传感器应用开发的时候,需要特别留意公共基础库中的wifiiot_adc.hwifiiot_i2c.h,文件均位于[openharmony/base/iot_hardware/interfaces/kits/wifiiot_lite](https://gitee.com/openharmony/iothardware_interfaces_kits_wifiiot_lite "openharmony/base/iot_hardware/interfaces/kits/wifiiot_lite")目录下.另外就是如果使用了外设接口编译的时候要注意对应的配置是否已经设置正常,比如我用到了 I2C,那么在编译配置文件vendor\hisi\hi3861\hi3861\build\config\usr_config.mk中,我就需要将# CONFIG_I2C_SUPPORT is not set修改为CONFIG_I2C_SUPPORT=y……当然一开始我是不知道这些“门道”的,直到我在 HarmonyOS Device 开发中又走向了 Copy 之路,这条道也许永远难回头。我就像这些传感器,在既定的程序里采集“知识”……

秉着学习的态度,我直接 clone 的 HiHope 的仓库到我的harmonyos/openharmony目录中,当然,既然是 Copy,我一定会按照LICENSE的规则使用,万一没遵守也是仅个人学习使用,应该不会被“谴责”[3]吧。请开始 Copy 吧:

cd /root/harmonyos/openharmony/applications/sample/wifi-iot
git clone https://gitee.com/hihopeorg/HarmonyOS-IoT-Application-Development.git
mv HarmonyOS-IoT-Application-Development/* ./
HarmonyOS Devic环境搭建-获取学习资料
HarmonyOS Devic环境搭建-获取学习资料

于是乎,在司职前端开发的 Copy 攻城狮的票圈又多了些物联网开发的动态,“外行看热闹,内行看笑话”,不过扪心自问,这样的 Copy,我还是非常乐意尝试--零基础也能玩玩,真好!一顿 Copy 操作下来,我便开始尝试编译烧录每一个 Demo,尽管代码看的吃力(我是太白),但一些关键的代码还是能够勉强修改,比如“1 改为 2”……总体来说,我体验到了动手实践的乐趣。尤其是看到蜂鸣器版的《两只老虎》,我瞬间想到了那年平安夜,在陌生的城市,深夜加班之后,路灯下自己的影子被拉得长长的,我和往常一样扫了一辆共享单车,锁开的那一瞬间,音乐响起来的……

参考资料

[1]

Copy 攻城狮的“Hello World”之路 : https://juejin.cn/post/6901366425241190407

[2]

harmonyos/openharmony/applications/sample/wifi-iot/app/iothardware/led_example.c: https://gitee.com/openharmony/applications_sample_wifi_iot/blob/master/app/iothardware/led_example.c

[3]

“谴责”: https://harmonyos.51cto.com/posts/2030