天天看點

有“智慧”的電子牌

有“智慧”的電子牌​

一、産品介紹​

智能電子牌Demo是基于OpenHarmony系統開發的應用,其中主要由日程資訊擷取子產品、實時天氣子產品、時間擷取子產品、定時提醒子產品與UI顯示子產品組成。通過該裝置我們不僅可以随時檢視當天日程規劃,設定定時提醒,還可以檢視時間,日期以及室内外溫濕度,空氣PM值等實時天氣狀況。

1. 裝置運作效果

将潤和Hi3516DV300 AI Camera開發闆進行OpenHarmony 1.0.1 版本的固件燒錄,開發闆的網絡連接配接以及智能電子牌應用程式的安裝,之後打開智能電子牌應用,我們可以看到運作效果圖如下:

有“智慧”的電子牌

我們可以看到實時擷取的時間天氣(螢幕左半部分)與日程(螢幕右半部分)等資訊,還可以通過滑動螢幕右上角的時間選擇器選擇提醒時間;日程資訊包括日程的起始與終止時間,日程名與日程的執行細節等。

接收到日程時如下圖:

有“智慧”的電子牌

2. 裝置與雲端的互動

有“智慧”的電子牌

我們在手機端的數字管家APP中更新日程資訊後對應資訊将上傳至雲端,我們開發的智能電子牌應用會通過HTTP協定主動擷取雲端日程資訊并進行顯示更新。

3.智能電子牌主要功能描述

智能電子牌在進行網絡連接配接配置後可以随時檢視當天日程規劃,日程資訊包括日程的起始與終止時間,日程名與日程的執行細節;通過設定定時提醒實作定點準時提示;還可以在螢幕上檢視實時時間,日期以及室内外溫濕度,空氣PM值等實時天氣狀況。使用者可以通過人性化的顯示服務輕松記住自己的日程規劃,了解到目前的天氣狀況是否适合戶外運動,同時,智能電子牌還能作為一款自動校準的實時時鐘,貼心地服務于使用者,為使用者的生活帶來舒适與便捷。

二、項目過程​

智能電子牌項目依托于OpenHarmony開源開發者成長計劃,項目的推進離不開導師的指導與幫助。完成該項目時我經曆了三個階段:開發環境的搭建,C++語言的學習,智能電子牌項目的開發。

開發環境的搭建

該項目的源碼編譯是在Ubuntu環境下進行的,我的開發“裝備”隻有一台Windows電腦,是以我們想進行下一步開發與調試就必須在Windows環境下搭建好虛拟機,然後在虛拟機的Ubuntu環境下搭建好對應編譯環境。具體的搭建流程請見智能電子牌的開發部分。

C++語言的學習

該裝置端項目是基于C++語言開發的,但我隻有C語言基礎,是以我在寒假期間借助線上學習平台等學習平台實作了C++語言的學習,本項目的UI元件并沒有完善的開發手冊,故而該項目被官方評定的開發難度為高等,本項目的開發離不開大量的摸索、學習與實踐,與此同時,閱讀大量官方庫檔案的過程極大地提高了我的C++語言熟練程度。

智能電子牌項目的開發

本項目産品的邏輯圖如下:

有“智慧”的電子牌

智能電子牌通過sntp協定主動于伺服器擷取實時時間;通過天氣API實時擷取天氣資訊,并且會根據天氣狀況給出一些暖心建議;通過http協定主動在華為雲擷取我們在手機或平闆端數字管家中設定的日程,展示日程的起始終止時間,日程名與日程細節;通過在時間選擇器中選擇時間,可以起到定時提醒日程的作用。

我将開發過程中對既有代碼的一些了解整理在了本文中:智能電子牌——裝置端

三、安裝教程​

為了讓小夥伴們能在自己的開發闆上運作智能電子牌項目的代碼,我将安裝該項目應用的教程整理如下:

硬體準備

預裝Windows系統的PC機;Hi3516DV300 IoT Camera開發闆;USB轉序列槽線、網線(Windows工作台通過USB轉序列槽線、網線與Hi3516DV300 開發闆連接配接)。1.完成開發闆環境的搭建(即完成固件燒錄與Ubuntu的編譯環境搭建,詳細講解見智能電子牌的開發)後,在OpenHarmony的vendor目錄下建立team_x的目錄:

mkdir vendor/team_x      
有“智慧”的電子牌

2.将智能電子牌的代碼拷貝到建立的team_x下面。

已經合倉的代碼連結:

electronic_board

​​https://gitee.com/openharmony-sig/knowledge_demo_smart_home/tree/master/dev/team_x/electronic_board_1​​

3.之後可以進行應用程式的編譯,編譯指令共兩條hb set與hb build -f:

首先在Terminal内輸入:

hb set      

之後通過鍵盤上的上下鍵選擇electronic_board,之後回車進行選中;

之後進行全量編譯,輸入:

hb build -f      

當編譯完成後會顯示success。

4.編譯完成後,out/hispark_taurus/electronic_board/libs/usr/目錄下的libelectrBoard.so檔案即為我們的目标應用檔案,該檔案與工程目錄下的res以及config.json檔案通過壓縮打包成zip格式(三個檔案直接壓縮,不能壓縮檔案夾),并将字尾名改為hap後即可通過挂載NFS的方式進行應用安裝。具體内容見下方“五、文檔目錄”部分。

四、項目展示​

1.代碼目錄結構

如下為裝置端核心代碼的目錄結構:

