电子说
本demo是基于Openharmony 3.1 Beta本版开发,不仅可以接收数字管家应用下发的指令来控制门锁开启,而且还可以通过数字管家设置不同的开锁密码以及一次性密码,实现给临时用户一个临时密码,保证门户安全。当然除了开锁的功能,智能门锁还可以通过检测门与门锁距离自动上锁以及如果长时间未上锁,上报告警消息到数字管家,及时提醒用户关门关锁等功能。
如上图所示,智能门锁整体方案原理图可以大致分成:智能门锁设备、数字管家应用、云平台三部分。智能门锁通过MQTT协议连接华为IOT物联网平台,从而实现命令的接收和属性上报。 关于智能设备接入华为云IoT平台的详细细节;智能设备与数字管家应用之间的设备模型定义可以参考;鸿蒙开发文档:qr23.cn/AKFP8k
点击或者复制转到即可。
如上图所示,上面是XR806开发板,中间的是hcsr04超声波距离传感器,下面是E53_IA1扩展板。
鸿蒙next开发指导文档mau123789是v直接前往拿学习
我们是通过距离传感器感应门的距离,进行自动上锁,也可以在一定时间内无法上锁而产生告警信息上传到数字管家。
E53_IA1扩展板主要是通过控制电机模拟开关锁的一个动作。
接线说明:
距离传感器有4根线,其中echo接XR806的PA19,trig接XR806的PA20。
E53_IA1扩展板主需要接3根线,其中IO控制脚接XR806的PA12。
参照文档:[ XR806快速上手指导文档]
下载方式:使用git 命令下载,指令如下(用户也可以根据需要将该仓库fork到自己的目录下后进行下载)
cd ~/
git clone git@gitee.com:openharmony-sig/knowledge_demo_smart_home.git
cp -rfa ~/knowledge_demo_smart_home/dev/team_x ~/openharmony/vendor/
cp -rfa ~/knowledge_demo_smart_home/dev/third_party/iot_link ~/openharmony/third_party/
整合并修改完成后的目录结构如下图:
当前官方soc代码由于DHCP暂未适配,所以暂时不支持AP模式,这时需要下载并替换之前SOC代码。如果官方soc代码已修复该问题,可忽略此步骤。
git clone https://gitee.com/moldy-potato-chips/xr806_-ap_mode.git
mv ~/openharmony/device/soc/allwinner ~/allwinner.org // 不建议直接删除,
cp -raf xr806_-ap_mode ~/openharmony/device/soc/allwinner
修改编译依赖
打开 device/soc/allwinner/xradio/xr806/BUILD.gn,添加应用依赖(deps字段):
module_group(module_name) {
modules = [
"src",
"project",
"include",
]
configs = [
":SdkLdCconfig",
]
deps = [ "//vendor/team_x/smart_lock/demo_smart_lock:app_smart_lock" ]
}
修改编译方式
将demo依赖的库编译方式(static_library)修改为(source_set):
具体依赖查看demo_smart_lock目录下的BUILD.gn:
deps = [
"../../common/iot_wifi_xradio:iot_wifi",
"../../common/iot_cloud:iot_cloud",
"../../common/iot_boardbutton_xradio:iot_boardbutton",
"../../common/iot_list:iot_list",
"../../common/iot_sntp:iot_sntp",
"../../common/iot_boardled_xradio",
"//third_party/cJSON:cJSON"
]
其中//third_party/cJSON目录下的BUILD.gn建议参照下面的修改:
source_set("cJSON") {
sources = [
"cJSON.c",
"cJSON_Utils.c",
]
ldflags = [ "-lm" ]
}
修改iot_link中的部分文件
third_party/iot_link目录下文件改动较多,此处以patch方式做修改,patch在路径在(team_x/smart_lock/iot_link_patch_xr806.patch),主要修改内容:
以上内容修改的修改均在iot_link_patch_xr806.patch中,只需将该patch文件拷贝到third_party/iot_link目录下,并执行打补丁即可:
cp -af vendor/team_x/smart_lock/iot_link_patch_xr806.patch third_party/iot_link // 拷贝patch文件到对应目录
cd third_party/iot_link/ // cd 到对应目录
patch -p1< ./iot_link_patch_xr806.patch // 执行打patch动作
修改GPIO查找方式
因为GPIO框架修改了设备驱动注册的管脚号,导致应用无法根据HCS的引脚操作对应的GPIO,此问题已经提issue,如果该问题已解决,可以忽略此步骤。
打开drivers/framework/support/platform/src/gpio/gpio_manager.c,将cntlr->start = start;注释即可。
static int32_t GpioManagerAdd(struct PlatformManager *manager, struct PlatformDevice *device)
{
uint16_t start;
struct GpioCntlr *cntlr = CONTAINER_OF(device, struct GpioCntlr, device);
if ((start = GpioCntlrQueryStart(cntlr, &manager- >devices)) >= GPIO_NUM_MAX) {
PLAT_LOGE("GpioCntlrAdd: query range for start:%d fail:%d", cntlr- >start, start);
return HDF_ERR_INVALID_PARAM;
}
// cntlr- >start = start;
DListInsertTail(&device- >node, &manager- >devices);
PLAT_LOGI("%s: start:%u count:%u", __func__, cntlr- >start, cntlr- >count);
return HDF_SUCCESS;
}
将对应的驱动文件复制到drvier对应目录:
因为主仓代码中未将对应的驱动文件合并到driver/adpater/platform对应的目录下,固需要手动将文件拷贝到对应目录。若主仓已合入,可忽略此步骤。
注意:(如果已用xr806_-ap_mode替换原来的soc文件,则需要将拷贝原来被替换的对应文件,因为xr806_-ap_mode中的驱动文件非最新版)
// 拷贝gpio驱动
cp -af device/soc/allwinner/xradio/drivers/gpio/gpio_xradio.* driver/adpater/platform/gpio
// 修改driver/adpater/platform/gpio/BUILD.gn文件,加上gpio_xradio的编译
hdf_driver(module_name) {
sources = []
if (defined(LOSCFG_SOC_COMPANY_BESTECHNIC)) {
sources += [ "gpio_bes.c" ]
}
if (defined(LOSCFG_SOC_COMPANY_ALLWINNER)) {
sources += [ "gpio_xradio.c" ]
}
include_dirs = [ "." ]
}
为了节省ram资源,可以把无用的资源先关闭,如关闭内部codec,将 device/soc/allwinner/xradio/xr806/project/prj_config.h中的PRJCONF_INTERNAL_SOUNDCARD_EN设置为0,如下:
/* Xradio internal codec sound card enable/disable */
#define PRJCONF_INTERNAL_SOUNDCARD_EN 0
首先可以查看一下hb的版本,如果hb版本为0.4.4就不需要更新。
## 查看hb版本
hb --version
## 更新hb, 以下指令需要在openharmony SDK根目录执行
pip3 uninstall ohos_build
pip3 install build/lite
hb set -root
如下图所示,使用键盘上下键选中smart_lock
hb build -f
参照文档:[ XR806快速上手指导文档]
审核编辑 黄宇
全部0条评论
快来发表一下你的评论吧 !