OpenHarmony實戰(zhàn)開發(fā)——宿舍全屋智能開發(fā)指南

項目說明

基于OpenAtom OpenHarmony(以下簡稱“OpenHarmony”)、數(shù)字管家開發(fā)宿舍全屋智能,實現(xiàn)碰一碰開門、碰一碰開燈、碰一碰開風扇以及煙感檢測。因為各項目開發(fā)流程大體相似,本文主要以碰一碰開門為例介紹如何在現(xiàn)有OpenHarmony開源代碼的基礎上實現(xiàn)我們想要的功能。

需要提前準備的設備:搭載HarmonyOS系統(tǒng)的手機一臺,API 6+;搭載Hi3861模組的主板,不限于HiSpark、小熊派套件;7.4V電池、一個舵機、若干導線。最終的碰一碰開門、開燈、風扇效果如下:

智能臺燈與風扇(包括門鎖)、數(shù)字管家應用、云平臺三部分數(shù)據(jù)流如下圖所示。數(shù)字管家應用下發(fā)風速、亮度調(diào)節(jié)等設備控制指令到云平臺,云平臺發(fā)送到指定設備,同時風扇、臺燈等設備上報當前狀態(tài)到云平臺,云平臺再發(fā)送至數(shù)字管家應用,實現(xiàn)用戶可視化操作,實時控制智能設備。

開發(fā)流程

項目主要包含:①搭建設備端開發(fā)環(huán)境、②數(shù)字管家安裝、③配置NFC標簽、④實操驗證,共四個部分。開發(fā)過程中各關鍵環(huán)節(jié)如下圖,整體思路是準備軟硬件環(huán)境,編寫業(yè)務代碼,燒錄測試,若開發(fā)時遇到問題可參考該圖進行排查。

開發(fā)環(huán)境搭建主要分為設備端環(huán)境、數(shù)字管家兩部分。設備端使用DevEco Device Tools最新版本,在ubuntu平臺開發(fā),在本項目中使用該工具編輯源碼、下載二進制文件;數(shù)字管家使用DevEco Studio Beta3.1及以上版本,在windows平臺開發(fā)。

搭建設備端開發(fā)環(huán)境

DevEco Device Tools搭建

第一步,在Ubuntu20.04系統(tǒng)搭建設備端開發(fā)環(huán)境,支持源碼編輯、編譯、下載一站式開發(fā)。在Ubuntu系統(tǒng)搭建DevEco Device Tools。

第二步,安裝編譯工具鏈,Hi3861V100開發(fā)板Ubuntu環(huán)境工具鏈下載鏈接gn、ninja、gcc_riscv32。

其余參考工具鏈管理。添加工具后如下圖:

Ubuntu環(huán)境編譯工具準備

// A.基礎依賴         sudo apt-get install -y build-essential gcc g++ make zlib* libffi-dev  // -安裝 scons  python3 -m pip install scons  // -查看版本,3.0.4以上  scons -v // B.安裝python模塊  sudo pip3 install setuptools kconfiglib pycryptodome ecdsa six --upgrade --ignore-installed six// C.添加gcc_riscv32(WLAN模組類編譯工具鏈) 在安裝DevEco Device Tools時已經(jīng)下載  // -解壓到根目錄  tar -xvf gcc_riscv32-linux-7.3.0.tar.gz -C ~  // -添加環(huán)境變量  vim ~/.bashrc  // -最后一行加入:export PATH=~/gcc_riscv32/bin:$PATH  // -確認安裝是否正常,有返回版本號即可。riscv32-unknown-elf-gcc -v

設備端源碼下載

第一步,碼云工具安裝

cd ~
curl https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > /usr/local/bin/repo
chmod a+x /usr/local/bin/repo
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple requests

第二步,獲取源碼。OpenHarmony 1.0.1版本

mkdir ~/OpenHarmony1.01
cd ~/OpenHarmony1.01
repo init -u git@gitee.com:openharmony/manifest.git -b OpenHarmony_1.0.1_release --no-repo-verify
repo sync -c
repo forall -c 'git lfs pull'

獲取相關產(chǎn)品解決方案,并復制到源碼中,具體操作如下:

//下載產(chǎn)品解決方案到ubuntu,解壓在非中文路徑下即可。下載鏈接為:
https://gitee.com/openharmony-sig/knowledge_demo_smart_home
//拷貝解決方案
cp -rfa  ~/knowledge_demo_smart_home/dev/device/bearpi  ~/OpenHarmony1.01/device/
cp -rfa  ~/knowledge_demo_smart_home/dev/team_x  ~/OpenHarmony1.01/vendor/
cp -rfa  ~/knowledge_demo_smart_home/dev/third_party/iot_link  ~/OpenHarmony1.01/third_party/

第三步(可選,若使用HiSpark套件需要修改)

