0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

OpenHarmony南向開發(fā)案例:【智能門鎖】

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-04-13 22:38 ? 次閱讀

一. 簡介

本demo是基于Openharmony 3.1 Beta本版開發(fā),不僅可以接收數(shù)字管家應(yīng)用下發(fā)的指令來控制門鎖開啟,而且還可以通過數(shù)字管家設(shè)置不同的開鎖密碼以及一次性密碼,實現(xiàn)給臨時用戶一個臨時密碼,保證門戶安全。當(dāng)然除了開鎖的功能,智能門鎖還可以通過檢測門與門鎖距離自動上鎖以及如果長時間未上鎖,上報告警消息到數(shù)字管家,及時提醒用戶關(guān)門關(guān)鎖等功能。

1. 交互流程:

如上圖所示,智能門鎖整體方案原理圖可以大致分成:智能門鎖設(shè)備、數(shù)字管家應(yīng)用、云平臺三部分。智能門鎖通過MQTT協(xié)議連接華為IOT物聯(lián)網(wǎng)平臺,從而實現(xiàn)命令的接收和屬性上報。 關(guān)于智能設(shè)備接入華為云IoT平臺的詳細細節(jié);智能設(shè)備與數(shù)字管家應(yīng)用之間的設(shè)備模型定義可以參考;鴻蒙開發(fā)文檔:qr23.cn/AKFP8k點擊或者復(fù)制轉(zhuǎn)到即可。

2. 實物簡介:

如上圖所示,上面是XR806開發(fā)板,中間的是hcsr04超聲波距離傳感器,下面是E53_IA1擴展板。

搜狗高速瀏覽器截圖20240326151547.png
鴻蒙next開發(fā)指導(dǎo)文檔mau123789是v直接前往拿學(xué)習(xí)
我們是通過距離傳感器感應(yīng)門的距離,進行自動上鎖,也可以在一定時間內(nèi)無法上鎖而產(chǎn)生告警信息上傳到數(shù)字管家。

E53_IA1擴展板主要是通過控制電機模擬開關(guān)鎖的一個動作。

接線說明:

距離傳感器有4根線,其中echo接XR806的PA19,trig接XR806的PA20。

E53_IA1擴展板主需要接3根線,其中IO控制腳接XR806的PA12。

3. 實物操作體驗

二. 快速上手

1. 硬件準(zhǔn)備

  • xr806模組。
  • hcsr04超聲波模塊。
  • E53_IA1擴展板。
  • 預(yù)裝HarmonyOS手機一臺。

2. 環(huán)境準(zhǔn)備

參照文檔:[ XR806快速上手指導(dǎo)文檔]

3. 編譯前準(zhǔn)備

設(shè)備側(cè)代碼下載

