9

宿舍全屋智能开发指南

 2 years ago
source link: https://os.51cto.com/article/704679.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

23f65b246d23a865efe36507dca2258d75c77d.png

​想了解更多内容,请访问:​

​51CTO和华为官方合作共建的鸿蒙技术社区​

​https://ost.51cto.com​

一、项目说明

基于OpenHarmony、数字管家开发宿舍全屋智能,实现碰一碰开门、碰一碰开灯、碰一碰开风扇以及烟感检测。因为各项目开发流程大体相似,本文主要以碰一碰开门为例介绍如何在现有OpenHarmony开源代码的基础上实现我们想要的功能。

需要准备材料下:

  • 搭载HarmonyOS系统的手机一台,API 6+;
  • 搭载Hi3861模组的主板,不限于HiSpark、小熊派套件;
  • 7.4V电池、一个舵机、若干导线。

最终的碰一碰开门、开灯、风扇体验如下/或视频链接:

b113c7061066ef59a006152b93cf04d90bdea2.gif546c2d713d12b01ed764535be2204c4e57b67b.gif

f4ca55080168fbf11a67163f771ee53bc751e8.gif

项目主要开发流程如下图,主要包含设备端、数字管家搭建开发环境、下载源码、修改编译、下载验证四个部分。

296838223871a3905a3711e25e9462a329b049.png

开发环境搭建主要分为设备端环境、数字管家两部分。设备端使用DevEco Device Tools最新版本,在ubuntu平台开发,在本项目中使用该工具编辑源码、下载二进制文件;数字管家使用DevEco Studio Beta3.1及以上版本,在windows平台开发。

二、搭建设备端开发

1、 DevEco Device Tools搭建

第一步,在Ubuntu20.04系统搭建设备端开发环境,支持源码编辑、编译、下载一站式开发。在Ubuntu系统搭建DevEco Device Tools,官网已经有详细的搭建流程,参考开发环境准备。

第二步,安装编译工具链,Hi3861V100开发板Ubuntu环境工具链下载链接gn、ninja、gcc_riscv32

f9c1b3f1349b429d0aa3907181934b435dee62.png

其余参考工具链管理。添加工具后如下图:

d524d356050b6251a624827565f11ae7d27ab2.png

2、Ubuntu环境编译工具准备

#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

3、 设备端源码下载

第一步,码云工具安装。

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

第二步,获取源码。openharmony1.0.1版本。

mkdir ~/OpenHarmony1.01
cd ~/OpenHarmony1.01
repo init -u [email protected]: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 版本编译。在openHarmony1.0.1源码根目录下,执行:

pip3 install build/lite
//添加环境变量
vim ~/.bashrc
export PATH=~/.local/bin:$PATH
source ~/.bashrc
然后执行
hb -h

返回一下信息说明正确安装:

e85186319ddfec2e8ca385b98305a759aa7d42.png

第五步,打开工程,编译源码。

打开VS code下的DevEco Device Tools,导入1.0.1工程选择对应的开发板即可。

打开终端,cd到源码路径,执行hb set,选择smart_lamp,然后执行hb build 编译。

423629a16218c6f6a23900fc290cbb82a33fa2.png

在~/openharmony1.01/out/bearpi_hm_nano/smart_lamp下生成Hi3861_wifiiot_app_allinone.bin说明一切操作正常。如果遇到uninstall clang、not found gn、 ninja等问题,需要配置环境变量,还要检测ohos-build是不是0.2.0版本。具体可以参考个人总结的如下措施:

250a77c3781cfcc90e23929668e27eed72e66b.png

第六步,烧录二进制文件。

连接开发板到usb,在devco Device tools点击配置工程,设置串口号,具体如下图:

97f9d20158fd5889ac8546d6bc0ea79152e800.png

然后将第五步生成的Hi3861_wifiiot_app_allinone.bin拷贝到~/openharmony1.01/out/hispark_pegasus/wifiiot_hispark_pegasus下【因为工具默认下载该路径下的bin文件】。

点击Project Task下的upload,按下板子上的复位即可烧录。

e4e8db27583bd85dd01159d82ab4a4f8a3ab69.png

4、 设备端修改编译

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;
}

第四步,编译、下载。

参考3节第五步、第六步,直接编译即可无需再次导入工程。因为我使用的是ubuntu物理机器,为实现一站式开发特地安装DevEco Device tools,OpenHarmony2.0、3.0版本完全可以脱离hb工具编译。

烧录完成后,按下板子复位键,手机可以发现模组发出的Wifi信号teamX-Lamp01。

三、数字管家安装

1、 DevEco Studio 安装

第一步,DevEco Studio下载安装,直接安装即可,安装完成后要配置Windows环境变量。

第二步,打开DevEco Studio设置下的SDK Manger,安装SDK(API6) 红框中的都需要下载。

值得注意的是第一步安装Studio时会下载OpenHarmony SDK,第二步的SDK不一样,不能在同一个路径下,否则会被替换掉原有的。

853e0ae69dd6161986357373ab5c833b95377e.png

2、数字管家APP源码获取

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

e88bdd7703ed6358bde959b86ce2566b3d08cf.png

使用DevEco Studio打开数字管家,路径如下:

