藥盒基本概述請(qǐng)參考上一篇文章
源碼解析
主函數(shù)部分___main/main.c
●初始化 NVS:初始化非易失性存儲(chǔ)(NVS),如果需要擦除和重新初始化 NVS,會(huì)進(jìn)行相應(yīng)處理。
●檢查百度 API 密鑰:調(diào)用 baidu_api_key_check函數(shù)檢查是否配置了百度 API 密鑰。
●初始化 I2C:初始化 I2C 總線,用于觸摸和音頻設(shè)備。
●啟動(dòng)顯示和 LVGL:啟動(dòng)顯示并設(shè)置默認(rèn)亮度。
●顯示用戶界面:調(diào)用 app_lvgl_display函數(shù)顯示用戶界面。
●初始化 RainMaker:啟動(dòng) RainMaker 服務(wù),并等待其連接。
●初始化驅(qū)動(dòng)和其他組件:初始化驅(qū)動(dòng)、語音識(shí)別、文本到語音轉(zhuǎn)換和 UVC 攝像頭。
●輸出剩余內(nèi)存:輸出啟動(dòng)后的剩余內(nèi)存。
●主循環(huán):進(jìn)入一個(gè)無限循環(huán),每秒延遲一次;等待用戶操作。
主要功能模塊
LVGL___main/ui/ui.c
從主函數(shù)的 app_lvgl_display()調(diào)用,ui.c 用于管理多個(gè)屏幕和控件的初始化和事件處理。
屏幕初始化函數(shù),這個(gè)函數(shù)用于初始化所有屏幕,并設(shè)置默認(rèn)的顯示主題。最后,它將ui_Screen1作為初始屏幕加載。
屏幕和控件的初始化函數(shù),這些函數(shù)用于初始化各個(gè)屏幕及其上的控件。
屏幕事件處理函數(shù),這些函數(shù)用于處理用戶在各個(gè)屏幕上的操作事件,如手勢(shì)和按鈕點(diǎn)擊。
事件處理函數(shù)實(shí)現(xiàn),這些函數(shù)根據(jù)事件類型和手勢(shì)方向來切換屏幕或執(zhí)行其他操作。
UVC攝像頭___main/app/app_uvc_camera.c
從主函數(shù)的 app_uvc_camera_init()調(diào)用,使用了樂鑫的 USB 流媒體庫(kù),能夠初始化攝像頭、處理攝像頭幀數(shù)據(jù),并提供掛起和恢復(fù)流媒體的功能。
掛起和恢復(fù)UVC流媒體函數(shù),app_uvc_suspend函數(shù)調(diào)用usb_streaming_control函數(shù)掛起流媒體,而app_uvc_resume函數(shù)恢復(fù)流媒體。
獲取當(dāng)前幀數(shù)據(jù)函數(shù),返回當(dāng)前幀數(shù)據(jù)的指針。
初始化UVC攝像頭
初始化UVC攝像頭函數(shù),包括以下步驟:
1.分配內(nèi)存:
○為USB傳輸緩沖區(qū)分配雙緩沖區(qū)xfer_buffer_a和xfer_buffer_b。
○為幀緩沖區(qū)分配內(nèi)存frame_buffer。
2.配置UVC功能:
○設(shè)置UVC配置,包括幀寬度、高度、幀間隔、傳輸緩沖區(qū)大小、幀緩沖區(qū)和回調(diào)函數(shù)。
3.配置UVC流媒體:
○調(diào)用uvc_streaming_config函數(shù)配置UVC流媒體,如果配置失敗,記錄錯(cuò)誤日志。
4.啟動(dòng)USB流媒體:
○調(diào)用usb_streaming_start函數(shù)啟動(dòng)USB流媒體。
ESP_SR___main/app/app_sr.c
從主函數(shù)的 app_sr_start()調(diào)用,app_sr.c 是基于 FreeRtos的語音識(shí)別應(yīng)用,能夠檢測(cè)喚醒詞和語音命令,并將結(jié)果發(fā)送到隊(duì)列進(jìn)行處理。
應(yīng)用啟動(dòng)函數(shù),初始化語音識(shí)別系統(tǒng),包括創(chuàng)建結(jié)果隊(duì)列、加載模型、配置AFE和多網(wǎng)絡(luò)接口,并創(chuàng)建音頻饋送任務(wù)、音頻檢測(cè)任務(wù)和語音識(shí)別處理任務(wù)。
音頻饋送任務(wù),從麥克風(fēng)讀取音頻數(shù)據(jù),并將其饋送到AFE模塊進(jìn)行處理。
音頻檢測(cè)任務(wù),檢測(cè)喚醒詞和語音命令,并將結(jié)果發(fā)送到隊(duì)列進(jìn)行處理。
重置命令列表函數(shù),用于重置語音命令列表。
TTS___main/app/app_sr_tts.c
從主函數(shù)的 app_tts_init()調(diào)用,app_sr_tts.c 實(shí)現(xiàn)了一個(gè)文本到語音(TTS)轉(zhuǎn)換的應(yīng)用,能夠初始化TTS系統(tǒng)并播放給定的文本。
TTS初始化
TTS初始化函數(shù),初始化TTS系統(tǒng),包括以下步驟:
1.查找語音數(shù)據(jù)分區(qū):
○使用esp_partition_find_first函數(shù)查找名為"voice_data"的分區(qū)。
○如果找不到分區(qū),記錄錯(cuò)誤日志并返回錯(cuò)誤。
2.映射語音數(shù)據(jù)分區(qū):
○使用esp_partition_mmap函數(shù)將分區(qū)映射到內(nèi)存。
○如果映射失敗,記錄錯(cuò)誤日志并返回錯(cuò)誤。
3.初始化語音設(shè)置:
○使用esp_tts_voice_set_init函數(shù)初始化語音設(shè)置。
○創(chuàng)建TTS句柄,如果創(chuàng)建失敗,記錄錯(cuò)誤日志并返回錯(cuò)誤。
4.初始化揚(yáng)聲器編碼器設(shè)備:
○使用bsp_audio_codec_speaker_init函數(shù)初始化揚(yáng)聲器編碼器設(shè)備。
○設(shè)置默認(rèn)音量。
TTS播放函數(shù)
1.打開揚(yáng)聲器設(shè)備:
○設(shè)置采樣率、通道數(shù)和位深度。
○使用esp_codec_dev_open函數(shù)打開揚(yáng)聲器設(shè)備。
2.播放提示文本:
○記錄要播放的文本。
○使用esp_tts_parse_chinese函數(shù)解析中文文本。
○使用esp_tts_stream_play函數(shù)獲取PCM數(shù)據(jù),并使用esp_codec_dev_write函數(shù)將數(shù)據(jù)寫入揚(yáng)聲器設(shè)備。
○循環(huán)播放直到所有數(shù)據(jù)播放完畢。
3.關(guān)閉揚(yáng)聲器設(shè)備并重置TTS流:
○使用esp_codec_dev_close函數(shù)關(guān)閉揚(yáng)聲器設(shè)備。
○使用esp_tts_stream_reset函數(shù)重置TTS流。
Rainmaker___main/rmker/rmker.c
從主函數(shù)的 app_rmaker_start()調(diào)用,rmker.c 主要功能是通過 Wi-Fi 連接到 RainMaker 云平臺(tái),并管理藥盒和心率檢測(cè)設(shè)備。
啟動(dòng)RainMaker任務(wù)
啟動(dòng) RainMaker 任務(wù),創(chuàng)建并啟動(dòng) RainMaker 任務(wù)。
獲取和設(shè)置藥盒狀態(tài)參數(shù),提供了獲取和設(shè)置藥盒狀態(tài)參數(shù)的函數(shù)。
更新和報(bào)告藥盒和心率數(shù)據(jù),提供了更新和報(bào)告藥盒和心率數(shù)據(jù)的函數(shù)。
重置 Wi-Fi,提供了重置 Wi-Fi 的函數(shù)。
處理來自 RainMaker 云的命令,處理來自 RainMaker 云的命令,根據(jù)命令執(zhí)行相應(yīng)的操作,如打開/關(guān)閉藥盒、通知用戶等。
事件處理函數(shù),處理 RainMaker 事件,如連接和斷開連接,并根據(jù)事件更新顯示屏。
創(chuàng)建藥盒和心率檢測(cè)設(shè)備,創(chuàng)建藥盒和心率檢測(cè)設(shè)備,并添加相應(yīng)的參數(shù)和回調(diào)函數(shù)。
RainMaker 主任務(wù),初始化網(wǎng)絡(luò)和 RainMaker 節(jié)點(diǎn),創(chuàng)建設(shè)備,啟用時(shí)區(qū)和調(diào)度服務(wù),注冊(cè)事件處理函數(shù),啟動(dòng) RainMaker 代理,并啟動(dòng) Wi-Fi。
-
ESP
+關(guān)注
關(guān)注
0文章
187瀏覽量
34232 -
源碼
+關(guān)注
關(guān)注
8文章
656瀏覽量
29781 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4353瀏覽量
63292
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
factory demo編譯報(bào)錯(cuò)的原因?
esp-box-0.5.0\\esp-box-0.5.0\\examples\\factory_demo編譯出錯(cuò)是什么原因?qū)е碌模?/a>
ESP-BOX的Git上的PCB文檔用AD打不開,說文件損壞怎么解決?
esp-skainet的example在ESP-BOX上報(bào)錯(cuò)的原因?怎么處理?
ESP-BOX開發(fā)板燒錄時(shí)報(bào)錯(cuò)的原因?
esp-box的slint例子為啥燒錄后無法顯示怎么解決?
基于STM32的智能藥盒
如何通過ESP32S3的USB進(jìn)行ESP-BOX固件升級(jí)呢?
在ESP-BOX工程的master分支下,如何定位APP的入口地址?
特別提醒藍(lán)牙語音智能藥盒的設(shè)計(jì)思路(一)
特別提醒藍(lán)牙語音智能藥盒的設(shè)計(jì)思路(一)

拿來就能用 | ESP AI音箱方案介紹

樂鑫ESP32-S3-BOX3方案智能AI藥盒應(yīng)用,啟明云端技術(shù)支持和定制化服務(wù)

評(píng)論