鸿蒙开发板初探——BearPi-HM Nano
LI Rui

介绍

前几天收到了小熊派新品的推送于是马上入手了一波,正好最近也在研究嵌入式开发的东西,做点东西出来玩玩还是挺有成就感。

板子命名为BearPi-HM Nano,是小熊派专为鸿蒙OS设计的开发版,其板载了一块高度集成的2.4GHz SoC WiFi芯片Hi3861V100。官方原价69.8人民币,领券算上运费到手在20左右,算是一个不错的价格。

板子的“H”型设计被人调侃为鸿蒙的灵魂所在,而中间显眼的NFC天线让人不禁联想到华为一些物联网产品中出现的碰一碰联网。HarmonyOS之后如果真的能够做到统一系统,万物互联,非常令人期待。

安装开发环境

本节可能和官方文档存在出入。

本文基于的环境如下:

  • Ubuntu 20.10
  • Node.js 15.4.0
  • npm 7.0.15
  • Python 3.8.6

我们将在Linux平台上完成全流程,因为按照官方的文档,同时需要一台Windows主机用于开发和烧录及远程Linux用于编译,这实在不太友好。

鸿蒙推出了一个名为hpm的包管理器,通过hpm开发者可以安装依赖、管理项目、编译源码。为了从npm中获得hpm,你需要Node.js 12.x或更高版本并安装npm包管理器。安装hpm的命令如下:

1
npm install -g @ohos/hpm-cli

在编译过程中我们需要用到的交叉编译软件并不需要手动去安装,hpm会自动安装到$HOME/.hpm下。因此,我们只需要安装编译时所需的依赖:

1
2
python3 -m pip install kconfiglib pycryptodome six ecdsa
sudo apt-get install scons -y

因为官方提供的DevEco Device Tool(VS Code插件,集成了终端工具的能力)暂不支持Linux,我们需要在wine中使用HiBurn进行烧录。安装wine的命令如下,64位系统需要执行第一条命令启用32位支持:

1
2
3
4
5
sudo dpkg --add-architecture i386
wget -nc https://dl.winehq.org/wine-builds/winehq.key
sudo apt-key add winehq.key
sudo apt update
sudo apt install --install-recommends winehq-stable

2-3条命令添加了wine源的key,4-5条命令我们更新了软件包列表并安装了稳定版的wine。

获取源码

本节中我们将从HarmonyOS Package Manager即hpm中获得源码。

假设我们想在~/project/demo中进行开发,执行下面的命令即可利用hpm下载源码并安装依赖:

1
2
3
cd ~/project/demo
hpm init -t dist
hpm i @bearpi/bearpi_hm_nano

编译并烧录

下面我们将编译默认的LED示例源码,按下F1按钮将点亮LED,而F2会将LED熄灭。因为编译的配置文件已默认写好,我们不需要去手动配置,这里只展示一下源码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
/*
* Copyright (c) 2020 Nanjing Xiaoxiongpai Intelligent Technology Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

#include <stdio.h>
#include <unistd.h>

#include "ohos_init.h"
#include "cmsis_os2.h"
#include "wifiiot_gpio.h"
#include "wifiiot_gpio_ex.h"

static void F1_Pressed(char *arg)
{
(void)arg;
GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_2, 1);
}
static void F2_Pressed(char *arg)
{
(void)arg;
GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_2, 0);
}
static void ButtonExampleEntry(void)
{
GpioInit();

//初始化LED灯
IoSetFunc(WIFI_IOT_IO_NAME_GPIO_2, WIFI_IOT_IO_FUNC_GPIO_2_GPIO);

GpioSetDir(WIFI_IOT_IO_NAME_GPIO_2, WIFI_IOT_GPIO_DIR_OUT);

//初始化F1按键,设置为下降沿触发中断
IoSetFunc(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_IO_FUNC_GPIO_11_GPIO);

GpioSetDir(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_GPIO_DIR_IN);
IoSetPull(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_IO_PULL_UP);
GpioRegisterIsrFunc(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_INT_TYPE_EDGE, WIFI_IOT_GPIO_EDGE_FALL_LEVEL_LOW, F1_Pressed, NULL);

//初始化F2按键,设置为下降沿触发中断
IoSetFunc(WIFI_IOT_IO_NAME_GPIO_12, WIFI_IOT_IO_FUNC_GPIO_12_GPIO);

GpioSetDir(WIFI_IOT_IO_NAME_GPIO_12, WIFI_IOT_GPIO_DIR_IN);
IoSetPull(WIFI_IOT_IO_NAME_GPIO_12, WIFI_IOT_IO_PULL_UP);
GpioRegisterIsrFunc(WIFI_IOT_IO_NAME_GPIO_12, WIFI_IOT_INT_TYPE_EDGE, WIFI_IOT_GPIO_EDGE_FALL_LEVEL_LOW, F2_Pressed, NULL);
}

APP_FEATURE_INIT(ButtonExampleEntry);

通过hpm我们能够直接进行编译,如果中途报错可能是依赖未安装,安装缺失依赖即可。

1
hpm dist

编译结果位于当前项目下的out下,我们能够使用wine启动HiBurn,并进行烧录。

1
wine HiBurn.exe

第一步我们需要选择对应的COM口,这里我们的CH340的设备位置为/dev/ttyUSB0,通过下面的命令我们可以查看wine的映射关系:

1
ls -l ~/.wine/dosdevices

这里对应到的是COM33。之后我们选择编译的结果,文件路径为项目文件夹下的out\BearPi-HM_Nano\Hi3861_wifiiot_app_allinone.bin。并勾选自动烧录,这样在连接之后就会直接烧录。

点击Connect后,按下板子上的reset按钮,即可进行烧录。注意烧录完成后要断开连接并按下reset。

总结

我们可以通过一些例子看到目前OpenHarmony在低内存设备上的能力,尽管现在开放出来的能力只能让我们做一些嵌入式设备,但是根据新闻,我们将能够在一些华为/荣耀设备上得到鸿蒙的更新。还是希望鸿蒙越做越好,越来越开放,毕竟现在做出来自己的系统并不容易。

  • 本文标题:鸿蒙开发板初探——BearPi-HM Nano
  • 本文作者:LI Rui
  • 创建时间:2020-12-13 23:14:32
  • 本文链接:https://www.lirui.tech/post/2020/0da8016196bd.html
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-SA 许可协议。转载请注明出处!