AI-K210 开发家庭万用宝模组(1)
手頭有個以前開發自動跟隨拍的K210器件(視頻? https://www.douyin.com/video/6943813162625961252?previous_page=app_code_link )。
閑時無聊,決定用它改造一個萬用寶,目標呢家里常用的小設備集成起來,省的家里一堆小東西。
功能:
1. 人臉識別:人臉定位 、 人臉特征點檢測、特征點對比;
2. 生理參數檢測:血壓(個人數據關聯分析加速檢測速度至10~20秒測量)、心電圖(ECG+心率+ST段分析+心律失常分析)、血氧(脈搏氧飽和度+脈率)、胎心率、血糖、體溫(紅外/熱電偶);
3. 其他功能:環境溫濕度、紅外遙控器、二維碼(后續想到啥再補充);
4. 系統:電阻屏 、RTT-OS + LVGL-GUI,TF卡數據存儲、wifi數據同步,藍牙網關。
需求大體如上,下面開始準備基礎環境。
#############################################################################
一、搭建K210的基礎開發環境
1.1 工具鏈準備
首先需要下載riscv交叉編譯的工具鏈:https://github.com/xpack-dev-tools/riscv-none-embed-gcc-xpack/releases/download/v8.3.0-2.3/xpack-riscv-none-embed-gcc-8.3.0-2.3-linux-x64.tar.gz
根據Win、OSX、Linux平臺32或64位版本具體選擇對應的工具鏈,(原廠的工具鏈因libc鏈接庫的問題無法編譯RTT),因本人在Ubuntu20.04下開發,下面主要記錄Linux下開發的環境。
下載后在工具鏈目錄解壓至 /opt目錄:【 tar zxvf?xpack-riscv-none-embed-gcc-8.3.0-2.3-linux-x64.tar.gz -C /opt/ 】
打開~/.bashrc文件,在文件末尾添加如下一行,將 /opt/kendryte-toolchain/bin 目錄添加到PATH環境變量,并更新生效
export PATH=$PATH:/opt/xpack-riscv-none-embed-gcc-8.3.0-2.3/bin $ source ~/.bashrc1.2 下載RT-Thread源碼
在開發目錄下執行:【 git clone --recursive https://github.com/RT-Thread/rt-thread.git】命令等待下載完成。
1.3 SCONS配置
在下載好的rtt源碼下找到k210的bsp,rt-thread/bsp/k210目錄下打開rtconfig.py文件:
修改上圖18行工具鏈的位置,屏蔽23、24行防止被RTT_EXEC_PATH替換。
修改上圖54行,CXXFLAGS增加對c++17的支持(K210最新的sdk中nncase使用了c++17的語法)
在rt-thread/bsp/k210路徑下執行:
$ sudo apt install scons (安裝scons) $ sudo apt install libncurses5-dev libncursesw5-dev(安裝menuconfig必要的庫) $ scons --menuconfig選擇RT-Thread Components--> C++ features--> Support C++ features用以支持c++,
RTT全局對象構造函數的實現在 rt-thread\components\cplusplus 目錄下的 crt_init.c 文件中,初始化方式如下:
鏈接腳本文件 rt-thread/bsp/k210/link.lds 為 C++ 全局構造函數的代碼分配了段,為了使 C++ 全局對象構造函數鏈接后存放在指定的段中,需要修改link.lds:
使用該命令后會安裝及初始化 Env 工具,并在 home 目錄下面生成 “.env” 文件夾,此文件夾為隱藏文件夾,切換到 home 目錄,使用 la 命令可查看所有目錄和文件。
$ la ~/.env env.sh local_pkgs packages tools立即更新 env.sh 配置環境變量
$ source ~/.env/env.sh使用 pkgs --update 命令下載軟件包到 BSP 目錄下的 packages 文件夾里
$ pkgs --update (每次執行pkgs命令前 需保證在執行source ~/.env/env.sh 后的環境)輸入命令code . 啟動VSCode,點擊TERMINAL。
現在VSCode中的終端就變成了env工具,可以直接在這個終端中進行env的一些操作。這里我們要先輸入指令,scons --target=vsc -s?!具@條指令能將在env中配置產生的頭文件的搜索路徑添加到vs code中,每次使用完env中的menuconfig功能后都要記得使用這個指令更新一下配置,否則可能會出現找不到頭文件的錯誤】
1.4 編譯下載
在VSCode終端輸入:scons 編譯RTT,但是發現出錯
?這個可能是rtt與工具鏈的沖突問題,臨時解決辦法如下:
打開 /opt/xpack-riscv-none-embed-gcc-8.3.0-2.3/riscv-none-embed/include/sys中的signal.h文件,屏蔽掉 union sigval、struct sigevent、以及 typedef struct siginfo_t;
//union sigval { // int sival_int; /* Integer signal value */ // void *sival_ptr; /* Pointer signal value */ //};//struct sigevent { // int sigev_notify; /* Notification type */ // int sigev_signo; /* Signal number */ // union sigval sigev_value; /* Signal value */#if defined(_POSIX_THREADS) // void (*sigev_notify_function)( union sigval );/* Notification function */ // pthread_attr_t *sigev_notify_attributes; /* Notification Attributes */ #endif //};/* Signal Actions, P1003.1b-1993, p. 64 */ /* si_code values, p. 66 */#define SI_USER 1 /* Sent by a user. kill(), abort(), etc */ #define SI_QUEUE 2 /* Sent by sigqueue() */ #define SI_TIMER 3 /* Sent by expiration of a timer_settime() timer */ #define SI_ASYNCIO 4 /* Indicates completion of asycnhronous IO */ #define SI_MESGQ 5 /* Indicates arrival of a message at an empty queue *///typedef struct { // int si_signo; /* Signal number */ // int si_code; /* Cause of the signal */ // union sigval si_value; /* Signal value */ //} siginfo_t;另外,把 rt-thread/bsp/k210/cconfig.h 中的下面三行注釋掉(注意:這個文件是 rt_thread/tools/gcc.py 等生成的,如果想cconfig.h不生成 HAVE_SIGACTION、HAVE_SIGINFO、HAVE_SIGVAL三個宏的話,可以把/opt/xpack-riscv-none-embed-gcc-8.3.0-2.3/riscv-none-embed/include/sys/signal.h中注釋的部分刪除掉)。
//#define HAVE_SIGACTION 1 //#define HAVE_SIGINFO 1 //#define HAVE_SIGVAL 1最后在VSCode終端中輸入scons,編譯成功:
?現在需要燒寫到k210里,先安裝kflash.py,鏈接:https://github.com/kendryte/kflash.py,
sudo pip3 install kflash
sudo usermod -a -G dialout $(whoami)
?至此RTT終于在K210上跑起來了,后續要在上面移植各類應用。歡迎關注交流.......
總結
以上是生活随笔為你收集整理的AI-K210 开发家庭万用宝模组(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python爬虫刨北上广深的房价来看看
- 下一篇: simpread-机器人智能抓取 AI+