关于openharmony:宿舍全屋智能开发指南

35次阅读

共计 6614 个字符,预计需要花费 17 分钟才能阅读完成。

我的项目阐明

基于 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/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(servoID, 1);        
           hi_udelay(angle); //angle ms     
           GpioSetOutputVal(servoID, 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_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…

正文完
 0