文章

顯示從 9月, 2021 起發佈的文章

[應用] 在 ESP32 Audio 開發板的 VoIP 範例

圖片
開發板介紹         安信可 公司(Ai-Thinker)基於 ESP32 晶片推出一塊具有語音功能的 ESP32 Audio Kit 開發板,簡稱 ESP32-A1S,它與原廠的 ESP32 Lyrat 開發板都使用同一套 ESP-ADF SDK 軟體,但是開發板的電路有些差異,底層的驅動程式需要替換才能順利開發。         首先,最大的差異在 ESP32-A1S 語音編碼晶片採用 AC101 ,不過晶片被封裝在 ESP32 模組上,所以我們在開發板上面看不到這顆晶片,然而 ESP32 Lyrat 板採用 ES8388 晶片,因此在 ESP-ADF 中語音編碼的驅動程式需要更替。另外,其他不一樣的地方都在 GPIO 接腳的連接上,整理後,如下表所示,我們需要調整 ADF 底層的 HAL 和 Board 的配置,SDK 才能正常使用。 表一:ESP32-Lyrat 與 Audio Kit 開發板的差異         第一步,下載 ESP-ADF。在 VS Code 開發環境下[1],按 F1 後,選取 "Install ESP-ADF",VS Code 會自動從 GitHub 下載,並安裝 ADF 開發套件。如果是使用 ESP32-Lyrat 板子,可以直接跳到第四步,創建範例開始開發了。使用 ESP32-A1S 板子前,需要調整一下底層代碼,接續前面動作,我們從 GitHub 下載 A1S 的驅動程式, ESP32-A1S-AudioKit  程式碼,其目錄結構與 ADF 一樣,方便我們相互比對兩者差異。         第二步,到  \esp-adf\components\ audio_hal \driver 目錄下,將下載 A1S 裡的 AC101 驅動程式放進來。接著,要將 ac101 目錄和 ac101.c 加到  CMakeLists.txt 文件,同樣也要加到  component.mk 文件裡 ,這樣編譯過程就會把 AC101 驅動程式加進來編譯了。         第三步,我們再到  \esp-adf\components\ audio_board \lyrat_v4_3 目錄下(因為我們沒想要在 menuconfig 裡新增 A1S 配置,打算借用 lyrat 原配置),將 board.c、board

[應用] ESP32 BLE 藍芽體感搖桿

圖片
目標         之前我們實作過 USB 體感搖桿[1]  參考:ADXL335 三軸加速計的 USB 體感搖桿 ,那是一個有線的搖桿,這次我們將有線改為無線方式。以 ESP32 為控制核心,使用其內建藍芽 BLE 功能,再外接 ADXL335 加速計晶片,開啟 ESP32 ADC 的功能,讀取加速計晶片的電壓變化量,如圖一所示。最後,ESP32 Bluetooth BLE 連接到筆電上,現在的筆電幾乎能支援 BLE 連線,因此我們實作的結果能清楚地在電腦上呈現出來。 圖一:系統架構圖 開發過程         我們到 ESP32 官網下載 ESP-IDF,這提供完整的 ESP32 各種範例的原始碼,並在 Visual Studio Code (VS Code)環境上面進行開發[2]。在 ESP-IDF 的藍芽範例很多個,當初因為選錯源碼,一直無法做到搖桿滑鼠的功能,入了不少坑,後來找到合適的範例源碼。我們選用   esp-idf\examples\ bluetooth\bluedroid\ble\ble_hid_device_demo ,源碼可以提供藍芽 BLE 鍵盤、搖桿、滑鼠 、選單...等 功能,只要熟悉一下 API 函數就能做到 BLE 搖桿。         因為新增了 ADC 功能,所以我們必須調整 CMake 的配置,如下圖所示。在編譯過程中,因找不到一些 .h 標頭檔而出錯,於是在配置文件 CMakeLists.txt 裡把參照到的 include 路徑加入,還有我們用到 ADC 函數,所以在 link 階段需要把函式庫 esp_adc_cal 也加進來,這樣才能編譯成功 。 圖二:CMake的配置         在程式碼中,除了原本藍芽 BLE 所創建的 task 之外,我們新增另一個處理 ADC 運算的 task,如下圖所示。留意一點,因為 ESP32 為雙核心的控制器[3],我們在創建 task 時候可以指定將 task 放在哪一個核心上運行,這是很不錯的功能。 圖三:兩個 Task 分別運行在兩個核心 影片:ESP32 藍芽模組的體感搖桿 參考資料 [1]  ADXL335 三軸加速計的 USB 體感搖桿 [2]  ESP32 在 VS Code 開發環境的編譯與除錯 [3]  整理控制器 STM32 與無線晶片 ESP32