
OpenHarmony之智能门铃 精华
一、 介绍
智能门铃通过监控来访者信息,告诉主人门外是否有人按铃、有陌生人靠近或者无人状态。主人可以在数字管家中远程接收消息,并根据需要进行远程取消报警和一键开锁。同时,也可以通过室内屏幕获取门外状态。室内屏幕显示界面使用DevEco Studio 编写的js应用,具有很好的兼容和移植特性。硬件上采用了带有HDF框架的驱动模型,通过GPIO来获取传感器采集信息并驱动报警器进行动作。
1. 交互流程
如上图所示,智能门铃整体方案原理图可以大致分成:智能门铃设备、数字管家应用、云平台三部分。智能门铃通过MQTT协议连接华为IOT物联网平台,从而实现命令的接收和属性上报。 关于智能设备接入华为云IoT平台的细节可以参考 连接IOT云平台指南;智能设备同数字管家应用之间的设备模型定义可以参考profile 。
2.实物简介
如上图,我们使用欧智通V200Z-R模组来模拟智能门铃设备。 无人靠近的时候,该智能门铃当前情况页面默认显示”无人“状态。 当门铃按钮被按下的时候,开发板的显示屏界面显示“有人按门铃”的提示,伴随蜂鸣器报警,并将实时状态上报至云平台。 当有人靠近且超过一定时间却没按下门铃按钮的时候,开发板的显示屏界面显示”有陌生人靠近“的提示,伴随蜂鸣器报警,并将实时状态上报至云平台。
3.实物操作体验
有陌生人靠近:
有人按门铃:
远程一键开门:
二、快速上手
1、硬件准备
欧智通V200Z-R开发板
润和智能家居套件-红绿灯板
润和智能家居套件-炫彩灯板
预装HarmonyOS手机一台
硬件连线图:
2、Linux编译服务器基础环境准备
开发基础环境由 windows 工作台和 Linux 编译服务器组成。windows 工作台可以通过 samba 服务或 ssh 方式访问 Linux编译服务器。其中 windows 工作台用来烧录和代码编辑,Linux 编译服务器用来编译 OpenHarmony 代码,为了简化步骤,Linux 编译服务器推荐安装 Ubuntu20.04。
安装编译依赖基础软件
安装和配置Python
打开Linux终端。
输入如下命令,查看python版本号,需要使用python3.7以上版本,否则参考 系统基础环境搭建。
安装并升级Python包管理工具(pip3)。
设置pip的国内镜像
安装hb
输入如下命令确认hb是否为version 0.4.4
a. 若提示如下内容,则表示未安装可以从第2步开始操作。
b.若提示如下内容,需要先卸载该版本,然后再执行第2步操作步骤。
卸载命令:
运行如下命令安装hb
设置环境变量
将以下命令拷贝到.bashrc文件的最后一行,保存并退出。
执行如下命令更新环境变量。
再次执行”hb -v“,有以下版本显示则表示安装的hb版本正确。
3、V200Z-R开发环境准备
在Linux编译服务器上搭建好基础开发环境后,需要安装OpenHarmony 编译V200Z-R平台特有的开发环境。
安装arm-none-eabi-gcc
打开Linux终端。
下载arm-none-eabi-gcc编译工具。
解压 gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2 安装包至~/toolchain/路径下。
设置环境变量。
将以下命令拷贝到.bashrc文件的最后一行,保存并退出。
生效环境变量。
在命令行中输入如下命令,如果能正确显示编译器版本号,表明编译器安装成功。
4、源码下载&编译准备
1.码云工具下载
2.代码下载
1) OpenHarmony代码下载
注意:
1.权限问题请参考生成/添加SSH公钥。
2.若在已安装python3.8后,执行repo init 时,仍显示如下错误:
执行如下命令后,进行重试:
2) 设备侧代码下载
使用git 命令下载
3) 编译前准备
代码拷贝
team_x源码拷贝
common库拷贝
iot_link库拷贝
kernel/liteos_m 修改
步骤1、下载patch 地址
点击上述链接进入浏览器,将该网页中内容全部复制。
本地创建一个名为***.patch文件,并将已经复制的内容粘贴到该文件中。
步骤2、 打上步骤1中的patch
device/soc/bestechnic 修改
步骤1、下载patch 地址
点击上述链接进入浏览器,将该网页中内容全部复制。
本地创建一个名为***.patch文件,并将已经复制的内容粘贴到该文件中。
步骤2、 打上步骤1中的patch
third_party/mbedtls 修改
参考如下代码段修改 mbedtls/library/platform.c
参考如下代码段修改 mbedtls/BUILD.gn
third_party/lwip 修改
修改src/api/netdb.c 文件
third_party/iot_link 修改
参考如下代码段修改 third_party/iot_link/network/dtls/BUILD.gn
参考如下代码段修改 third_party/iot_link/network/dtls/mbedtls/mbedtls_port/dtls_interface.c
参考如下代码段修改 third_party/iot_link/network/mqtt/BUILD.gn
参考如下代码段修改 third_party/iot_link/network/mqtt/paho_mqtt/port/paho_mqtt_port.c
参考如下代码段修改 third_party/iot_link/network/mqtt/paho_mqtt/port/paho_osdepends.h
参考如下代码段修改 third_party/iot_link/oc_mqtt/BUILD.gn
communicationkit相关修改
参考下方代码修改foundation/ace/ace_engine_lite/frameworks/module_manager/ohos_module_config.h
hdf配置文件修改
参考下方代码修改device/board/fnlink/shields/v200zr-evb-t1/v200zr-evb-t1.hcs
gpio hdf框架相关修改。
根据下方代码修改drivers/adapter/platform/gpio/gpio_bes.c
将JS应用合入工程。
关于JS应用开发请参考从零开始学习L0: JS开发系列。本节为可选章节,忽略本节内容不影响智能门铃项目的展示和运行。但若想要在本项目的基础上进行涉及到显示的内容修改与新规开发,例如增加天气预报的图标,则需完整的阅读本节及链接内容。
1.下载并安装DevEco Studio。
2.打开js工程。
工程目录为:knowledge_demo_smart_home/dev/team_x/smart_door_bell/FA
3.在DevEco Studio的SDK中添加@system.communicationkit.d.ts文件。
将@system.communicationkit.d.ts文件(源文件目录:~/knowledge_demo_smart_home/dev/interface/sdk-js/api/common/@system.communicationkit.d.ts)拷贝到在DevEco Studio的SDK中(目标目录:HarmonyOS Legacy SDK/js/3.0.0.0/api/common)。HarmonyOS Legacy SDK目录在DevEco Studio安装时,由用户配置,该目录位置可在设置(ctrl+alt+s)中查找。
4.编译hap包。
依次选择构建 -> Build Hap(s)/APP(s) -> Build Hap(s)进行hap包编译,编译后的hap包目录为:FA\entry\build\outputs\hap\debug\entry-debug-lite-unsigned.hap。
5.将js代码合入OpenHarmonySDK。
将entry-debug-lite-unsigned.hap修改后缀为zip并解压。在解压后的目录:entry-debug-lite-unsigned/assets/js/default目录中除app.js.map外的的数据全部拷贝到OpenHarmonySDK中的vendor/team_x/smart_door_bell/fs/data/data/js目录下。
代码目录结构
整合并修改完成后的代码目录结构如下图:
5、编译&烧录
固件编译
编译命令:
如下图所示,使用键盘上下键选中智能门铃 “smart_door_bell”(注:工程名字根据实际要编译的工程来):
编译通过,生成固件成功,如图:
固件烧录步骤
1.安装CP2102驱动
2.固件编译完成以后拷贝/out/v200zr/smart_door_bell/write_flash_gui文件夹到windows下,并点击Wifi_download_main.exe
3.点击工具上的文件夹图标
4.选择List按钮
5.在显示出来的串口列表中选择需要烧录的串口,并点击开始按钮。
6.在开发板上点击reset按键,或者重新上电。
7.进入烧录状态
8.烧录成功
注意:固件烧录完成后需将烧录窗口关闭,再按下设备Reset键设备才能启动。如果未将烧录窗口关闭,设备会再次进行烧写状态。
6、设备配网
在设备上电前需准备好安装了数字管家应用的HarmonyOS手机,详情见数字管家应用开发, 并在设置中开启手机的NFC功能;
写设备NFC标签,详细操作见设备NFC标签指导文档;
烧录完成后,上电。开发者在观察开发板上状态LED灯以1Hz的频率闪烁时,将手机上半部靠近开发板NFC标签处;
手机将自动拉起数字管家应用并进入配网状态,根据手机提示连接到设备热点teamX-DoorBell01后返回数字管家APP,输入路由账号密码,点击确定后,手机将信息传输到设备侧,设备开始联网。
