0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于OpenHarmony的智能门锁设计方案

电子发烧友开源社区 来源:HarmonyOS官方合作社区 作者:HarmonyOS官方合作社 2022-03-25 07:17 次阅读

1

简介

本demo是基于Openharmony 3.1 Beta本版开发,不仅可以接收数字管家应用下发的指令来控制门锁开启,而且还可以通过数字管家设置不同的开锁密码以及一次性密码,实现给临时用户一个临时密码,保证门户安全。当然除了开锁的功能,智能门锁还可以通过检测门与门锁距离自动上锁以及如果长时间未上锁,上报告警消息到数字管家,及时提醒用户关门关锁等功能。

1. 交互流程:

1c94497c-ab86-11ec-aa7f-dac502259ad0.png

如上图所示,智能门锁整体方案原理图可以大致分成:智能门锁设备、数字管家应用、云平台三部分。智能门锁通过MQTT协议连接华为IOT物联网平台,从而实现命令的接收和属性上报。关于智能设备接入华为云IoT平台的详细细节可以参考 连接IOT云平台指南;智能设备与数字管家应用之间的设备模型定义可以参考profile

2. 实物简介:

1ca50212-ab86-11ec-aa7f-dac502259ad0.png

如上图所示,上面是XR806开发板,中间的是hcsr04超声波距离传感器,下面是E53_IA1扩展板。

我们是通过距离传感器感应门的距离,进行自动上锁,也可以在一定时间内无法上锁而产生告警信息上传到数字管家。

E53_IA1扩展板主要是通过控制电机模拟开关锁的一个动作。

接线说明:

1cb9f9a6-ab86-11ec-aa7f-dac502259ad0.png

距离传感器有4根线,其中echo接XR806的PA19,trig接XR806的PA20。

E53_IA1扩展板主需要接3根线,其中IO控制脚接XR806的PA12。

3. 实物操作体验

2

快速上手

1. 硬件准备

  • xr806模组。

  • hcsr04超声波模块。

  • E53_IA1扩展板。

  • 预装HarmonyOS手机一台。

2. 环境准备

参照文档: XR806快速上手指导文档

3. 编译前准备设备侧代码下载

具体仓库地址:https://gitee.com/openharmony-sig/knowledge_demo_smart_home/

下载方式:使用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/

左右滑动查看全部代码

整合并修改完成后的目录结构如下图:

1d24feb8-ab86-11ec-aa7f-dac502259ad0.png

SOC代码下载替换

当前官方soc代码由于DHCP暂未适配,所以暂时不支持AP模式,这时需要下载并替换之前SOC代码。如果官方soc代码已修复该问题,可忽略此步骤。

git clone https://gitee.com/moldy-potato-chips/xr806_-ap_mode.gitmv ~/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),主要修改内容:

1.BUILD.gn修改source_set.

2.fd为0时通讯会异常,做了规避操作(socket创建时多创建一个)。

3.部分mbedtl接口未适配,做一些简单适配以及无法适配的接口需要注释

4.弱引用导致无法链接相关符号,因此需要注释相关文件中的弱引用。

5.osDelay接口在XR806中未实现,需要替换为OS_Msleep();

以上内容修改的修改均在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

左右滑动查看全部代码

4. 编译&烧录

更新hb

首先可以查看一下hb的版本,如果hb版本为0.4.4就不需要更新。

## 查看hb版本hb --version
## 更新hb, 以下指令需要在openharmony SDK根目录执行pip3 uninstall ohos_buildpip3 install build/lite

左右滑动查看全部代码

编译

1.hb set 选择demo指令,具体命令如下:

hb set -root

左右滑动查看全部代码

如下图所示,使用键盘上下键选中smart_lock

1d34ac0a-ab86-11ec-aa7f-dac502259ad0.png

2.hb build 全量编译命令

hb build -f

左右滑动查看全部代码

1d4e6afa-ab86-11ec-aa7f-dac502259ad0.png

烧录:参照文档:XR806快速上手指导文档

5. 设备配网

  • 在设备上电前需准备好安装了数字管家应用的HarmonyOS手机,详情见数字管家应用开发, 并在设置中开启手机的NFC功能;

  • 写设备NFC标签,详细操作见设备NFC标签指导文档;

  • 烧录完成后,上电。开发者在观察开发板上状态LED灯以8Hz的频率闪烁时,将手机上半部靠近开发板NFC标签处(无NFC标签的可用NFC贴纸替代);

  • 碰一碰后手机将自动拉起数字管家应用并进入配网状态。

  • 配网过程中需要 连接设备的AP热点,然后填写需要配置的wifi的密码。

  • 最后点击配置,手机会将ssid以及对应的密码通过AP热点发送到设备。

  • 当设备端蓝灯每5s闪烁一次则代码设备联网成功。

6. 设置主密码并通过主密码开锁

  • 数字管家下发修改密码指令以及修改后的密码

  • 设备端接收指令以及修改后的密码进行更新

  • 数字管家下方开锁指令以及开锁密码

  • 设备端接收指令并判断密码是否正确,正确的话电机转动模拟开锁,否则向数字管家发送密码错误信息

7. 设置临时密码

  • 数字管家下发创建临时密码指令以及创建临时密码时的信息,主要包括临时密码标志,临时密码信息,临时密码生效时间段。

  • 设备端接收指令并保存信息。

  • 临时用户通过数字管家下发开锁指令以及开发密码。

  • 设备端接收指令并判断密码是否正确以及该密码是否在当前时间段生效,正确的话电机转动模拟开锁,否则向数字管家发送密码错误信息。