|—— BUILD.gn                              // 編譯腳本
|—— res                                   // 圖檔資源檔案
|—— config.json                           // 安裝包所需要的json檔案
|—— include
|       |—— electronic_board_ability.h   // 入口類的頭檔案
|       |—— electr_board_ability_slice.h // 首頁面的頭檔案,包含了時間選擇器
|       |—— shcedule_list_view.h          // 日程清單顯示類的頭檔案
|       |—— weather_time_view.h           // 天氣以及時間顯示類的頭檔案
|       |—— native_base.h                 // 基類的頭檔案
|       |—— event_listener.h              // 事件定義及實作的類
|       |—— ui_config.h                   // 界面相關坐标定義的頭檔案
|       |—— schedule_server.h             // 日程服務相關定義的頭檔案
|       |—— schedule_info.h               // 日程内容類的頭檔案
|       |—— common.h                      // 天氣擷取相關定義的頭檔案
|       |—— sntp.h                        // 時間擷取相關定義的頭檔案
|        |—— link_list.h                    // 連結清單相關定義函數的解釋頭檔案
|        |—— schedule_net_status.h         // 擷取與運作網絡連接配接相關的頭函數
|       |__ LinkList.h                    // 連結清單相關定義的頭檔案
|
|__ src
        |—— electronic_board_ability.cpp 
        |—— electr_board_ability_slice.cpp// 首頁面相關實作
        |—— schedule_list_view.cpp        // 日程清單顯示類的實作
        |—— weather_time_view.cpp         // 天氣以及時間顯示類的實作
        |—— common.c                      // 天氣擷取以及解析的實作
        |—— schedule_server.c             // 日程服務擷取的顯示
        |—— sntp.c                        // 網絡實時時間擷取的實作
        |—— schedule_net_status.c         // 擷取與運作網絡連接配接相關的實作
    |__ LinkList.c                        // 連結清單的實作      

已經合倉的代碼連結:

electronic_board

​​https://gitee.com/openharmony-sig/knowledge_demo_smart_home/tree/master/dev/team_x/electronic_board_1​​

2.成果細節示範

如下圖所示,電子牌應用功能區共分為三部分,左邊的時間天氣區,右下區域的日程區,右上區域的定時時間設定區:

有“智慧”的電子牌

時間天氣區中:

• 天氣通過天氣對應的API擷取地區對應的實時天氣資訊

• 實時時鐘是通過sntp協定擷取的

日程區中:

• 日程資訊是通過http協定與雲端對接主動擷取的數字管家設定的資訊,日程包含了日程的名字,以及開始時間及日程的内容,如下圖所示:

有“智慧”的電子牌

時間選擇區中:

• 通過滑動選擇需要提醒的時間,當實時時鐘與時間選擇區時間相同時會出現提示資訊,當使用者接收到提示資訊并重新設定時間選擇區的時間後提示資訊會消失,如下圖所示:

有“智慧”的電子牌

五、項目感受​

項目開發過程其實沒有很多人想象中的枯燥乏味,在我看來能夠開發出一款好用有價值的産品是一件很有成就感的事情。不可否認學習一門新的語言是很花費精力的,但是在學習與項目開發過程中自己的能力也在快速提升,這種學有所得的感覺正是我所追求的。

該項目是在原有代碼的基礎上進行了二次開發,老師們寫的源碼非常優美,當中的語言結構與建構方法都很值得我認真學習。在開發過程中我也曾碰到過蠻多困難的事情,因為到手的第一塊開發闆的boot出現了問題無法完成固件的燒錄,後來和導師一塊探索了一段時間才最終通過更換開發闆解決了這個問題,感謝電子發燒友官方和導師所提供的幫助。後面在搭建編譯環境的時候也出現了各種各樣的問題,感謝導師鐘老師的悉心指導,讓我最終解決了所有問題。

編譯一次源代碼的時間比較長(20min+),是以我每次對源碼的修改都十分謹慎,之後進行應用挂載後既有可能出現你滿意的UI與功能,也有可能出現各種亂碼甚至有可能應用沒辦法啟動,這一種類似“開獎”感覺的調試過程事後回想也是回味無窮。

總而言之,在項目開發過程中我學到了很多新知識,看到開發調試出預想的功能後我心裡也是充滿成就感,感謝官方提供的機會與導師的悉心教誨。

六、文檔目錄​

我在進行開發過程中将思路等整理為如下文檔:

注:如果隻追求項目内容複現的話僅檢視“開發文檔”中的文章“智能電子牌的開發”即可。

智能電子牌的開發

​​https://blog.csdn.net/weixin_46836693/article/details/124312294?spm=1001.2014.3001.5501​​

1、開發文檔

開發文檔說明了具體的開發内容與複現流程

智能電子牌的開發

​​https://blog.csdn.net/weixin_46836693/article/details/124312294?spm=1001.2014.3001.5501​​

智能電子牌——裝置端

​​https://blog.csdn.net/weixin_46836693/article/details/124312456?spm=1001.2014.3001.5501​​

智能電子牌——數字管家

​​https://blog.csdn.net/weixin_46836693/article/details/124312360?spm=1001.2014.3001.5501​​

2、裝置調試文檔

裝置調試文檔介紹了一些在項目開發過程中碰到的問題以及對應的解決方法。

Hi3516DV300開發闆固件燒錄經驗

​​https://blog.csdn.net/weixin_46836693/article/details/124312473?spm=1001.2014.3001.5501​​

通過NFC挂載加載應用心得

​​https://blog.csdn.net/weixin_46836693/article/details/124312536?spm=1001.2014.3001.5501​​

Ubuntu下環境變量設定的心得

​​https://blog.csdn.net/weixin_46836693/article/details/124312495?spm=1001.2014.3001.5501​​

智能電子牌——Gitee的使用

​​https://blog.csdn.net/weixin_46836693/article/details/124312569?spm=1001.2014.3001.5501​​

注:鐘祿平老師的裝置端開發檔案在我進行智能電子牌的應用開發中起到了很大的幫助,參考文章連結如下:

繼續閱讀