//1.修改usr_config.mk 文件
路徑:device/hisilicon/hispark_pegasus/sdk_liteos/build/config/usr_config.mk
使能如下配置項
CONFIG_I2C_SUPPORT=y
CONFIG_PWM_SUPPORT=y
//2.修改wifiservice 文件夾
路徑:device/hisilicon/hispark_pegasus/hi3861_adapter/hals/communication/wifi_lite/wifiservice/source/wifi_hotspot.c
EnableHotspot函數(shù)中屏蔽如下字段
139行     //if (SetHotspotIpConfig() != WIFI_SUCCESS) {
140行     //    return ERROR_WIFI_UNKNOWN;
141行     //}
//3.DispatchConnectEvent函數(shù)下 屏蔽StaSetWifiNetConfig相關代碼行
路徑:device/hisilicon/hispark_pegasus/hi3861_adapter/hals/communication/wifi_lite/wifiservice/source/wifi_device.c
239行         //StaSetWifiNetConfig(HI_WIFI_EVT_CONNECTED);
260行        //StaSetWifiNetConfig(HI_WIFI_EVT_DISCONNECTED);

第四步,安裝ohos-build工具

需要使用ohos-build 0.2.0 版本編譯。在OpenHarmony 1.0.1源碼根目錄下,執(zhí)行:

pip3 install build/lite
// 添加環(huán)境變量
vim ~/.bashrc
export PATH=~/.local/bin:$PATH
source ~/.bashrc
// 然后執(zhí)行
hb -h

返回一下信息說明正確安裝:

第五步,打開工程

打開Visual Studio Code下的DevEco Device Tools,導入1.0.1工程選擇對應的開發(fā)板即可。打開終端,cd到源碼路徑,執(zhí)行hb set,選擇smart_lamp,然后執(zhí)行hb build 編譯。

在~/openharmony1.01/out/bearpi_hm_nano/smart_lamp下生成Hi3861_wifiiot_app_allinone.bin說明一切操作正常。如果遇到uninstall clang、not found gn、ninja等問題,需要配置環(huán)境變量,還要檢測ohos-build是不是0.2.0版本。具體可以參考個人總結(jié)的如下措施:

第六步,燒錄二進制文件連接開發(fā)板到電腦USB,在DevEco Device Tools點擊配置工程,設置串口號,具體如下圖:

然后將第五步生成的Hi3861_wifiiot_app_allinone.bin拷貝到~/openharmony1.01/out/hispark_pegasus/wifiiot_hispark_pegasus下【因為工具默認下載該路徑下的bin文件】 點擊Project Task下的upload,按下板子上的復位即可燒錄。

設備端編譯

1.3節(jié)中只是把開源代碼布置到我們的筆記本中,要實現(xiàn)開門需要添加自己的業(yè)務代碼。例如門鎖需要使用到舵機,我在smart_lamp解決方案的基礎上進行修改。具體操作如下:

第一步,添加舵機控制

打開操作GPIO的vendor/team_x/smart_lamp/demo_smartlamp/E53_SC1/E53_SC1.c文件添加如下函數(shù):