872c84e23ec029a646b9616c65cfa4c8ec7894.png

630699002583cc93bfe715608edec544f44cb3.png

3、 数字管家APP安装

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

c7e2eac479f7d25a9972986e73205eb432283f.png

第二步,进入AGC平台AGC(AppGallery Connect)。

地址:https://developer.huawei.com/consumer/cn/service/josp/agc/index.html#/。

d8276b192ae4770ec471781ccf8c84191d1342.png

第三步,在AGC平台创建项目,然后创建应用。

618714a44ac7e46e68e5765838844f5117e6bb.png

f5b55e0326be3c0348169690dd7bb7157764c9.png

a228aa355a82e97720e699a05411356d5e5bba.png

得到如图配置:

134f346998fba1e6f6b425440d42da287e59ec.png

第四步,回到上一节DevEco Studio 打开的工程,修改三个地方,具体路径如下:

./entry/src/config.json
./netconfig/src/main/config.json
./netconfig/src/main/js/default/pages/index/index.js

8167693680114811e003530a772a41e559ad83.png55757856999c5e09ba5171b57d745409619365.png26ed1be19299eb1f11038101d7daecb8bfae1c.png

第五步,自动签名。

首先把自己的手机连接到电脑上,打开开发人员选项–> 开启USB调试–>同意调试。

然后打开DevEco Studio的file–Projet Structure–Project–Signing Configs–automatically generating singing 如下图:

c9ed4f408cce2eef1a796040ca9f11184bf85d.png

第六步,编译下载。

点开entry ,进入debug configuration,在entry下勾选deploy multi haps packages,确认后退出。因为数字管家包含entry、netconfig两个module,要同时安装。

66b2f3f50ddeb2ff52409456133696b757d413.png

49a8655422e4c010119604bb74dbc31ce46cf1.png

第七步,安装数字管家APP。

点击运行,稍等片刻手机上即可出现数字管家APP,输入手机号,登录即可。

如果遇到问题,可以查看该链接:DevEco Studio常见错误。

四、配置NFC标签

1、 申请product ID

将搭载鸿蒙系统的手机,登录你的华为账号,并在华为应用市场中下载安装应用应用调测助手。

打开选择NFC,申请即可。

244910491057edfedcb425eb9edfe75462c9fb.jpg

2、注册服务

第一步,登陆华为开发者联盟https://developer.huawei.com/consumer/cn/,点击管理中心,创建原子化服务。

b1e3ebd58cc0eb05b332520a25cd2c8873fd30.png

23739bd22b70fe55c03778f2ba732a5bd88ded.png

第二步,按照提示填写即可,在标签配置页面,填写在应用调测助手申请的Product ID 型号00。

c347bef19ce2e02141079761808d5ff84f62e1.png

在FA配置页面,一定要查看第2.3节第四步自己写的包名,模块名就是entry,添加设备就是com.example.distschedule.AddDeviceAbility:

525757523bce1561014055775402827b733b96.png

第三步,创建测试,填写华为账号对应的手机号即可。

77cbcd68867bbcc4fce563fe76d7f9722d0c08.png

3、写入标签

打开应用调测助手,选择之前申请的ID,在自定义框填入如下数据:

1246128c7b60ad1ed0286680f19206Lamp01308123456784011512teamX-Lamp01

38c107525ba9787e84c837866b81ea6378ab30.jpg

更多设备NFC标签。

五、具体实操

开门需要一个简单的装置,之前有设计,参考hi3861 web端开门。 0947f0196bdf989a32b7843664d93aef3abf1b.jpg

电路简单,将7.4v电源经过降压稳压后分别给模组、舵机供电。

66d9432170f363476e9183602707d08450edf2.png

手机连上wifi,打开NFC开关,碰一下标签即可唤起原子化界面(不能使用校园网,会导致设备无法连接)测试效果如下图:

b8abd1292c0b8bb129e2892c72bc898e26d039.gif

66885d690c3642b2b7963937bf92fde868f8f4.gif

hb set时需要编译smart_fan,同样的下载源码后,写入NFC标签。

1246150601d88056b027dd2ca47205Fan01308123456784011511teamX-Fan01

手上的风扇的驱动电路如下图,PWM 控制风速:

5935659162674dac9f6909b41b521667daee09.png

需要一个电磁继电器、5V充电头,可以同时为模组和台灯供电(并联)。

在台灯源码中初始化GPIO 9为输出,将继电器的信号端与GPIO 9 相连即可。

开灯时,接通继电器的NC-COM端,断开NO-COM。

045553f510035b1129f49497869a7cfa60001a.png

39df7f667753a88ae5985626835fed509e76bc.jpg

去年立下的Flag,NFC开门已经实现。

不过以上案例实质上还使用现有的解决方案、数字管家的服务器实现,甚至连开门的操作UI都是台灯的,虽然这个可以在数字管家修改图标,但本质还是没有变化,本教程目的在于记录数字管家碰一碰的开发入门,为后期再添加自己的解决方案、服务器作为参考。

​想了解更多内容,请访问:​

​51CTO和华为官方合作共建的鸿蒙技术社区​

​https://ost.51cto.com​

71eea7105a1cf9982d2996c42d853b97bd50ef.jpg


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK