[應用] 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 分別運行在兩個核心


參考資料

[6] https://github.com/yijenlu1971/esp_hid_device

留言

此網誌的熱門文章

[筆記] Raspberry Pi 樹莓派的軟體開發

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

[筆記] ESP32 在 VS Code 開發環境的編譯與除錯

[筆記] Visual Studio 遠端偵錯的設定步驟

[筆記] Android APP 藍芽範例說明 -- BluetoothChat

[模組] LD3320 離線語音辨識晶片與 ESP32 無線傳輸

[應用] 藍芽 BLE client/server 架構:BLE remote controller