使用 C++ Overloading 和 ESP32 | 掌握強大 LED Strip 技術


簡介

了解如何使用 C++ 和 ESP-IDF 框架創建專業的 LED Strip (燈帶) 圖案。本指南演示如何利用 C++ 重載 (Overloading) 來保持代碼的整潔與高效的 LED 控制,同時充分發揮 ESP-IDF 的強大功能。
LED Strip

開發環境設置

1. 從官方網站安裝 Visual Studio Code
2. 安裝 ESP-IDF 插件

為 LED Strip 項目設置 ESP32

1. In VS Code, press Ctrl (Cmd) + Shift + P, and enter ESP-IDF: New Project.

2. Choose a template project (e.g., blink example), set the project name (e.g., my_project), and choose a storage path.

3. The system will generate a new ESP-IDF project with a basic CMake file and example code.

檔案結構

my_project/
├── CMakeLists.txt # 構建配置
├── main/
│ ├── CMakeLists.txt # 主組件的 CMake 配置
│ └── main.cpp # LED 燈帶類和應用邏輯
└── sdkconfig # 項目配置

重載 Overloading

繼承是面向對象編程(OOP)的關鍵特性,它允許類從其他類派生屬性和方法。通過實現一個封裝常用功能的基類,我們可以減少代碼重複並簡化複雜的多任務系統。當將其應用於 ESP32 上的 FreeRTOS 時,繼承使我們能夠創建多功能的任務類,從而簡化創建、管理和重用多個任務的過程。

設置 LED Strip 類別

LED Strip 類將包含用於初始化燈帶和應用各種照明模式的函數,例如固態顏色、顏色波和閃爍效果。

完整的 main.cpp 代碼用於 LED Strip

此代碼將初始化 ESP32,設置一個簡單的 LEDStrip 類,並實現三種 LED 圖案:固態顏色、顏色波和閃爍——所有內容都在一個文件中。

代碼解釋

1. LED 燈帶類別設置:
- LEDStrip 類別在 main.cpp 中定義。它有一個構造函數來初始化 GPIO 引腳,以及三個不同的 setPattern 函數,用於設置固態顏色、顏色波浪和閃爍圖案。

2. 圖案實現:
- 每個圖案方法使用 esp_log 來打印有用的信息:
- ESP_LOGI 記錄有關正在應用的圖案的信息(例如顏色、延遲)。
- ESP_LOGD 提供詳細的調試日誌,例如波浪或閃爍效果中每個 LED 的狀態。

3. 在 app_main 中的日誌:
- app_main 中的每個圖案調用前都有一個日誌語句,提供有關正在執行的圖案的上下文。

4. 日誌級別:
- esp_log_level_set 控制日誌級別。在這裡,"LEDStrip" 設置為 ESP_LOG_DEBUG,以獲得僅針對 LED 操作的詳細日誌,而其他日誌則保持在 ESP_LOG_INFO。

編譯與燒錄

在 VSCode 視窗最下方中找到 "ESP32-IDF : Build, Flash and Monitor" ICON 執行和燒錄。

程式運行效果

運行程式後,您將在終端機中看到以下輸出:

結論

這種簡化的代碼結構讓初學者能夠通過一個 main.cpp 文件創建複雜的 LED Strip 圖案。這個例子還引入了強大的 esp_log 日誌系統,幫助逐步跟蹤和調試每個 LED 圖案的運行過程。

這種方法非常適合學習,因為您可以迅速看到不同圖案的行為,並通過直接在一個地方調整參數來進行實驗。祝您實驗愉快!