宿舍全屋智能开发指南 原创 精华

发布于 2022-3-23 10:23
浏览
12收藏

宿舍全屋智能开发指南

@toc

0. 项目说明

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

  • 搭载HarmonyOS系统的手机一台,API 6+;
  • 搭载Hi3861模组的主板,不限于HiSpark、小熊派套件;
  • 7.4V电池、一个舵机、若干导线。
    最终的碰一碰开门、开灯、风扇体验如下/或视频链接

宿舍全屋智能开发指南-开源基础软件社区宿舍全屋智能开发指南-开源基础软件社区宿舍全屋智能开发指南-开源基础软件社区

开发流程

项目主要开发流程如下图,主要包含设备端、数字管家搭建开发环境、下载源码、修改编译、下载验证四个部分。
宿舍全屋智能开发指南-开源基础软件社区
开发环境搭建主要分为设备端环境、数字管家两部分。设备端使用DevEco Device Tools最新版本,在ubuntu平台开发,在本项目中使用该工具编辑源码、下载二进制文件;数字管家使用DevEco Studio Beta3.1及以上版本,在windows平台开发。

1.搭建设备端开发

1.1 DevEco Device Tools搭建

第一步,在Ubuntu20.04系统搭建设备端开发环境,支持源码编辑、编译、下载一站式开发。在Ubuntu系统搭建DevEco Device Tools,官网已经有详细的搭建流程,参考开发环境准备
第二步,安装编译工具链,Hi3861V100开发板Ubuntu环境工具链下载链接gnninjagcc_riscv32
宿舍全屋智能开发指南-开源基础软件社区
其余参考工具链管理。添加工具后如下图:
宿舍全屋智能开发指南-开源基础软件社区

1.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

1.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 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 版本编译。在openHarmony1.0.1源码根目录下,执行:

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

返回一下信息说明正确安装:
宿舍全屋智能开发指南-开源基础软件社区

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

打开VS 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,在devco Device tools点击配置工程,设置串口号,具体如下图:
宿舍全屋智能开发指南-开源基础软件社区
然后将第五步生成的Hi3861_wifiiot_app_allinone.bin拷贝到~/openharmony1.01/out/hispark_pegasus/wifiiot_hispark_pegasus下【因为工具默认下载该路径下的bin文件】
点击Project Task下的upload,按下板子上的复位即可烧录。
宿舍全屋智能开发指南-开源基础软件社区

1.4 设备端修改编译

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,OpenHarmony2.0、3.0版本完全可以脱离hb工具编译。
烧录完成后,按下板子复位键,手机可以发现模组发出的Wifi信号teamX-Lamp01

2.数字管家安装

2.1 DevEco Studio 安装

第一步,DevEco Studio下载安装,直接安装即可,安装完成后要配置Windows环境变量
第二步,打开DevEco Studio设置下的SDK Manger,安装SDK(API6) 红框中的都需要下载。
值得注意的是第一步安装Studio时会下载OpenHarmony SDK,第二步的SDK不一样,不能在同一个路径下,否则会被替换掉原有的。
宿舍全屋智能开发指南-开源基础软件社区

2.2 数字管家APP源码获取

数字管家在windows平台编译安装到手机上,下载链接为:https://gitee.com/openharmony-sig/knowledge_demo_smart_home 下载后解压在非中文路径下即可。
宿舍全屋智能开发指南-开源基础软件社区

使用DevEco Studio打开数字管家,路径如下:
宿舍全屋智能开发指南-开源基础软件社区
宿舍全屋智能开发指南-开源基础软件社区

2.3 数字管家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–Projet Structure–Project–Signing Configs–automatically generating singing 如下图
宿舍全屋智能开发指南-开源基础软件社区

第六步,编译下载。

点开entry ,进入debug configuration,在entry下勾选deploy multi haps packages,确认后退出。因为数字管家包含entry、netconfig两个module,要同时安装。
宿舍全屋智能开发指南-开源基础软件社区
宿舍全屋智能开发指南-开源基础软件社区

第七步,安装数字管家APP

点击运行,稍等片刻手机上即可出现数字管家APP,输入手机号,登录即可。
如果遇到问题,可以查看该链接:DevEco Studio常见错误

3.配置NFC标签

3.1 申请product ID

将搭载鸿蒙系统的手机,登录你的华为账号,并在华为应用市场中下载安装应用应用调测助手
打开选择NFC,申请即可。
宿舍全屋智能开发指南-开源基础软件社区

3.2注册服务

第一步,登陆华为开发者联盟https://developer.huawei.com/consumer/cn/,点击管理中心,创建原子化服务
宿舍全屋智能开发指南-开源基础软件社区
宿舍全屋智能开发指南-开源基础软件社区
第二步,按照提示填写即可,在标签配置页面,填写在应用调测助手申请的Product ID 型号00
宿舍全屋智能开发指南-开源基础软件社区
在FA配置页面,一定要查看第2.3节第四步自己写的包名,模块名就是entry,添加设备就是com.example.distschedule.AddDeviceAbility:
宿舍全屋智能开发指南-开源基础软件社区
第三步,创建测试,填写华为账号对应的手机号即可
宿舍全屋智能开发指南-开源基础软件社区

3.3写入标签

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

1246128c7b60ad1ed0286680f19206Lamp01308123456784011512teamX-Lamp01

宿舍全屋智能开发指南-开源基础软件社区
更多设备NFC标签

4.具体实操

门锁

开门需要一个简单的装置,之前有设计,参考hi3861 web端开门宿舍全屋智能开发指南-开源基础软件社区电路简单,将7.4v电源经过降压稳压后分别给模组、舵机供电。
宿舍全屋智能开发指南-开源基础软件社区
手机连上wifi,打开NFC开关,碰一下标签即可唤起原子化界面(不能使用校园网,会导致设备无法连接)测试效果如下图:
宿舍全屋智能开发指南-开源基础软件社区宿舍全屋智能开发指南-开源基础软件社区

小风扇

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

1246150601d88056b027dd2ca47205Fan01308123456784011511teamX-Fan01

手上的风扇的驱动电路如下图,PWM 控制风速:
宿舍全屋智能开发指南-开源基础软件社区

台灯

需要一个电磁继电器、5V充电头,可以同时为模组和台灯供电(并联)。
在台灯源码中初始化GPIO 9为输出,将继电器的信号端与GPIO 9 相连即可。
开灯时,接通继电器的NC-COM端,断开NO-COM。
宿舍全屋智能开发指南-开源基础软件社区
宿舍全屋智能开发指南-开源基础软件社区

结语

去年立下的Flag,NFC开门已经实现。
不过以上案例实质上还使用现有的解决方案、数字管家的服务器实现,甚至连开门的操作UI都是台灯的,虽然这个可以在数字管家修改图标,但本质还是没有变化,本教程目的在于记录数字管家碰一碰的开发入门,为后期再添加自己的解决方案、服务器作为参考。
学习参考链接:
1.设备开发基础课程

2.应用开发系类课程

3.数字管家快速入门

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
已于2022-3-23 10:26:59修改
22
收藏 12
回复
举报
回复
添加资源
添加资源将有机会获得更多曝光,你也可以直接关联已上传资源 去关联
    相关推荐