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