8. 门未关告警

  • 设备端执行完开门指令后会一直通过超声波距离传感器来判断门是否可以关闭,如果超过5分钟发现门不能关闭,则主动向数字管家发送门未关的告警信息。

  • 数字管家通过系统消息查看到告警消息。

  • 数字管家可以从设备控制页面进入到告警消息页面,也可以通过点击告警消息进入到告警界面。

9. 模拟自动关门

  • 设备端执行开门动作后,用手或者其他物体靠近超声波距离传感器

  • 设备每隔10S检测一次超声波距离传感器,发现在设定范围内(模拟门已关),则控制电机转动(模拟关门动作),同时上报关门信息到数字管家

原文标题:OpenHarmony开发样例:智能门锁

文章出处:【微信公众号:HarmonyOS官方合作社区】欢迎添加关注!文章转载请注明出处。

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 开发
    +关注

    关注

    0

    文章

    363

    浏览量

    40785
  • 智能门锁
    +关注

    关注

    17

    文章

    1845

    浏览量

    42945
  • OpenHarmony
    +关注

    关注

    25

    文章

    3629

    浏览量

    16031

原文标题:OpenHarmony开发样例:智能门锁

文章出处:【微信号:HarmonyOS_Community,微信公众号:电子发烧友开源社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    OpenHarmony 项目实战:基于全志 XR806 实现的上下位机双 OpenHarmony 智能门锁样例

    临时用户一个临时密码,保证门户安全。当然除了开锁的功能,智能门锁还可以通过检测门与门锁距离自动上锁以及如果长时间未上锁,上报告警消息到数字管家,及时提醒用户关门关锁等功能。 1. 交互流程: 如上图所示,
    的头像 发表于 02-19 17:25 1034次阅读
    <b class='flag-5'>OpenHarmony</b> 项目实战:基于全志 XR806 实现的上下位机双 <b class='flag-5'>OpenHarmony</b> <b class='flag-5'>智能</b><b class='flag-5'>门锁</b>样例

    #无线智能电子门锁设计方案 合适的电源架构选择

    电子门锁智能门锁智慧安防
    电子技术那些事儿
    发布于 :2022年09月18日 16:28:08

    分享----单相智能电表设计方案

    本帖最后由 azsxdcfv1871514 于 2013-1-6 15:15 编辑 分享----单相智能电表设计方案
    发表于 06-05 11:14

    智能门锁(NFC架构)方案

    LPC11U68, 结合TI Motor Driver DRV8837、NXP NFC Transmission Module PN512的高性能, 高可靠性, 低功耗的智能门锁(NFC架构)方案
    发表于 06-06 21:17

    蓝牙智能门锁解决方案 BLE蓝牙指纹智能门锁开发方案

    随着蓝牙技术的成熟,全民智能生活大时代已经开启智能家居的普及,让家庭生活更加智能化就拿蓝牙智能门锁来说好了,现如今市面上的蓝牙
    发表于 07-20 15:42

    蓝牙智能门锁解决方案

    成为别人的锁。目前,在智能门锁领域无线通信主要有zigbee、WiFi、蓝牙3种,其中蓝牙以低功耗,低成本,高安全性等突出优点,成为智能门锁厂商热衷的无线
    发表于 11-06 16:40

    基于32位单片机的智能门锁解决方案

    智能门锁是指区别于传统机械锁的基础上改进的,在用户安全性、识别、管理性方面更加智能化简便化的锁具。智能门锁是门禁系统中锁门的执行部件。
    发表于 12-22 06:05

    基于WiFi模块的智能门锁低功耗方案

    WiFi模块的智能家居应用智能门锁低功耗WiFi方案优势分析
    发表于 12-29 06:04

    基于stm32的智能小车设计方案

    基于stm32的智能小车设计方案
    发表于 07-14 06:53

    如何去实现一种基于STM32和freeRTOS智能门锁设计

    基于STM32和freeRTOS智能门锁设计方案前言​ 项目基于STM32单片机为MCU,通过UART,SPI和蓝牙模块,RC522模块连接,MCU采用freeRTOS实时操作系统,门锁
    发表于 02-18 06:47

    无线智能电子门锁设计方案介绍(3)

    无线智能电子门锁设计方案分享(三)
    的头像 发表于 08-23 02:06 4864次阅读

    采用电机驱动的无线智能电子门锁设计方案(1)

    无线智能电子门锁设计方案分享(一)
    的头像 发表于 08-22 00:14 5394次阅读
    采用电机驱动的无线<b class='flag-5'>智能</b>电子<b class='flag-5'>门锁</b><b class='flag-5'>设计方案</b>(1)

    智能门锁电机驱动集成电路(IC)设计方案

    本文介绍了一个具有动态过流检测功能的智能门锁电机驱动集成电路(IC)设计方案,该设计可支持不同的电源电压和负载。
    的头像 发表于 12-03 14:45 4334次阅读
    <b class='flag-5'>智能</b><b class='flag-5'>门锁</b>电机驱动集成电路(IC)<b class='flag-5'>设计方案</b>

    基于STM32和freeRTOS智能门锁设计方案

    基于STM32和freeRTOS智能门锁设计方案前言​ 项目基于STM32单片机为MCU,通过UART,SPI和蓝牙模块,RC522模块连接,MCU采用freeRTOS实时操作系统,门锁
    发表于 12-23 20:00 48次下载
    基于STM32和freeRTOS<b class='flag-5'>智能</b><b class='flag-5'>门锁</b><b class='flag-5'>设计方案</b>

    基于OpenHarmony智能门锁设计

    本项目的场景是智能家居。通过 OpenHarmony 源码与 Hi3861 开发板进行智能门锁的项目开发。最后可以通过舵机进行开关锁与通过手机的数字管家进行密码解锁。
    的头像 发表于 04-10 11:05 975次阅读