基于BearPi开发板的语音控制开关(二)搭建小熊派的开发环境
前文介绍,我已经准备了一块小熊派开发板及其智慧农业模块,下边开始根据 BearPi-HM Nano 十分钟上手教程 搭建小熊派的开发环境。因为VMware的限制,这一步只能在Windows系统操作。
下载工具
下载官方提供镜像 - 镜像里提供OpenHarmony系统开发环境和工具:
https://pan.baidu.com/share/init?surl=T0Tcl3y48C1p5L6y-6HJNg?pwd=eusr
下载并安装虚拟机VMwareWorkstation:
https://www.vmware.com/products/workstation-player/workstation-player-evaluation.html
下载HiBurn - 编译好的程序,烧录到开发板:
https://pan.baidu.com/s/1bp2ypAfH2HaNPTY2KwEhEA?pwd=1234
下载并安装开发板USB驱动 - 下载 CH341SER.EXE
(USB转串口Windows一键式安装驱动程序),用于驱动小熊派的usb接口以烧入程序:
http://www.wch.cn/search?q=ch340g&t=downloads
下载并安装MobaXterm工具 - 通过SSH登陆上边下载的镜像系统,操作里的内容;通过Serial连接、调试开发板:
https://en.softonic.com/download/moba/windows/post-download
文档里还提到了RaiDrive
工具,用于将虚拟机的目录映射到本地,我平时Linux用的比较多,就没有用这个工具,直接在Ubuntu上操作了。VS Code程序员应该比较熟悉,如果不知道用记事本等文本编辑器也可以代替。
运行Ubuntu镜像
根据文档第三、四、五步完成Ubuntu镜像的运行和连接。第四步里,找到镜像运行的ip后,只要在同网段的电脑都可以连接,不用必须在Ubuntu的宿主机上。第五步我没有做,修改、编译代码直接在Ubuntu上命令行操作了。
获取源码并编译
登陆到Ubuntu上,默认进入 /home/bearpi
目录,如果不是则切换到该目录下。
新建一个存放代码的目录并进入:
mkdir project/bearpi && cd project/bearpi
使用hpm
命令初始化项目:
hpm init -t default
HPM是华为鸿蒙推出的HarmonyOS组件包管理和分发工具,可以方便地根据当前项目需要从官网获取需要的组件,主要面向设备开发,可以获取、定制鸿蒙os的源码,是执行安装、编译、打包、升级等操作的工具集合。
看到 Initialization finished.
字样,初始化完成。
下载项目代码:
hpm i @bearpi/bearpi_hm_nano
一般等待几分钟,屏幕中出现 Installed
,代码下载成功。
编译代码:
hpm dist
看到BUILD SUCCESS
字样,编译完成。第一次编译有点慢,可能需要等待几分钟,以后编译一次大概十几秒。
编译完成的固件为项目根目录下的 out/BearPi-HM_Nano/Hi3861_wifiiot_app_allinone.bin
,该固件可直接烧录到开发板上运行。
固件烧录到开发板
把上边编译好的固件Hi3861_wifiiot_app_allinone.bin
下载到本地,等待烧录到开发板中。
安装开始下载的驱动程序 CH341SER.EXE
。
用TypeC数据线把开发板与电脑连接。连接的时候VMware会询问是否允许连接USB设备,记住不允许!!
打开电脑的设备管理器
,端口
下会显示USB-SERIAL CH340(COM**)
,说明连接成功。*
星号代表端口号,不同电脑可能不一样。
打开开始下载的Hiburn
软件,打开Setting
菜单中的Com settings
,设置Baud
为921600
,然后确定
。
COM选择上边连接成功COM端口号,点击Select file
,选择刚下载的固件Hi3861_wifiiot_app_allinone.bin
,勾选Auto burn
,点击Connect
按钮。
此时Connect
按钮变成Disconnect
,按一下开发板上的RESET
按键,开始烧录。
直到出现 Execution Successful
字样并清除日志窗口,只显示Connecting...
,程序烧录完成,点击Disconnect
按钮断开连接,便于后面调测使用。
查看串口日志
使用串口调试软件或MobaXterm的Serial连接功能,设置波特率(Speed)
为115200
,设置好后按一下开发板上的RESET
按键,即可看到日志信息。
开发板体验
下载的程序包里包含很多示例代码,默认button_example
是运行的,上边烧录完固件后,按一下开发板上F1
按键,LED灯亮起,按一下开发板上F2
按键,LED灯熄灭。
该示例的代码路经为 ./applications/BearPi/BearPi-HM_Nano/sample/B2_basic_button/
,下边为该示例的完整代码:
#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);
GPIO_2
初始化为输出,LED灯在该引脚。GPIO_11
和GPIO_12
两个引脚分别串联在F1和F2键,初始化为输入且为高电平。GpioRegisterIsrFunc()
方法设置了GPIO_11
引脚中断时回调F1_Pressed()
方法,GPIO_12
引脚中断时回调F2_Pressed()
方法,这两个回调方法分别设置GPIO_2
为高电平和低电平,就是设置LED灯的点亮和熄灭。那么当F1键按下时,GPIO_11
接地变为低电平触发中断,回调F1_Pressed()
方法点亮LED。
开发板第一个示例程序
下边开始根据 BearPi-HM_Nano开发板第一个示例程序 完成第一个 Hello World
程序。
在 ./applications/BearPi/BearPi-HM_Nano/sample/
目录下创建目录 FirstApp
,用来存放代码
在FirstApp
目录下创建代码文件hello_world.c
,创建用于将业务构建成静态库的BUILD.gn
文件
hello_world.c
#include <stdio.h>
#include "ohos_init.h"
#include "ohos_types.h"
void HelloWorld(void)
{
printf("++++++++++ Hello man!!!! ++++++++++\n\n");
}
SYS_RUN(HelloWorld);
视频教程 里还把 SYS_RUN()
方法换成了 APP_FEATURE_INIT()
,我也试过,执行成功。
BUILD.gn
static_library("firstapp") {
sources = [
"hello_world.c"
]
include_dirs = [
"//utils/native/liteos/include"
]
}
配置 ./applications/BearPi/BearPi-HM_Nano/sample/BUILD.gn
文件,在 features
字段中增加索引 FirstApp:firstapp
,使目标模块参与编译。
lite_component("app") {
features = [
......
#"D12_iot_cloud_oc_agriculture:cloud_oc_agriculture",
#"D13_iot_cloud_oc_gps:cloud_oc_gps",
"FirstApp:firstapp",
]
}
示例代码编译、烧录、运行、调测后,会显示如下结果: