项目说明
基于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,详细搭建流程参考开发环境准备(https://docs.openharmony.cn/pages/v3.1/zh-cn/device-dev/quick-start/quickstart-ide-lite-env-setup-win-ubuntu.md/)。
第二步,安装编译工具链,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/repochmod a+x /usr/local/bin/repopip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple requests
第二步,获取源码。openharmony 1.0.1版本
mkdir ~/openharmony1.01cd ~/openharmony1.01repo init -u git@gitee.com:openharmony/manifest.git -b openharmony_1.0.1_release --no-repo-verifyrepo sync -crepo 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=yconfig_pwm_support=y//2.修改wifiservice 文件夹 路径:device/hisilicon/hispark_pegasus/hi3861_adapter/hals/communication/wifi_lite/wifiservice/source/wifi_hotspot.cenablehotspot函数中屏蔽如下字段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.c239行 //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 ~/.bashrcexport path=~/.local/bin:$pathsource ~/.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(servoid, 1); hi_udelay(angle); //angle ms gpiosetoutputval(servoid, 0); hi_udelay(20000-angle);// }//20ms 控制舵机 }
第二步,添加初始化gpio 10的语句
#define servo_1_gpio 10int 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;}
第四步,编译、下载
参考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都是台灯的,虽然这个可以在数字管家修改图标,但本质还是没有变化,本教程目的在于记录数字管家碰一碰的开发入门,为后期再添加自己的解决方案、服务器作为参考。
西门子推出Tessent Multi-die软件解决方案 满足多维设计的需求
哥伦比亚大学开发便携式DNA装置,可快速检测有害生物和病原体
共筑安全堡垒!一大波安全课程与研讨会精彩来袭
音频处理器的作用是什么
2022年中国电力储能锂电池企业出货量TOP10
如何在OpenHarmony开源代码基础上实现数字管家开发宿舍全屋智能
苹果抛弃高通选择因特尔基带是否正确?
智能温室大棚控制系统组成部分
价格便宜耐用的充电宝有哪些?2021年学生党充电宝推荐
直接扩频通信同步系统的xilinx FPGA设计原理分析
为防止ADAS滥用,欧洲启动自动驾驶监管
华为称2018年开通5G_2020年正式商用
当贝D3X和极米Z6X值不值得买,选哪款家用投影仪比较的好?
如何使用PADS导出带坐标的PCB BOM表?
机器视觉之ICP算法和RANSAC算法
工业互联网迎来“价值共识”时刻
区块链公司Blockstream推出了卫星服务Satellite API的beta测试版
资本蜂涌,产业势头迅猛, 传感器势为风口?
Mouser供货NXP PN7120 NFC控制器 为物联网应用开发加速
拆解智能翻译机