我的项目阐明

基于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/p...)。
第二步,装置编译工具链,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/p...)。第二步,关上DevEco Studio设置下的SDK Manager,装置SDK(API6)红框中的都须要下载。值得注意的是第一步装置Studio时会下载OpenHarmony SDK,第二步的SDK不一样,不能在同一个门路下,否则会被替换掉原有的。

数字管家APP源码获取

数字管家在windows平台编译装置到手机上,下载链接为:https://gitee.com/openharmony...下载后解压在非中文门路下即可。

应用DevEco Studio关上数字管家,门路如下:

数字管家APP装置

第一步,点击右上角个人头像,登录

第二步,进入AGC平台AGC(AppGallery Connect) 地址:https://developer.huawei.com/... 

第三步,在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/...,点击管理中心,创立原子化服务。

第二步,依照提醒填写即可,在标签配置页面,填写在利用调测助手申请的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都是台灯的,尽管这个能够在数字管家批改图标,但实质还是没有变动,本教程目标在于记录数字管家碰一碰的开发入门,为前期再增加本人的解决方案、服务器作为参考。学习参考链接:

设施开发根底课程
https://www.openharmony.cn/co...
利用开发系类课程
https://www.openharmony.cn/co...
数字管家疾速入门
https://gitee.com/openharmony...