项目说明
基于OpenAtom OpenHarmony(以下简称“OpenHarmony”)、数字管家开发宿舍全屋智能,实现碰一碰开门、碰一碰开灯、碰一碰开风扇以及烟感检测。因为各项目开发流程大体相似,本文主要以碰一碰开门为例介绍如何在现有OpenHarmony开源代码的基础上实现我们想要的功能。
需要提前准备的设备:搭载HarmonyOS系统的手机一台,API 6+;搭载Hi3861模组的主板,不限于HiSpark、小熊派套件;7.4V电池、一个舵机、若干导线。最终的碰一碰开门、开灯、风扇效果如下:
智能台灯与风扇(包括门锁)、数字管家应用、云平台三部分数据流如下图所示。数字管家应用下发风速、亮度调节等设备控制指令到云平台,云平台发送到指定设备,同时风扇、台灯等设备上报当前状态到云平台,云平台再发送至数字管家应用,实现用户可视化操作,实时控制智能设备。
开发流程
项目主要包含:①搭建设备端开发环境、②数字管家安装、③配置NFC标签、④实操验证,共四个部分。开发过程中各关键环节如下图,整体思路是准备软硬件环境,编写业务代码,烧录测试,若开发时遇到问题可参考该图进行排查。
开发环境搭建主要分为设备端环境、数字管家两部分。设备端使用DevEco Device Tools最新版本,在ubuntu平台开发,在本项目中使用该工具编辑源码、下载二进制文件;数字管家使用DevEco Studio Beta3.1及以上版本,在windows平台开发。
搭建设备端开发环境
DevEco Device Tools搭建
第一步,在Ubuntu20.04系统搭建设备端开发环境,支持源码编辑、编译、下载一站式开发。在Ubuntu系统搭建DevEco Device Tools。
第二步,安装编译工具链,Hi3861V100开发板Ubuntu环境工具链下载链接gn、ninja、gcc_riscv32。
其余参考工具链管理。添加工具后如下图:
Ubuntu环境编译工具准备
// A.基础依赖 sudo apt-get install -y build-essential gcc g++ make zlib* libffi-dev // -安装 scons python3 -m pip install scons // -查看版本,3.0.4以上 scons -v // B.安装python模块 sudo pip3 install setuptools kconfiglib pycryptodome ecdsa six --upgrade --ignore-installed six// C.添加gcc_riscv32(WLAN模组类编译工具链) 在安装DevEco Device Tools时已经下载 // -解压到根目录 tar -xvf gcc_riscv32-linux-7.3.0.tar.gz -C ~ // -添加环境变量 vim ~/.bashrc // -最后一行加入:export PATH=~/gcc_riscv32/bin:$PATH // -确认安装是否正常,有返回版本号即可。riscv32-unknown-elf-gcc -v
设备端源码下载
第一步,码云工具安装
cd ~
curl https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > /usr/local/bin/repo
chmod a+x /usr/local/bin/repo
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple requests
第二步,获取源码。OpenHarmony 1.0.1版本
mkdir ~/OpenHarmony1.01
cd ~/OpenHarmony1.01
repo init -u git@gitee.com:openharmony/manifest.git -b OpenHarmony_1.0.1_release --no-repo-verify
repo sync -c
repo forall -c 'git lfs pull'
获取相关产品解决方案,并复制到源码中,具体操作如下:
//下载产品解决方案到ubuntu,解压在非中文路径下即可。下载链接为:
https://gitee.com/openharmony-sig/knowledge_demo_smart_home
//拷贝解决方案
cp -rfa ~/knowledge_demo_smart_home/dev/device/bearpi ~/OpenHarmony1.01/device/
cp -rfa ~/knowledge_demo_smart_home/dev/team_x ~/OpenHarmony1.01/vendor/
cp -rfa ~/knowledge_demo_smart_home/dev/third_party/iot_link ~/OpenHarmony1.01/third_party/
第三步(可选,若使用HiSpark套件需要修改)
//1.修改usr_config.mk 文件
路径:device/hisilicon/hispark_pegasus/sdk_liteos/build/config/usr_config.mk
使能如下配置项
CONFIG_I2C_SUPPORT=y
CONFIG_PWM_SUPPORT=y
//2.修改wifiservice 文件夹
路径:device/hisilicon/hispark_pegasus/hi3861_adapter/hals/communication/wifi_lite/wifiservice/source/wifi_hotspot.c
EnableHotspot函数中屏蔽如下字段
139行 //if (SetHotspotIpConfig() != WIFI_SUCCESS) {
140行 // return ERROR_WIFI_UNKNOWN;
141行 //}
//3.DispatchConnectEvent函数下 屏蔽StaSetWifiNetConfig相关代码行
路径:device/hisilicon/hispark_pegasus/hi3861_adapter/hals/communication/wifi_lite/wifiservice/source/wifi_device.c
239行 //StaSetWifiNetConfig(HI_WIFI_EVT_CONNECTED);
260行 //StaSetWifiNetConfig(HI_WIFI_EVT_DISCONNECTED);
第四步,安装ohos-build工具
需要使用ohos-build 0.2.0 版本编译。在OpenHarmony 1.0.1源码根目录下,执行:
pip3 install build/lite
// 添加环境变量
vim ~/.bashrc
export PATH=~/.local/bin:$PATH
source ~/.bashrc
// 然后执行
hb -h
返回一下信息说明正确安装:
第五步,打开工程
打开Visual Studio Code下的DevEco Device Tools,导入1.0.1工程选择对应的开发板即可。打开终端,cd到源码路径,执行hb set,选择smart_lamp,然后执行hb build 编译。
在~/openharmony1.01/out/bearpi_hm_nano/smart_lamp下生成Hi3861_wifiiot_app_allinone.bin说明一切操作正常。如果遇到uninstall clang、not found gn、ninja等问题,需要配置环境变量,还要检测ohos-build是不是0.2.0版本。具体可以参考个人总结的如下措施:
第六步,烧录二进制文件连接开发板到电脑USB,在DevEco Device Tools点击配置工程,设置串口号,具体如下图:
然后将第五步生成的Hi3861_wifiiot_app_allinone.bin拷贝到~/openharmony1.01/out/hispark_pegasus/wifiiot_hispark_pegasus下【因为工具默认下载该路径下的bin文件】 点击Project Task下的upload,按下板子上的复位即可烧录。
设备端编译
1.3节中只是把开源代码布置到我们的笔记本中,要实现开门需要添加自己的业务代码。例如门锁需要使用到舵机,我在smart_lamp解决方案的基础上进行修改。具体操作如下:
第一步,添加舵机控制
打开操作GPIO的vendor/team_x/smart_lamp/demo_smartlamp/E53_SC1/E53_SC1.c文件添加如下函数:
/* @brief Servo control *
@param angle input value: 0-200 *
*/
void My_servo(int angle)
{
int j=0;
int k=20000/200; //实际应该是20000/180
angle = k*angle;
for (j=0;j<5;j++)
{
GpioSetOutputVal(servoIDundefined 1);
hi_udelay(angle); //angle ms
GpioSetOutputVal(servoIDundefined 0);
hi_udelay(20000-angle);//
}//20ms 控制舵机
第二步,添加初始化GPIO 10的语句
#define SERVO_1_GPIO 10
int E53SC1_InitMainLed(void)
{
IoTGpioInit(CN_MAIN_LED_GPIO);
IoTGpioSetFunc(CN_MAIN_LED_GPIOundefined CN_MAIN_LED_GPIO_FUNC);
IoTGpioSetDir(CN_MAIN_LED_GPIOundefined IOT_GPIO_DIR_OUT);
IoTPwmInit(CN_MAIN_LED_PWDOUT);
IoTGpioInit(SERVO_1_GPIO);
IoTGpioSetFunc(SERVO_1_GPIOundefined IOT_GPIO_FUNC_GPIO_10_GPIO);
IoTGpioSetDir(SERVO_1_GPIOundefined IOT_GPIO_DIR_OUT);
return 0;
}
第三步,添加业务代码
int E53SC1_SetMainLed(int statusundefined int dutyCycle)
{
int ret = 0;
if (status == CN_BOARD_SWITCH_ON) {
ret = IoTPwmStart(CN_MAIN_LED_PWDOUTundefined dutyCycleundefined CN_MAIN_LED_FRE);
My_servo(1000); //开门
} else {
ret = IoTPwmStop(CN_MAIN_LED_PWDOUT);
My_servo(10000); //上锁
}
RaiseLog(LOG_LEVEL_INFOundefined "status=%dundefined dutyCycle=%dundefined ret = %d"undefined statusundefined dutyCycleundefined ret);
return 0;
}
第四步,编译、下载
参考1.3节第五步、第六步,直接编译即可无需再次导入工程。因为我使用的是ubuntu物理机器,为实现一站式开发特地安装DevEco Device tools,OpenHarmony 2.0、3.0版本完全可以脱离hb工具编译。烧录完成后,按下板子复位键,手机可以发现模组发出的WIFI信号teamX-Lamp01。
数字管家安装
DevEco Studio 安装
第一步,DevEco Studio下载安装,安装完成后要配置Windows环境变量(参考:https://docs.openharmony.cn/pages/v3.1/zh-cn/application-dev/quick-start/start-overview.md/)。第二步,打开DevEco Studio设置下的SDK Manager,安装SDK(API6)红框中的都需要下载。值得注意的是第一步安装Studio时会下载OpenHarmony SDK,第二步的SDK不一样,不能在同一个路径下,否则会被替换掉原有的。
数字管家APP源码获取
数字管家在windows平台编译安装到手机上,下载链接为:https://gitee.com/openharmony-sig/knowledge_demo_smart_home下载后解压在非中文路径下即可。
使用DevEco Studio打开数字管家,路径如下:
数字管家APP安装
第一步,点击右上角个人头像,登录
第二步,进入AGC平台AGC(AppGallery Connect) 地址:https://developer.huawei.com/consumer/cn/service/josp/agc/index.html#/
第三步,在AGC平台创建项目,然后创建应用
第四步,回到上一节DevEco Studio 打开的工程,修改三个地方,具体路径如下:
./entry/src/config.json
./netconfig/src/main/config.json
./netconfig/src/main/js/default/pages/index/index.js
第五步,自动签名。
首先把自己的手机连接到电脑上,打开开发人员选项–> 开启USB调试–>同意调试 然后打开DevEco Studio的file–Project Structure–Project–Signing Configs–automatically generate signing 如下图:
第六步,编译下载。
点开entry,进入debug configuration,在entry下勾选deploy multi haps packages,确认后退出。因为数字管家包含entry、netconfig两个module,要同时安装。
第七步,安装数字管家APP 点击运行,稍等片刻手机上即可出现数字管家APP,输入手机号,登录即可。
配置NFC标签
申请product ID
将搭载HarmonyOS的手机,登录你的华为账号,并在华为应用市场中下载安装应用调测助手打开选择NFC,申请即可。
注册服务
第一步,登陆华为开发者联盟https://developer.huawei.com/consumer/cn/,点击管理中心,创建原子化服务。
第二步,按照提示填写即可,在标签配置页面,填写在应用调测助手申请的Product ID 型号00。在FA配置页面,一定要查看第2.3节第四步自己写的包名,模块名就是entry,添加设备就是com.example.distschedule.AddDeviceAbility:
第三步,创建测试,填写华为账号对应的手机号即可
写入标签
打开应用调测助手,选择之前申请的ID,在自定义框填入如下数据:
1246128c7b60ad1ed0286680f19206Lamp01308123456784011512teamX-Lamp01
更多设备NFC标签
实操验证
门锁
开门需要一个简单的装置,之前有设计,参考hi3861 web端开门。
电路简单,将7.4v电源经过降压稳压后分别给模组、舵机供电。
手机连上wifi,打开NFC开关,碰一下标签即可唤起原子化界面(不能使用校园网,会导致设备无法连接)测试效果如下图:
小风扇
hb set时需要编译smart_fan,同样的下载源码后,写入NFC标签
1246150601d88056b027dd2ca47205Fan01308123456784011511teamX-Fan01
手上的风扇的驱动电路如下图,PWM控制风速:
台灯
首先需要一个电磁继电器、5V充电头,可以同时为模组和台灯供电(并联)。在台灯源码中初始化GPIO 9为输出,将继电器的信号端与GPIO 9 相连即可。开灯时,接通继电器的NC-COM端,断开NO-COM。
结语
以上案例实质上还是在使用现有的解决方案、数字管家的服务器实现,甚至连开门的操作UI都是台灯的,虽然这个可以在数字管家修改图标,但本质还是没有变化,本教程目的在于记录数字管家碰一碰的开发入门,为后期再添加自己的解决方案、服务器作为参考。
经常有很多小伙伴抱怨说:不知道学习鸿蒙开发哪些技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?
为了能够帮助到大家能够有规划的学习,这里特别整理了一套纯血版鸿蒙(HarmonyOS Next)全栈开发技术的学习路线,包含了鸿蒙开发必掌握的核心知识要点,内容有(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、WebGL、元服务、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、OpenHarmony驱动开发、系统定制移植等等)鸿蒙(HarmonyOS NEXT)技术知识点。
《鸿蒙 (Harmony OS)开发学习手册》(共计892页)
如何快速入门?
1.基本概念
2.构建第一个ArkTS应用
3.……
开发基础知识:
1.应用基础知识
2.配置文件
3.应用数据管理
4.应用安全管理
5.应用隐私保护
6.三方应用调用管控机制
7.资源分类与访问
8.学习ArkTS语言
9.……
基于ArkTS 开发
1.Ability开发
2.UI开发
3.公共事件与通知
4.窗口管理
5.媒体
6.安全
7.网络与链接
8.电话服务
9.数据管理
10.后台任务(Background Task)管理
11.设备管理
12.设备使用信息统计
13.DFX
14.国际化开发
15.折叠屏系列
16.……
鸿蒙开发面试真题(含参考答案)
OpenHarmony 开发环境搭建
《OpenHarmony源码解析》
- 搭建开发环境
- Windows 开发环境的搭建
- Ubuntu 开发环境搭建
- Linux 与 Windows 之间的文件共享
- ……
- 系统架构分析
- 构建子系统
- 启动流程
- 子系统
- 分布式任务调度子系统
- 分布式通信子系统
- 驱动子系统
- ……
OpenHarmony 设备开发学习手册