一、簡介
智能金屬探測器是基于 OpenAtom OpenHarmony(以下簡稱“OpenHarmony”)操作系統,利用電磁感應原理來探測周圍的金屬物體。該樣例采用多設備協同的方式,兼容 OpenHarmony 設備開發與應用開發,整個樣例體現了 OpenHarmony 的 NAPI、eTS UI、UI 管理狀態 @state 和音頻播放等技術特性。
二、運行效果
當周圍有金屬靠近時,設備端蜂鳴器會發出警報并把檢測信息通過 Wi-Fi 模組發送給應用端。在應用端收到檢測信息之后,會通過屏幕顯示檢測狀態并語音播報檢測結果。
三、功能實現
Geek_Lite_Board 開發板通過 AK8963 電子羅盤芯片獲取地球磁場強度。通常地球的磁場強度是 0.4-0.6 高斯,當金屬靠近電子羅盤芯片時,根據電磁感應原理,金屬在磁場中的感應會引起磁場信號的變化。Geek_Lite_Board 開發板通過 Wi-Fi 與潤和 RK3568 開發板實時通信,把檢測到的信息實時上傳。潤和 RK3568 開發板作為應用端,采用方舟開發框架(ArkUI)基于 eTS 擴展的聲明式開發范式編寫頁面,通過 NAPI 接口接收設備端 Geek_Lite_Board 開發板的檢測信息,使用 OpenHarmony 媒體子系統中的音頻播放功能實現語音播報金屬檢測狀態。
磁場數據獲取
AK8963 一款具有高靈敏度霍爾傳感器技術的三軸電子羅盤集成芯片,內部包含磁力傳感器,可以在 x 軸、y 軸、z 軸檢測地球磁場強度。
uint8_t Mpu_Read_Bytes(uint8_t const regAddr, uint8_t *pData, uint8_t len)
● 獲取 AK8963 的磁場原始數據。● 對 AK8963 原始磁場數據進行轉化,得到磁場強度,單位高斯。Mpu_Data.mag_x = (MPU_BUFF[16] << 8) | MPU_BUFF[15]; // x軸磁場數據
Mpu_Data.mag_y = (MPU_BUFF[18] << 8) | MPU_BUFF[17]; // y軸磁場數據
Mpu_Data.mag_z=(MPU_BUFF[20]<8)|MPU_BUFF[19];//z軸磁場數據
Gauss_Mag_z = Mpu_Calc.mag_z * 0.15f * 0.01f;
檢測金屬信息
首先采集 100 組 z 軸磁場強度基準數據,然后對這些數據做平均處理,由此得到 z 軸磁場強度的零點數據。以 origin_mag_z 作為零點,把獲取到的磁場數據與它進行對比,以此來判斷是否檢測到金屬。const uint16_t calibrateCount = 1000; // 測量最大次數為1000
const uint16_t calibrateFrequency = 5; // 每測量5次取一次有效值
const uint16_t calibrateAverageCount = 100; // 取100次有效值
if(i < calibrateCount){
i++;
if(i%calibrateFrequency == calibrateFrequency){
Mag_z_buff[j++] = Gauss_Mag_z;
if(j >= calibrateAverageCount){
i = calibrateCount;
Mag_z_Flag = true;
for(k=0;k
origin_mag_z += Mag_z_buff[k];
}
origin_mag_z = origin_mag_z / calibrateAverageCount;
// 校準完成,藍燈亮,發送給應用端 "CalibrateOK"
BLUE_LED_ON();
memset(buff,0x00,sizeof(buff));
sprintf(buff,"angle:%s","CalibrateOK");
ESP8266_send_data(buff,strlen(buff));
}
}
}
NAPI獲取數據
NAPI(Native API)是 OpenHarmony 標準系統的一種 JS API 實現機制,適合封裝 IO、CPU 密集型、OS 底層等能力并對外暴露 JS 接口,通過 NAPI 可以實現 JS 與 C/C++ 代碼互相訪問。潤和 RK3568 應用端通過 NAPI 來接受設備端發出的檢測信息。 ●底層 NAPI 模塊封裝封裝模塊名為 tcpserverapi,下載至 tcpservermodule 文件夾。下載完成后放到 3.1Release 源碼根目錄,并配置編譯腳本;第一次編譯完成需要燒寫整個鏡像,后面修改模塊源碼,只需將庫 send 到板子里面。命令如下:●應用端導入 NAPI 模塊// 先掛載,再send
hdc_std shell mount -oremount,rw /
hdc_stdfilesendlibtcpserverapi.z.sosystem/lib/module/libtcpserverapi.z.so
import tcpserverapi from '@ohos.tcpserverapi'
●應用端 NAPI 接口調用// 調用initServer接口 初始化 TCP 服務器
tcpserverapi.initServer()
// 調用recvMsg 獲取并解析Geek_Lite_Board開發板發送過來的角度
tcpserverapi.recvMsg().then((result) => {
var resultAngle = result.angle;
})
UI狀態顯示與管理
如上圖所示為檢測中頁面,整體布局分為文字標題和檢測狀態示意圖。
文字標題由 Flex 布局容器 text 組件實現,用于呈現一段信息,如下為 text 接口相關屬性。
Flex(options?: { direction?: FlexDirection, wrap?: FlexWrap, justifyContent?: FlexAlign, alignItems?: ItemAlign, alignContent?: FlexAlign })
●通過調用 recvMsg 接口接送金屬探測器的消息,并修改首頁展示狀態,關鍵實現代碼描述如下:其中 “ var intervalID = setInterval(() => ” 使用了定時器,定時調用 “recvMsg” 方法,通過 NAPI 獲取金屬檢測結果。aboutToAppear() {
var intervalID = setInterval(() => {
tcpserverapi.recvMsg().then((result) => {
}
}
}
當通過 NAPI 方式獲取到檢測信息為 “ metal:Detected ” 時,設置 detectionState 為發現金屬狀態,屏幕顯示檢測到金屬頁面;當通過 NAPI 方式獲取到的檢測信息為 “ metal:UnDetected ” 時,此時并未檢測到任何金屬信息,設置 detectionState 為檢測中狀態,屏幕顯示檢測中狀態頁面。if (resultMetal.match("metal:")) {
this.metal = resultMetal.slice(6);
console.info('=======' + this.metal)
if (this.metal === 'Detected') {
this.detectionState = '發現金屬';
this.detection = $r("app.media.img_detected");
this.isDisplay = false;
}
else if (this.metal === 'UnDetected' || this.metal ==='CalibrateOK') {
this.detectionState = '檢測中';
this.detection = $r("app.media.img_detecting");
this.isDisplay = true;
}
}
語音播報檢測狀態
檢測到金屬后,RK3568 會播報已探測到金屬的語音信息,達到通知用戶的目的,通過 OpenHarmony 媒體子系統的音頻播放功能實現。OpenHarmony 媒體子系統為開發者提供一套簡單且易于理解的接口,使得開發者能夠方便接入系統并使用系統的媒體資源。媒體子系統包含了音頻播放、視頻播放、音頻錄制和視頻錄制等常用功能。音頻播放的主要工作是將音頻數據轉碼為可聽見的音頻模擬信號并通過輸出設備進行播放,同時對播放任務進行管理。本樣例主要通過導入 media 模塊、創建音頻播放實例、實現音頻播放接口和實現暫停播放接口等流程實現。
●導入media模塊
import media from '@ohos.multimedia.media';
●創建音頻播放實例// OH media對象
privateplayer=media.createAudioPlayer();
●實現音頻播放接口
使用 play() 調用開始播放音頻資源,需在完成音頻數據加載后,即 src 屬性設置完成后才能調用。
play():void
四、總結
本文簡述了如何使用 OpenHarmony 進行多設備的開發,演示了 NAPI、eTS UI、UI 管理狀態 @state 和音頻播放等技術特性的應用,通過這些多元化的功能,我們最終實現了金屬探測器樣例。豐富多樣的 OpenHarmony 開發樣例離不開廣大合作伙伴和開發者的貢獻,如果你也想把自己開發的樣例分享出來,歡迎把樣例提交到 OpenHarmony 知識體系 SIG 倉來,一起實現開發樣例共建。五、參考鏈接
RK3568開發板上絲滑體驗OpenHarmony標準系統
https://gitee.com/openharmony-sig/knowledge_demo_smart_home/tree/master/dev/docs/rk3568_quick_start
在Windows編譯OpenHarmony工程
https://gitee.com/Cruise2019/team_x/blob/master/homework/ohos_build_win/readme.md
OpenHarmony NAPI 學習文檔
https://gitee.com/javen678/hello-ohos-napi/tree/master/doc#/javen678/hello-ohos-napi/blob/master/doc/1.HelloNAPI.md
OpenHarmony基于eTS擴展的聲明式開發范式
https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/arkui-ts/Readme-CN.md
音頻播放開發指導
https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/media/audio-playback.md
從零開發金屬探測器應用
https://gitee.com/openharmony-sig/knowledge_demo_temp/blob/master/docs/metal_detection/quick_develop.md
GEEKROS官網
https://www.geekros.com/
審核編輯 :李倩
-
探測器
+關注
關注
14文章
2657瀏覽量
73292 -
蜂鳴器
+關注
關注
12文章
893瀏覽量
46119 -
OpenHarmony
+關注
關注
25文章
3753瀏覽量
16677
原文標題:基于OpenHarmony的智能金屬探測器
文章出處:【微信號:gh_e4f28cfa3159,微信公眾號:OpenAtom OpenHarmony】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論