/* @brief  Servo  control *
 @param angle  input value: 0-200 *             
*/
void My_servo(int angle)
{      
     int j=0;  
     int k=20000/200; //實際應該是20000/180
     angle = k*angle;  
     for (j=0;j<5;j++)
      {    
           GpioSetOutputVal(servoIDundefined 1);       
           hi_udelay(angle); //angle ms    
           GpioSetOutputVal(servoIDundefined 0);       
           hi_udelay(20000-angle);//   
       }//20ms 控制舵機        

第二步,添加初始化GPIO 10的語句

#define SERVO_1_GPIO 10
int E53SC1_InitMainLed(void)
{
    IoTGpioInit(CN_MAIN_LED_GPIO);
    IoTGpioSetFunc(CN_MAIN_LED_GPIOundefined CN_MAIN_LED_GPIO_FUNC);
    IoTGpioSetDir(CN_MAIN_LED_GPIOundefined IOT_GPIO_DIR_OUT);
    IoTPwmInit(CN_MAIN_LED_PWDOUT);
     
    IoTGpioInit(SERVO_1_GPIO);
    IoTGpioSetFunc(SERVO_1_GPIOundefined  IOT_GPIO_FUNC_GPIO_10_GPIO);
    IoTGpioSetDir(SERVO_1_GPIOundefined  IOT_GPIO_DIR_OUT);
    return 0;
}

第三步,添加業(yè)務代碼

int E53SC1_SetMainLed(int statusundefined int dutyCycle)
{
    int ret = 0;
    if (status == CN_BOARD_SWITCH_ON) {
        ret = IoTPwmStart(CN_MAIN_LED_PWDOUTundefined dutyCycleundefined CN_MAIN_LED_FRE);
        My_servo(1000); //開門
    } else {
        ret = IoTPwmStop(CN_MAIN_LED_PWDOUT);
        My_servo(10000); //上鎖
    }
    RaiseLog(LOG_LEVEL_INFOundefined "status=%dundefined dutyCycle=%dundefined ret = %d"undefined statusundefined dutyCycleundefined ret);
    return 0;
}

第四步,編譯、下載

參考1.3節(jié)第五步、第六步,直接編譯即可無需再次導入工程。因為我使用的是ubuntu物理機器,為實現(xiàn)一站式開發(fā)特地安裝DevEco Device tools,OpenHarmony 2.0、3.0版本完全可以脫離hb工具編譯。燒錄完成后,按下板子復位鍵,手機可以發(fā)現(xiàn)模組發(fā)出的WIFI信號teamX-Lamp01。

數(shù)字管家安裝

DevEco Studio 安裝

第一步,DevEco Studio下載安裝,安裝完成后要配置Windows環(huán)境變量(參考:https://docs.openharmony.cn/pages/v3.1/zh-cn/application-dev/quick-start/start-overview.md/)。第二步,打開DevEco Studio設置下的SDK Manager,安裝SDK(API6)紅框中的都需要下載。值得注意的是第一步安裝Studio時會下載OpenHarmony SDK,第二步的SDK不一樣,不能在同一個路徑下,否則會被替換掉原有的。

數(shù)字管家APP源碼獲取

數(shù)字管家在windows平臺編譯安裝到手機上,下載鏈接為:https://gitee.com/openharmony-sig/knowledge_demo_smart_home下載后解壓在非中文路徑下即可。

使用DevEco Studio打開數(shù)字管家,路徑如下:

數(shù)字管家APP安裝

第一步,點擊右上角個人頭像,登錄

第二步,進入AGC平臺AGC(AppGallery Connect) 地址https://developer.huawei.com/consumer/cn/service/josp/agc/index.html#/

第三步,在AGC平臺創(chuàng)建項目,然后創(chuàng)建應用

第四步,回到上一節(jié)DevEco Studio 打開的工程,修改三個地方,具體路徑如下

./entry/src/config.json

./netconfig/src/main/config.json

./netconfig/src/main/js/default/pages/index/index.js

第五步,自動簽名

首先把自己的手機連接到電腦上,打開開發(fā)人員選項–> 開啟USB調(diào)試–>同意調(diào)試 然后打開DevEco Studio的file–Project Structure–Project–Signing Configs–automatically generate signing 如下圖:

第六步,編譯下載。

點開entry,進入debug configuration,在entry下勾選deploy multi haps packages,確認后退出。因為數(shù)字管家包含entry、netconfig兩個module,要同時安裝。

第七步,安裝數(shù)字管家APP 點擊運行,稍等片刻手機上即可出現(xiàn)數(shù)字管家APP,輸入手機號,登錄即可。

配置NFC標簽

申請product ID

將搭載HarmonyOS的手機,登錄你的華為賬號,并在華為應用市場中下載安裝應用調(diào)測助手打開選擇NFC,申請即可。

注冊服務

第一步,登陸華為開發(fā)者聯(lián)盟https://developer.huawei.com/consumer/cn/,點擊管理中心,創(chuàng)建原子化服務。

第二步,按照提示填寫即可,在標簽配置頁面,填寫在應用調(diào)測助手申請的Product ID 型號00。在FA配置頁面,一定要查看第2.3節(jié)第四步自己寫的包名,模塊名就是entry,添加設備就是com.example.distschedule.AddDeviceAbility:

第三步,創(chuàng)建測試,填寫華為賬號對應的手機號即可

寫入標簽

打開應用調(diào)測助手,選擇之前申請的ID,在自定義框填入如下數(shù)據(jù):

1246128c7b60ad1ed0286680f19206Lamp01308123456784011512teamX-Lamp01

更多設備NFC標簽

實操驗證

門鎖

開門需要一個簡單的裝置,之前有設計,參考hi3861 web端開門。

電路簡單,將7.4v電源經(jīng)過降壓穩(wěn)壓后分別給模組、舵機供電。

手機連上wifi,打開NFC開關,碰一下標簽即可喚起原子化界面(不能使用校園網(wǎng),會導致設備無法連接)測試效果如下圖:

小風扇

hb set時需要編譯smart_fan,同樣的下載源碼后,寫入NFC標簽

1246150601d88056b027dd2ca47205Fan01308123456784011511teamX-Fan01

手上的風扇的驅(qū)動電路如下圖,PWM控制風速:

臺燈

首先需要一個電磁繼電器、5V充電頭,可以同時為模組和臺燈供電(并聯(lián))。在臺燈源碼中初始化GPIO 9為輸出,將繼電器的信號端與GPIO 9 相連即可。開燈時,接通繼電器的NC-COM端,斷開NO-COM。

結(jié)語

以上案例實質(zhì)上還是在使用現(xiàn)有的解決方案、數(shù)字管家的服務器實現(xiàn),甚至連開門的操作UI都是臺燈的,雖然這個可以在數(shù)字管家修改圖標,但本質(zhì)還是沒有變化,本教程目的在于記錄數(shù)字管家碰一碰的開發(fā)入門,為后期再添加自己的解決方案、服務器作為參考。

寫在最后

  • 如果你覺得這篇內(nèi)容對你還蠻有幫助,我想邀請你幫我三個小忙:
  • 點贊,轉(zhuǎn)發(fā),有你們的 『點贊和評論』,才是我創(chuàng)造的動力。
  • 關注小編,同時可以期待后續(xù)文章ing??,不定期分享原創(chuàng)知識。
  • 想要獲取更多完整鴻蒙最新學習知識點,請移步前往小編:https://gitee.com/MNxiaona/733GH/blob/master/jianshu
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容