因为各项目开发流程大体相似,本文主要以碰一碰开门为例介绍如何在现有 OpenHarmony 开源代码的基础上实现我们想要的功能。
需要准备材料下:搭载 HarmonyOS 系统的手机一台,API 6+
搭载 Hi3861 模组的主板,不限于 HiSpark、小熊派套件
7.4V 电池、一个舵机、若干导线
最终的碰一碰开门、开灯、风扇体验如下:
开发流程
项目主要开发流程如下图,主要包含设备端、数字管家搭建开发环境、下载源码、修改编译、下载验证四个部分。
开发环境搭建主要分为设备端环境、数字管家两部分。设备端使用 DevEco Device Tools 最新版本,在 ubuntu 平台开发,在本项目中使用该工具编辑源码、下载二进制文件;数字管家使用 DevEco Studio Beta3.1 及以上版本,在 windows 平台开发。
在 Ubuntu 系统搭建 DevEco Device Tools,官网已经有详细的搭建流程,参考开发环境准备:
https://device.harmonyos.com/cn/docs/documentation/guide/quickstart-lite-env-prepare-0000001193328250
第二步,安装编译工具链,Hi3861V100 开发板 Ubuntu 环境工具链下载链接 gn、ninja、gcc_riscv32。
其余参考工具链管理:
https://device.harmonyos.com/cn/docs/documentation/guide/tools_management-0000001141455367
添加工具后如下图:
#1.基础依赖
sudo apt-get install -y build-essential gcc g++ make zlib* libffi-dev
#scons
python3 -m pip install scons
#查看版本,3.0.4以上
scons -v
#2.安装python模块
sudo pip3 install setuptools kconfiglib pycryptodome ecdsa six --upgrade --ignore-installed six
#3.添加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
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/
//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);
pip3 install build/lite
//添加环境变量
vim ~/.bashrc
export PATH=~/.local/bin:$PATH
source ~/.bashrc
然后执行
hb -h
返回一下信息说明正确安装:
打开终端,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 版本。
具体可以参考个人总结的如下措施:
然后将第五步生成的 Hi3861_wifiiot_app_allinone.bin 拷贝到 ~/openharmony1.01/out/hispark_pegasus/wifiiot_hispark_pegasus 下(因为工具默认下载该路径下的 bin 文件)。
点击 Project Task 下的 upload,按下板子上的复位即可烧录。
具体操作如下:
打开操作 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(servoID, 1);
hi_udelay(angle); //angle ms
GpioSetOutputVal(servoID, 0);
hi_udelay(20000-angle);//
}//20ms 控制舵机
}
#define SERVO_1_GPIO 10
int E53SC1_InitMainLed(void)
{
IoTGpioInit(CN_MAIN_LED_GPIO);
IoTGpioSetFunc(CN_MAIN_LED_GPIO, CN_MAIN_LED_GPIO_FUNC);
IoTGpioSetDir(CN_MAIN_LED_GPIO, IOT_GPIO_DIR_OUT);
IoTPwmInit(CN_MAIN_LED_PWDOUT);
IoTGpioInit(SERVO_1_GPIO);
IoTGpioSetFunc(SERVO_1_GPIO, IOT_GPIO_FUNC_GPIO_10_GPIO);
IoTGpioSetDir(SERVO_1_GPIO, IOT_GPIO_DIR_OUT);
return 0;
}
int E53SC1_SetMainLed(int status, int dutyCycle)
{
int ret = 0;
if (status == CN_BOARD_SWITCH_ON) {
ret = IoTPwmStart(CN_MAIN_LED_PWDOUT, dutyCycle, CN_MAIN_LED_FRE);
My_servo(1000); //开门
} else {
ret = IoTPwmStop(CN_MAIN_LED_PWDOUT);
My_servo(10000); //上锁
}
RaiseLog(LOG_LEVEL_INFO, "status=%d, dutyCycle=%d, ret = %d", status, dutyCycle, ret);
return 0;
}
第一步,DevEco Studio下载安装,直接安装即可,安装完成后要配置 Windows 环境变量。
https://developer.harmonyos.com/cn/docs/documentation/doc-guides/software_install-0000001053582415
https://developer.harmonyos.com/cn/docs/documentation/doc-guides/environment_config-0000001052902427
第二步,打开 DevEco Studio 设置下的 SDK Manger,安装 SDK(API6) 红框中的都需要下载。
值得注意的是第一步安装 Studio 时会下载 OpenHarmony SDK,第二步的 SDK 不一样,不能在同一个路径下,否则会被替换掉原有的。
数字管家在 windows 平台编译安装到手机上,下载链接为:
https://gitee.com/openharmony-sig/knowledge_demo_smart_home
下载后解压在非中文路径下即可。
使用 DevEco Studio 打开数字管家,路径如下:
地址:
https://developer.huawei.com/consumer/cn/service/josp/agc/index.html#/
得到如图配置:
./entry/src/config.json
./netconfig/src/main/config.json
./netconfig/src/main/js/default/pages/index/index.js
然后打开 DevEco Studio 的 file–Projet Structure–Project–Signing Configs–automatically generating singing。
如下图:
点开 entry,进入 debug configuration,在 entry 下勾选 deploy multi haps packages,确认后退出。因为数字管家包含 entry、netconfig 两个 module,要同时安装。
如果遇到问题,可以查看该链接:DevEco Studio 常见错误
https://developer.huawei.com/consumer/cn/forum/topic/0202519812104750498?fid=26
打开选择 NFC,申请即可。
https://developer.huawei.com/consumer/cn/
第二步,按照提示填写即可,在标签配置页面,填写在应用调测助手申请的 Product ID 型号 00。
在 FA 配置页面,一定要查看第 2.3 节第四步自己写的包名,模块名就是 entry,添加设备就是 com.example.distschedule.AddDeviceAbility:
第三步,创建测试,填写华为账号对应的手机号即可。
1246128c7b60ad1ed0286680f19206Lamp01308123456784011512teamX-Lamp01
更多设备 NFC 标签:
https://gitee.com/openharmony-sig/knowledge_demo_smart_home/blob/master/dev/docs/NFC_label_definition/more_nfc_netconfig_info.md
https://ost.51cto.com/posts/9822
电路简单,将 7.4v 电源经过降压稳压后分别给模组、舵机供电。
手机连上 wifi,打开 NFC 开关,碰一下标签即可唤起原子化界面(不能使用校园网,会导致设备无法连接)测试效果如下图:
1246150601d88056b027dd2ca47205Fan01308123456784011511teamX-Fan01
手上的风扇的驱动电路如下图,PWM 控制风速:
在台灯源码中初始化 GPIO 9 为输出,将继电器的信号端与 GPIO 9 相连即可。开灯时,接通继电器的 NC-COM 端,断开 NO-COM。
结语
本教程目的在于记录数字管家碰一碰的开发入门,为后期再添加自己的解决方案、服务器作为参考。
原文标题:基于OpenHarmony开发宿舍全屋智能
文章出处:【微信公众号:HarmonyOS技术社区】欢迎添加关注!文章转载请注明出处。
全部0条评论
快来发表一下你的评论吧 !