宿舍全屋智能开发指南
项目说明
基于 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 环境编译工具准备
设备端源码下载
第一步,码云工具安装
第二步,获取源码。OpenHarmony 1.0.1 版本
获取相关产品解决方案,并复制到源码中,具体操作如下:
第三步(可选,若使用 HiSpark 套件需要修改)
第四步,安装 ohos-build 工具
需要使用 ohos-build 0.2.0 版本编译。在 OpenHarmony 1.0.1 源码根目录下,执行:
返回一下信息说明正确安装:

第五步,打开工程
打开 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 文件添加如下函数:
第二步,添加初始化 GPIO 10 的语句
第三步,添加业务代码
第四步,编译、下载
参考 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 都是台灯的,虽然这个可以在数字管家修改图标,但本质还是没有变化,本教程目的在于记录数字管家碰一碰的开发入门,为后期再添加自己的解决方案、服务器作为参考。学习参考链接:
设备开发基础课程https://www.openharmony.cn/courses?id=5#equipment
应用开发系类课程https://www.openharmony.cn/courses?id=5#application

评论