女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

OpenHarmony有氧拳擊之設備端開發

OpenAtom OpenHarmony ? 來源:OpenAtom OpenHarmony ? 作者:OpenAtom OpenHarmony ? 2022-08-13 10:34 ? 次閱讀

一、簡介

在一個風和日麗,陽光明媚的下午,碼農們都像往常一樣正在專注地碼代碼。突然前面的小哥哥站起來,手握開發板,來回出拳。這是怎么回事?

這是一款拳擊互動游戲,本文將帶你一同解開其中的奧秘。開發者從中不僅能體驗到學習知識的愉悅,還能享受到健身的樂趣。依托OpenAtom OpenHarmony(以下簡稱“OpenHarmony”)3.2 Beta1操作系統,樣例分為應用端和設備端兩部分。本文主要介紹設備端的實現,后續會分享應用端的開發。

設備端:采用小熊派BearPi-HM Nano(Hi3861)開發板,處理加速度計傳感器數據。

應用端:采用潤和DAYU200(RK3568)開發板,主要處理顯示及音效。

如下圖,左側為設備端,右側為應用端:開發者手握設備端小熊派開發板,觀察屏幕,根據應用端APP顯示,在指定的時間完成揮拳動作;揮拳信息經無線傳遞到應用端,應用端APP對揮拳時機有相應的計分規則,最后統計出總分。

de1d38d8-1a85-11ed-ba43-dac502259ad0.png

二、原理

相比正常狀態下,揮拳動作會引起手臂較大的加速度變化。根據這個特征,我們使用BearPi-HM_Nano開發板的擴展模塊E53_SC2,它內部集成了MPU6050傳感器,能夠讀取加速度的大小。

做揮拳動作實驗,統計數據,得到揮拳時加速度的閾值。程序執行時,把實時的數據與閾值進行比較,判斷是否觸發了揮拳動作。再經過無線通信,實時把數據發送到應用端。

三、加速度計傳感器使用說明

設備端的開發關鍵在對加速度計傳感器的使用,主要涉及兩點:1、重力加速度g的理解;2、如何把MPU6050寄存器的數據轉化為有單位的數據?

1、樣例使用的加速度傳感器是MPU6050,它有±2g、±4g、±8g和±16g四個量程可以選擇。一個g是指一個重力加速度,代表9.8米/秒2大小。舉個例子:假如設備從高處掉落,其加速計測量到的加速度將為0g,因為傳感器沒有受到力的擠壓,處在失重狀態;假如設備水平放在桌面上,則加速計測量出的加速度為1g(9.8米/秒2),我們可以理解為受到1g的壓力;

2、MPU6050采用16位的ADC采樣。16位的ADC采樣是什么意思?舉個例子:如果量程選擇(通過寄存器選擇)是±2g,16位的ADC采樣,表示的含義是用65536(即2的16次方)種情況去表達-2到+2g的情況。如下datasheet截圖顯示,AFS_SEL=0,表示±2g量程,當數據寄存器的數據為16384,對應表示受到1g的力。例如:數據寄存器讀取到的值為X,對應受到的力的大小為Y,則Y=X/16384,單位是g。

de6600f4-1a85-11ed-ba43-dac502259ad0.png

四、代碼解析

設備端代碼主要分為兩個線程:1、傳感器數據處理線程;2、TCP通信線程;它們之間通過事件的方式進行同步通信。

1、傳感器數據處理線程主要函數說明:


//E53_SC2模塊MPU6050傳感器數據處理主要流程static void DataHandleTask(void){    uint8_t ret;    ret = E53SC2Init();//MPU6050傳感器初始化及配置,配置為+—8g量程    if (ret != 0) {        printf("E53_SC2 Init failed!
");        return;    }    while (1)  {        ret = E53SC2ReadData(&data);//MPU6050傳感器寄存器數據讀取        if (ret != 0)  {            printf("E53_SC2 Read Data!
");            return;        }        AccDataHandle(&data);//MPU6050傳感器數據處理,轉化為單位為g的數據        if (myCaldata.Accel[ACCEL_X_AXIS] < 0) {            myCaldata.Accel[ACCEL_X_AXIS] = myCaldata.Accel[ACCEL_X_AXIS] * -1.0;         }        if (myCaldata.Accel[ACCEL_Y_AXIS] < 0) {            myCaldata.Accel[ACCEL_Y_AXIS] = myCaldata.Accel[ACCEL_Y_AXIS] * -1.0;         }        if (myCaldata.Accel[ACCEL_Z_AXIS] < 0) {            myCaldata.Accel[ACCEL_Z_AXIS] = myCaldata.Accel[ACCEL_Z_AXIS] * -1.0;         }        //判斷實時數據是否大于拳擊閾值Boxing_ACC,大于則設置事件       if (myCaldata.Accel[ACCEL_X_AXIS] > Boxing_ACC ||                          myCaldata.Accel[ACCEL_Y_AXIS] > Boxing_ACC || myCaldata.Accel[ACCEL_Z_AXIS] > Boxing_ACC) {            printf("MPU set flg
");            osEventFlagsSet(g_eventFlagsId, FLAGS_MSK1);//觸發拳擊事件        }        usleep(Delay_10ms);    }}#define MAX_POS_NUM 32767#define LSB 4096.0//MPU6050傳感器數據處理,轉化為單位為g的數據int AccDataHandle(E53SC2Data *dat){    //量程為+-8g,所以分辨率為4096    if (dat->Accel[ACCEL_X_AXIS] <  MAX_POS_NUM) {        myCaldata.Accel[ACCEL_X_AXIS] = dat->Accel[ACCEL_X_AXIS]/LSB;    } else {        myCaldata.Accel[ACCEL_X_AXIS] =(-1)* (dat->Accel[ACCEL_X_AXIS]-MAX_POS_NUM)/LSB;    }    if (dat->Accel[ACCEL_Y_AXIS] <  MAX_POS_NUM) {        myCaldata.Accel[ACCEL_Y_AXIS] = dat->Accel[ACCEL_Y_AXIS]/LSB;    } else {        myCaldata.Accel[ACCEL_Y_AXIS] = (-1)*(dat->Accel[ACCEL_Y_AXIS]-MAX_POS_NUM)/LSB;    }    if (dat->Accel[ACCEL_Z_AXIS] <  MAX_POS_NUM) {        myCaldata.Accel[ACCEL_Z_AXIS] = dat->Accel[ACCEL_Z_AXIS]/LSB;    } else {        myCaldata.Accel[ACCEL_Z_AXIS] =(-1)*(dat->Accel[ACCEL_Z_AXIS]-                   MAX_POS_NUM)/LSB;    }return 0;}

2、TCP通信線程主要函數說明:

在本樣例的網絡通信中,小熊派BearPi-HM Nano(Hi3861)開發板作為客戶端,潤和DAYU200(RK3568)開發板作為服務端。它們之間采用TCP機制通信。

如下代碼:建立好TCP通信后,常規狀態下通信線程處在阻塞態,當拳擊事件觸發后,則會發送信息給服務端:


static void TCPClientTask(void){    // 在sock_fd 進行監聽,在 new_fd 接收新的鏈接    int sock_fd;    uint32_t flags;    struct sockaddr_in send_addr;   // 服務器的地址信息    socklen_t addr_length = sizeof(send_addr);    char recvBuf[recvLen];    memset(recvBuf, '', sizeof(recvBuf));    // 連接Wifi    WifiConnect(CONFIG_WIFI_SSID, CONFIG_WIFI_PWD);     // 創建socket    if ((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {        perror("create socket failed!
");        exit(1);    }    // 初始化預連接的服務端地址    send_addr.sin_family = AF_INET;    send_addr.sin_port = htons(CONFIG_SERVER_PORT);    send_addr.sin_addr.s_addr = inet_addr(CONFIG_SERVER_IP);    addr_length = sizeof(send_addr);    //連接    connect(sock_fd,(struct sockaddr *)&send_addr, addr_length);    printf("TCPClient connect success
");
    while (1) {        memset(recvBuf, '', sizeof(recvBuf));  //等待事件是否觸發        flags = osEventFlagsWait(g_eventFlagsId, FLAGS_MSK1, osFlagsWaitAny, osWaitForever);        printf("TCP get flag
");        sprintf(sendbuf,"right
");        send(sock_fd, sendbuf, strlen(sendbuf), 0);//tcp發出觸發信息        // 線程休眠一段時間        usleep(Delay_100ms);//100ms    }    closesocket(sock_fd);}

五、代碼構建、編譯及燒錄

1、OpenHarmony 3.2 Beta1源碼下載,地址參考文章結尾處鏈接; 2、在源碼根目錄下的vendor目錄下,新建team_x文件夾;

3、把boxing文件夾,拷貝到team_x目錄下,如下圖所示:

de84b8a0-1a85-11ed-ba43-dac502259ad0.png

3、在源碼目錄下,輸入hb set,然后選擇當前文件路徑,即輸入.(點),然后通過方向鍵選取team_x下的boxing,如下圖:

dea629f4-1a85-11ed-ba43-dac502259ad0.png

4、輸入hb build -f,開始編譯,編譯成功后,會在根目錄下的out/bearpi_hm_nano/boxing目錄生成Hi3861_wifiiot_app_allinone.bin,如下圖:

deb95038-1a85-11ed-ba43-dac502259ad0.png

decbfc74-1a85-11ed-ba43-dac502259ad0.png

5、用HiBurn工具燒錄程序,燒錄參考鏈接在文章結尾處;

燒錄成功后,可以本地驗證項目是否成功:

1、電腦端使用網絡調試助手軟件,建立TCP服務端,電腦端建立服務端需要注意以下幾點;

(1)電腦與BearPi-HM Nano開發板連入同一個Wi-Fi熱點,如圖:電腦與開發板都連入熱點"YYYYYY";

(2)BearPi-HM Nano開發板程序設置的IP,電腦的IP,網絡調試助手服務端的IP,三者保持一致,如下圖"192.168.1.100";

(3)點擊網絡調試助手的"連接"按鈕,即先啟動服務端。

dedc79aa-1a85-11ed-ba43-dac502259ad0.png

2、BearPi-HM Nano開發板串口接入電腦,設置波特率為115200;

3、復位BearPi-HM Nano開發板,復位后,串口會打印Wi-Fi連接成功、TCP連接成功等信息,如下圖(右側);

4、手握開發板,嘗試出拳(即揮動開發板)。能看到網絡助手的TCP服務端窗口,成功接收到同步揮拳信息“right”,如下圖(左側):

defd95e0-1a85-11ed-ba43-dac502259ad0.png

六、總結

本文主要講述了拳擊互動游戲中,關于設備端的開發,使用小熊派BearPi-HM Nano(Hi3861)開發板硬件,在小熊派相關基礎例程上做了二次開發。本設備端開發,使用了OpenHarmony的線程、事件、GPIO、IIC、TCP通信等相關基礎知識,再結合加速度計傳感器的使用,實現與應用端同步交互的功能。

本樣例是OpenHarmony知識體系工作組(相關鏈接在文章末尾)為廣大開發者分享的樣例。知識體系工作組結合日常生活,給開發者規劃了各種場景的Demo樣例,如智能家居場景、影音娛樂場景、運動健康場景等;歡迎廣大開發者一同參與OpenHarmony的開發,更加完善樣例,相互學習,相互進步。

七、參考連接

本樣例代碼下載鏈接:

https://gitee.com/openharmony-sig/knowledge_demo_entainment/tree/master/dev/team_x/boxing

OpenHarmony知識體系共建開發倉:

https://gitee.com/openharmony-sig/knowledge/blob/master/docs/co-construct_demos/README_zh.md

OpenHarmony學習路徑:

https://growing.openharmony.cn/mainPlay/learnPath

小熊派BearPi-HM Nano開發板學習路徑:

https://growing.openharmony.cn/mainPlay/learnPathMaps?id=19

https://gitee.com/bearpi/bearpi-hm_nano/tree/master

潤和DAYU200(RK3568)開發板介紹:

https://gitee.com/hihope_iot/docs/blob/master/HiHope_DAYU200/docs/README.md

https://growing.openharmony.cn/mainPlay/learnPathMaps?id=27

審核編輯 :李倩


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 傳感器
    +關注

    關注

    2564

    文章

    52621

    瀏覽量

    763928
  • 寄存器
    +關注

    關注

    31

    文章

    5423

    瀏覽量

    123428
  • OpenHarmony
    +關注

    關注

    27

    文章

    3835

    瀏覽量

    18177

原文標題:OpenHarmony有氧拳擊之設備端開發

文章出處:【微信號:gh_e4f28cfa3159,微信公眾號:OpenAtom OpenHarmony】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    開源鴻蒙開發必備!OpenHarmony替換Full SDK全攻略

    本文介紹開源鴻蒙OpenHarmony替換FullSDK的方法,演示設備為觸覺智能PurplePiOH鴻蒙開發板獲取FullSD
    的頭像 發表于 06-06 18:11 ?77次閱讀
    開源鴻蒙<b class='flag-5'>開發</b>必備!<b class='flag-5'>OpenHarmony</b>替換Full SDK全攻略

    請問下,openharmony支持哪一款龍芯的開發板?有沒有開源的龍芯的openharmony源碼?

    想買個2k0300的開發板學習龍芯和openharmony,愣是沒有看到提供openharmony源碼的,也沒與看到開源的代碼。gitee上,openharmony的龍芯sig倉庫也是
    發表于 04-26 13:06

    鴻蒙北向開發OpenHarmony5.0 DevEco Studio開發工具安裝與配置

    本文介紹OpenHarmony5.0 DevEco Studio開發工具安裝與配置,鴻蒙北向開發入門必備!由觸覺智能Purple Pi OH鴻蒙開發板演示。搭載了瑞芯微RK3566四核
    的頭像 發表于 03-28 18:05 ?613次閱讀
    鴻蒙北向<b class='flag-5'>開發</b><b class='flag-5'>OpenHarmony</b>5.0 DevEco Studio<b class='flag-5'>開發</b>工具安裝與配置

    【北京迅為】itop-3568 開發openharmony鴻蒙燒寫及測試-第1章 體驗OpenHarmony—燒寫鏡像

    【北京迅為】itop-3568 開發openharmony鴻蒙燒寫及測試-第1章 體驗OpenHarmony—燒寫鏡像
    的頭像 發表于 03-04 16:31 ?471次閱讀
    【北京迅為】itop-3568 <b class='flag-5'>開發</b>板<b class='flag-5'>openharmony</b>鴻蒙燒寫及測試-第1章 體驗<b class='flag-5'>OpenHarmony</b>—燒寫鏡像

    鴻蒙北向開發OpenHarmony4.1 DevEco Studio開發工具安裝與配置

    OpenHarmony4.1 DevEco Studio開發工具安裝與配置,鴻蒙北向開發入門必備!
    的頭像 發表于 02-07 17:35 ?641次閱讀
    鴻蒙北向<b class='flag-5'>開發</b><b class='flag-5'>OpenHarmony</b>4.1 DevEco Studio<b class='flag-5'>開發</b>工具安裝與配置

    鴻蒙原生開源庫ViewPool在OpenHarmony社區正式上線

    方面的實踐經驗。它為鴻蒙生態的開發者和應用廠商提供了一套靈活高效的跨組件管理方案,有助于顯著提升開發效率和應用性能。 作為一款專為OpenHarmony設計的原生
    的頭像 發表于 12-20 14:44 ?566次閱讀

    第三屆OpenHarmony技術大會 “OpenHarmony開發者激勵計劃”授牌儀式圓滿舉行

    10月12日,以“技術引領筑生態,萬物智聯創未來”為主題的第三屆OpenHarmony技術大會隆重舉行,“OpenHarmony開發者激勵計劃”授牌儀式在大會期間同步進行。該計劃旨在增加
    的頭像 發表于 10-21 11:48 ?574次閱讀
    第三屆<b class='flag-5'>OpenHarmony</b>技術大會 “<b class='flag-5'>OpenHarmony</b><b class='flag-5'>開發</b>者激勵計劃”授牌儀式圓滿舉行

    基于ArkTS語言的OpenHarmony APP應用開發:HelloOpenharmony

    1、程序簡介該程序是基于OpenHarmony標準系統編寫的UI應用類:HelloOpenHarmony。本案例是基于API9接口開發。本案例已在OpenHarmony凌蒙派-RK35
    的頭像 發表于 09-15 08:09 ?768次閱讀
    基于ArkTS語言的<b class='flag-5'>OpenHarmony</b> APP應用<b class='flag-5'>開發</b>:Hello<b class='flag-5'>Openharmony</b>

    OpenHarmony 明星開發板和應用招募啟動,等你來!

    板能夠量產>1000pcs 報名企業至少有1款開發板或者商用設備通過OpenHarmony兼容性測試 報名企業可持續投入南向設備開發
    發表于 09-14 15:21

    基于ArkTS語言的OpenHarmony APP應用開發:HelloOpenharmony

    1、程序簡介 該程序是基于OpenHarmony標準系統編寫的UI應用類:HelloOpenHarmony。 本案例是基于API 9接口開發。 本案例已在OpenHarmony凌蒙派-
    發表于 09-14 12:47

    第二屆大會回顧第25期 | OpenHarmony上的Python設備應用開發

    Python以其簡單、易學和功能強大而聞名,有著廣泛的用戶群體。采用Python開發有助于降低OpenHarmony的學習門檻。如何在OpenHarmony上用Python開發
    的頭像 發表于 08-27 11:53 ?1117次閱讀
    第二屆大會回顧第25期 | <b class='flag-5'>OpenHarmony</b>上的Python<b class='flag-5'>設備</b>應用<b class='flag-5'>開發</b>

    【迅為RK3568開發板】OpenHarmony學習開發系列教程(第1期 北向基礎篇一)

    P5P4_OpenHarmony支持設備類型3:47 P6p5_南向開發和北向開發的區別1:49 P7P6_OpenHarmony應用
    發表于 08-16 15:27

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

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

    OpenHarmony開機優化

    、磁盤I/O等,并以圖表形式展示出來。 使用方法 參考文檔:OpenHarmony性能調優工具—boochart_小~Q-Laval社區 通過Bootchart工具,開發者可以深入了解系統的啟動過程,并
    發表于 07-01 16:39

    如何在Openharmony中實現USB復合設備

    如何讓Openharmony設備HDC接口(OTG接口)作為一個復合設備,實現HDC(HDC:鴻蒙設備連接器) + CDC ACM(USB 虛擬串口),而
    的頭像 發表于 06-13 15:03 ?2478次閱讀
    如何在<b class='flag-5'>Openharmony</b>中實現USB復合<b class='flag-5'>設備</b>