下載方式:使用git 命令下載,指令如下(用戶也可以根據(jù)需要將該倉庫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/

整合并修改完成后的目錄結(jié)構(gòu)如下圖:

SOC代碼下載替換

當(dāng)前官方soc代碼由于DHCP暫未適配,所以暫時不支持AP模式,這時需要下載并替換之前SOC代碼。如果官方soc代碼已修復(fù)該問題,可忽略此步驟。

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,添加應(yīng)用依賴(deps字段):

    module_group(module_name) {
      modules = [
          "src",
          "project",
          "include",
      ]
      configs = [
        ":SdkLdCconfig",
      ]
      deps = [ "http://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",
            "http://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),主要修改內(nèi)容:

    1. BUILD.gn修改source_set.
    2. fd為0時通訊會異常,做了規(guī)避操作(socket創(chuàng)建時多創(chuàng)建一個)。
    3. 部分mbedtl接口未適配,做一些簡單適配以及無法適配的接口需要注釋
    4. 弱引用導(dǎo)致無法鏈接相關(guān)符號,因此需要注釋相關(guān)文件中的弱引用。
    5. osDelay接口在XR806中未實現(xiàn),需要替換為OS_Msleep();

    以上內(nèi)容修改的修改均在iot_link_patch_xr806.patch中,只需將該patch文件拷貝到third_party/iot_link目錄下,并執(zhí)行打補丁即可:

    cp -af vendor/team_x/smart_lock/iot_link_patch_xr806.patch third_party/iot_link		// 拷貝patch文件到對應(yīng)目錄
    cd third_party/iot_link/															// cd 到對應(yīng)目錄
    patch -p1< ./iot_link_patch_xr806.patch												// 執(zhí)行打patch動作
    
  • 修改GPIO查找方式
    因為GPIO框架修改了設(shè)備驅(qū)動注冊的管腳號,導(dǎo)致應(yīng)用無法根據(jù)HCS的引腳操作對應(yīng)的GPIO,此問題已經(jīng)提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;
    }
    
  • 將對應(yīng)的驅(qū)動文件復(fù)制到drvier對應(yīng)目錄:
    因為主倉代碼中未將對應(yīng)的驅(qū)動文件合并到driver/adpater/platform對應(yīng)的目錄下,固需要手動將文件拷貝到對應(yīng)目錄。若主倉已合入,可忽略此步驟。
    注意:(如果已用xr806_-ap_mode替換原來的soc文件,則需要將拷貝原來被替換的對應(yīng)文件,因為xr806_-ap_mode中的驅(qū)動文件非最新版

    // 拷貝gpio驅(qū)動
    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 = [ "." ]
    }
    
  • 為了節(jié)省ram資源,可以把無用的資源先關(guān)閉,如關(guān)閉內(nèi)部codec,將 device/soc/allwinner/xradio/xr806/project/prj_config.h中的PRJCONF_INTERNAL_SOUNDCARD_EN設(shè)置為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根目錄執(zhí)行
pip3 uninstall ohos_build
pip3 install build/lite
編譯
  1. hb set 選擇demo指令,具體命令如下:
hb set -root

如下圖所示,使用鍵盤上下鍵選中smart_lock

  1. hb build 全量編譯命令
    hb build -f
    

燒錄

參照文檔:[ XR806快速上手指導(dǎo)文檔]

5. 設(shè)備配網(wǎng)

  • 在設(shè)備上電前需準(zhǔn)備好安裝了數(shù)字管家應(yīng)用的HarmonyOS手機, 并在設(shè)置中開啟手機的NFC功能;
  • 寫設(shè)備NFC標(biāo)簽;
  • 燒錄完成后,上電。開發(fā)者在觀察開發(fā)板上狀態(tài)LED燈以8Hz的頻率閃爍時,將手機上半部靠近開發(fā)板NFC標(biāo)簽處(無NFC標(biāo)簽的可用NFC貼紙?zhí)娲?;
  • 碰一碰后手機將自動拉起數(shù)字管家應(yīng)用并進入配網(wǎng)狀態(tài)。
  • 配網(wǎng)過程中需要 連接設(shè)備的AP熱點,然后填寫需要配置的wifi的密碼。
  • 最后點擊配置,手機會將ssid以及對應(yīng)的密碼通過AP熱點發(fā)送到設(shè)備。
  • 當(dāng)設(shè)備端藍燈每5s閃爍一次則代碼設(shè)備聯(lián)網(wǎng)成功。

6. 設(shè)置主密碼并通過主密碼開鎖

  • 數(shù)字管家下發(fā)修改密碼指令以及修改后的密碼
  • 設(shè)備端接收指令以及修改后的密碼進行更新
  • 數(shù)字管家下方開鎖指令以及開鎖密碼
  • 設(shè)備端接收指令并判斷密碼是否正確,正確的話電機轉(zhuǎn)動模擬開鎖,否則向數(shù)字管家發(fā)送密碼錯誤信息

7. 設(shè)置臨時密碼

  • 數(shù)字管家下發(fā)創(chuàng)建臨時密碼指令以及創(chuàng)建臨時密碼時的信息,主要包括臨時密碼標(biāo)志,臨時密碼信息,臨時密碼生效時間段。
  • 設(shè)備端接收指令并保存信息。
  • 臨時用戶通過數(shù)字管家下發(fā)開鎖指令以及開發(fā)密碼。
  • 設(shè)備端接收指令并判斷密碼是否正確以及該密碼是否在當(dāng)前時間段生效,正確的話電機轉(zhuǎn)動模擬開鎖,否則向數(shù)字管家發(fā)送密碼錯誤信息。

8. 門未關(guān)告警

  • 設(shè)備端執(zhí)行完開門指令后會一直通過超聲波距離傳感器來判斷門是否可以關(guān)閉,如果超過5分鐘發(fā)現(xiàn)門不能關(guān)閉,則主動向數(shù)字管家發(fā)送門未關(guān)的告警信息。
  • 數(shù)字管家通過系統(tǒng)消息查看到告警消息。
  • 數(shù)字管家可以從設(shè)備控制頁面進入到告警消息頁面,也可以通過點擊告警消息進入到告警界面。

9. 模擬自動關(guān)門

  • 設(shè)備端執(zhí)行開門動作后,用手或者其他物體靠近超聲波距離傳感器
  • 設(shè)備每隔10S檢測一次超聲波距離傳感器,發(fā)現(xiàn)在設(shè)定范圍內(nèi)(模擬門已關(guān)),則控制電機轉(zhuǎn)動(模擬關(guān)門動作),同時上報關(guān)門信息到數(shù)字管家

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 智能門鎖
    +關(guān)注

    關(guān)注

    17

    文章

    1857

    瀏覽量

    43173
  • 鴻蒙
    +關(guān)注

    關(guān)注

    57

    文章

    2352

    瀏覽量

    42859
  • HarmonyOS
    +關(guān)注

    關(guān)注

    79

    文章

    1975

    瀏覽量

    30201
  • OpenHarmony
    +關(guān)注

    關(guān)注

    25

    文章

    3722

    瀏覽量

    16320
收藏 人收藏

    評論

    相關(guān)推薦

    OpenHarmony南向開發(fā)案例:【智能風(fēng)扇】

    智能風(fēng)扇設(shè)備不僅可以接收數(shù)字管家應(yīng)用下發(fā)的指令來控制風(fēng)扇開啟的時間,調(diào)節(jié)風(fēng)扇擋位,更改風(fēng)扇定時時間,而且還可以加入到數(shù)字管家的日程管理中。通過日程可以設(shè)定風(fēng)扇相關(guān)的任務(wù),使其在特定的時間段內(nèi),風(fēng)扇自動打開或者關(guān)閉,調(diào)節(jié)擋位大小和定時時間;通過日程管家還可以實現(xiàn)風(fēng)扇和其他的智能
    的頭像 發(fā)表于 04-09 17:35 ?907次閱讀
    <b class='flag-5'>OpenHarmony</b><b class='flag-5'>南向</b><b class='flag-5'>開發(fā)案</b>例:【<b class='flag-5'>智能</b>風(fēng)扇】

    OpenHarmony南向開發(fā)案例:【分布式畫板】

    使用OpenHarmony3.1-Release開發(fā)的應(yīng)用。通過OpenHarmony的分布式技術(shù),使多人能夠一起畫畫。
    的頭像 發(fā)表于 04-12 14:40 ?1039次閱讀
    <b class='flag-5'>OpenHarmony</b><b class='flag-5'>南向</b><b class='flag-5'>開發(fā)案</b>例:【分布式畫板】

    OpenHarmony南向開發(fā)案例:【智能油煙機】

    基于Hi3516開發(fā)板,使用開源OpenHarmony開發(fā)的應(yīng)用。
    的頭像 發(fā)表于 04-18 15:54 ?1057次閱讀
    <b class='flag-5'>OpenHarmony</b><b class='flag-5'>南向</b><b class='flag-5'>開發(fā)案</b>例:【<b class='flag-5'>智能</b>油煙機】

    OpenHarmony鴻蒙南向開發(fā)案例:【智能加濕器】

    智能加濕器具有實時監(jiān)控其所處環(huán)境溫度、濕度,并通過數(shù)字管家設(shè)置日程,自動打開加濕器控制濕度功能。
    的頭像 發(fā)表于 04-19 15:50 ?1410次閱讀
    <b class='flag-5'>OpenHarmony</b>鴻蒙<b class='flag-5'>南向</b><b class='flag-5'>開發(fā)案</b>例:【<b class='flag-5'>智能</b>加濕器】

    OpenHarmony鴻蒙南向開發(fā)案例:【智能貓眼(基于Hi3518開發(fā)板)】

    基于Hi3518開發(fā)板,使用開源OpenHarmony開發(fā)的RTSP協(xié)議流媒體應(yīng)用。達到將Hi3518開發(fā)板中攝像頭獲取的數(shù)據(jù)通過RTSP協(xié)議傳輸?shù)绞謾C并顯示 。
    的頭像 發(fā)表于 04-22 15:46 ?2025次閱讀
    <b class='flag-5'>OpenHarmony</b>鴻蒙<b class='flag-5'>南向</b><b class='flag-5'>開發(fā)案</b>例:【<b class='flag-5'>智能</b>貓眼(基于Hi3518<b class='flag-5'>開發(fā)</b>板)】

    OpenHarmony南向能力征集令

    1、適配過程中缺少哪些接口能力或者南向能力,需要OpenHarmony去補齊的?例如內(nèi)核、編譯、器件適配、單板適配等; 2、對標(biāo)linux,需要OpenHarmony提供哪些能力?比如V4L2
    發(fā)表于 04-09 15:32

    鴻蒙OpenHarmony南向/北向快速開發(fā)教程-迅為RK3568開發(fā)

    P2_OpenHarmony功能框架 P3_OpenHarmony技術(shù)特性 P4_OpenHarmony支持設(shè)備類型 p5_南向開發(fā)和北向
    發(fā)表于 07-23 10:44

    華為開發(fā)者分論壇HarmonyOS學(xué)生公開課-OpenHarmony Codelabs開發(fā)案

    2021華為開發(fā)者分論壇HarmonyOS學(xué)生公開課-OpenHarmony Codelabs開發(fā)案
    的頭像 發(fā)表于 10-24 11:25 ?1922次閱讀
    華為<b class='flag-5'>開發(fā)</b>者分論壇HarmonyOS學(xué)生公開課-<b class='flag-5'>OpenHarmony</b> Codelabs<b class='flag-5'>開發(fā)案</b>例

    OpenHarmony Dev-Board-SIG專場:南向共建案例分享

    OpenHarmony南向共建案例分享: 審核編輯:金巧
    的頭像 發(fā)表于 12-28 14:16 ?966次閱讀
    <b class='flag-5'>OpenHarmony</b> Dev-Board-SIG專場:<b class='flag-5'>南向</b>共建案例分享

    基于OpenHarmony智能門鎖設(shè)計

    本項目的場景是智能家居。通過 OpenHarmony 源碼與 Hi3861 開發(fā)板進行智能門鎖的項目開發(fā)
    的頭像 發(fā)表于 04-10 11:05 ?1162次閱讀

    鴻蒙NEXT南向開發(fā)案例:【智能臺燈】

    鴻蒙南向開發(fā)智能臺燈案例
    的頭像 發(fā)表于 04-03 18:00 ?1013次閱讀
    鴻蒙NEXT<b class='flag-5'>南向</b><b class='flag-5'>開發(fā)案</b>例:【<b class='flag-5'>智能</b>臺燈】

    OpenHarmony南向開發(fā)案例:【智能中控屏】

    基于Hi3516開發(fā)板,使用開源OpenHarmony開發(fā)的應(yīng)用。通過控制面板可以控制同一局域網(wǎng)內(nèi)的空調(diào),窗簾,燈等智能家居設(shè)備。
    的頭像 發(fā)表于 04-17 16:12 ?390次閱讀
    <b class='flag-5'>OpenHarmony</b><b class='flag-5'>南向</b><b class='flag-5'>開發(fā)案</b>例:【<b class='flag-5'>智能</b>中控屏】

    OpenHarmony南向開發(fā)案例:【智能照相機】

    基于Hi3516開發(fā)板,使用OpenHarmony3.0-LTS開發(fā)的應(yīng)用。通過獲取攝像頭數(shù)據(jù),實現(xiàn)預(yù)覽拍照以及路視頻等功能。并且通過后臺AI服務(wù)識別喚醒詞來進行語音控制拍照及錄制視頻。
    的頭像 發(fā)表于 04-18 22:19 ?430次閱讀
    <b class='flag-5'>OpenHarmony</b><b class='flag-5'>南向</b><b class='flag-5'>開發(fā)案</b>例:【<b class='flag-5'>智能</b>照相機】

    OpenHarmony鴻蒙南向開發(fā)案例:【智能門鈴】

    智能門鈴?fù)ㄟ^監(jiān)控來訪者信息,告訴主人門外是否有人按鈴、有陌生人靠近或者無人狀態(tài)。
    的頭像 發(fā)表于 04-19 15:35 ?598次閱讀
    <b class='flag-5'>OpenHarmony</b>鴻蒙<b class='flag-5'>南向</b><b class='flag-5'>開發(fā)案</b>例:【<b class='flag-5'>智能</b>門鈴】

    OpenHarmony鴻蒙南向開發(fā)案例:【智能貓眼(基于3516開發(fā)板)】

    基于Hi3516開發(fā)板,使用開源OpenHarmony開發(fā)的RTSP協(xié)議流媒體應(yīng)用。達到將Hi3516開發(fā)板中攝像頭獲取的數(shù)據(jù)通過RTSP協(xié)議傳輸?shù)绞謾C并顯示 。
    的頭像 發(fā)表于 04-19 22:01 ?608次閱讀
    <b class='flag-5'>OpenHarmony</b>鴻蒙<b class='flag-5'>南向</b><b class='flag-5'>開發(fā)案</b>例:【<b class='flag-5'>智能</b>貓眼(基于3516<b class='flag-5'>開發(fā)</b>板)】