ESP32 教學 12/55 - WS2812 RGB 燈帶 4 項目,配合 SunFounder 嘅 ESP32 IoT 學習套件
喺呢個教學入面,我哋會探討點樣用ESP32微控制器嚟控制WS2812 LED燈帶。呢個項目可以俾你創造各種顏色,並且可以獨立控制每一粒LED,提供一個有趣同埋視覺上吸引嘅方式嚟學習編程同電子。完成呢個教學之後,你就會有一個可以動態改變顏色同圖案嘅完整設置。
用SunFounder嘅ESP32微控制器,佢內置Wi-Fi同藍牙功能,我哋可以輕鬆連接同控制WS2812 RGB LED燈帶。呢條燈帶嘅靈活性容許各種創意應用,無論係裝飾照明定係教育項目都得。為咗更清楚了解涉及嘅步驟,你可以參考影片(喺影片00:00位置)。
硬件講解
呢個項目嘅主要組件包括ESP32微控制器同WS2812 LED燈帶。ESP32係一個功能強大嘅微控制器,可以執行同Arduino類似嘅任務,但多咗連接選項。佢有豐富嘅功能,可以連接到雲端,容許遙距控制同數據記錄。
WS2812 LED燈帶由獨立可尋址嘅RGB LED組成,即係話每一粒LED都可以控制嚟顯示唔同顏色。呢條燈帶用單線協議運作,容許多粒LED串聯而唔會損失信號質量。每粒LED都內置驅動器,會接收輸入信號並放大俾鏈入面嘅下一粒LED。
數據表詳情
| 製造商 | Worldsemi |
|---|---|
| 零件編號 | WS2812 |
| 邏輯/IO電壓 | 3.5–5.3 V |
| 供電電壓 | 5 V |
| 輸出電流(每通道) | 最大20 mA |
| 峰值電流(每通道) | 最大60 mA |
| PWM頻率建議 | 400 Hz |
| 輸入邏輯閾值 | 0.3 x VDD 至 0.7 x VDD |
| 電壓降 / RDS(on) / 飽和 | 最大0.5 V |
| 熱限制 | -25 至 80 °C |
| 封裝 | 5050 |
| 備註 / 變體 | 可以串聯做更長嘅燈帶 |
- 確保提供正確嘅電源(5 V),以免損壞LED。
- 喺電源端子之間加一個電容(100 µF)嚟平滑電壓尖峰。
- 保持數據線短啲,以減少信號衰減。
- 注意LED溫度;確保有適當嘅散熱。
- 連接電源同地線時要注意正確極性。
- 如果使用長燈帶,喺數據線上加一個上拉電阻。
接線說明

要將WS2812 LED燈帶連接到ESP32,首先連接電源。LED燈帶嘅+5V線應該連接到ESP32嘅5V引腳,而地線(GND)就應該連接到ESP32嘅其中一個GND引腳。
跟住,將LED燈帶嘅數據輸入線連接到ESP32嘅引腳14。確保連接穩固,以保證數據傳輸正常。如果你用多條燈帶或者距離較長,可以考慮用電平轉換器嚟確保信號完整性。呢個設置可以令你直接從ESP32控制LED燈帶。
代碼示例同講解
呢段代碼用Adafruit NeoPixel庫嚟控制WS2812 LED燈帶。佢首先初始化LED燈帶,並將初始顏色設為黑色。代碼入面嘅主要識別符包括LED_PIN,用嚟定義連接LED燈帶數據線嘅引腳,同埋NUM_LEDS,用嚟指定燈帶入面LED嘅數量。
#include // 引入Adafruit NeoPixel庫
#define LED_PIN 14 // NeoPixel LED燈帶
#define NUM_LEDS 8 // LED數量
喺setup函數入面,用strip.begin()初始化燈帶,並用strip.show()將初始顏色設為黑色。咁樣就準備好燈帶,等程式運行時可以改變顏色。
void setup() {
strip.begin(); // 初始化NeoPixel燈帶
strip.show(); // 將初始顏色設為黑色
}
程式嘅主循環由兩個for循環組成。第一個循環逐粒打開LED,設定佢嘅顏色並更新燈帶。第二個循環就用同樣方式逐粒關閉LED。咁樣就創造咗一個簡單但有效嘅燈光動畫。
void loop() {
// 逐粒打開LED
for (int i = 0; i < NUM_LEDS; i++) {
strip.setPixelColor(i, 100, 45, 0); // 將第i粒LED嘅顏色設為紅色
strip.show(); // 用新顏色更新LED燈帶
delay(100); // 等100毫秒
}
// 逐粒關閉LED
for (int i = 0; i < NUM_LEDS; i++) {
strip.setPixelColor(i, 0, 0, 0); // 將第i粒LED嘅顏色設為黑色(關閉佢)
strip.show(); // 用新顏色更新LED燈帶
delay(100); // 等100毫秒
}
}
睇吓文章下面嘅完整代碼載入,了解更多點樣實現唔同顏色效果同動畫。
示範 / 預期效果
當你完成接線並上載程式碼之後,你應該會見到燈帶上面嘅LED一粒一粒咁以指定顏色亮起,然後跟住同一順序熄滅。咁樣就會造成一個「走馬燈」效果。如果LED冇好似預期咁樣亮起,就要再檢查吓你嘅接線連接,同埋確保電源供應足夠。另外,都要確認程式碼入面定義咗正確嘅引腳(喺影片12:30度)。
影片時間標記
- 00:00 開始
- 1:40 WS2812 LED介紹
- 7:25 項目文檔頁面
- 9:16 RGB顏色解釋
- 13:16 接線解釋
- 13:48 Arduino程式碼-1解釋
- 19:03 喺Arduino IDE度選擇ESP32開發板同端口
- 20:45 程式碼-1示範
- 22:00 控制個別LED
- 24:16 走馬燈LED
- 25:41 來回燈光
#include <Adafruit_NeoPixel.h> // Include the Adafruit NeoPixel library
#define LED_PIN 14 // NeoPixel LED strip
#define NUM_LEDS 8 // Number of LEDs
// Create an instance of the Adafruit_NeoPixel class
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800);
void setup() {
strip.begin(); // Initialize the NeoPixel strip
strip.show(); // Set initial color to black
}
void loop() {
// Turn on LEDs one by one
for (int i = 0; i < NUM_LEDS; i++) {
strip.setPixelColor(i, 100, 45, 0); // Set the color of the i-th LED to red
strip.show(); // Update the LED strip with the new colors
delay(100); // Wait for 100 milliseconds
}
// Turn off LEDs one by one
for (int i = 0; i < NUM_LEDS; i++) {
strip.setPixelColor(i, 0, 0, 0); // Set the color of the i-th LED to black (turn it off)
strip.show(); // Update the LED strip with the new colors
delay(100); // Wait for 100 milliseconds
}
}
Common Course Links
Common Course Files
你可能需要嘅嘢
-
亞馬遜
-
易贝
-
阿里巴巴速卖通Purchase WS2812 LED strip from AliExpresss.click.aliexpress.com
-
阿里巴巴速卖通Purchase WS2812 LED strip from AliExpress-2s.click.aliexpress.com
-
邦购Purchase WS2812 LED strip from Banggoodbanggood.com
資源與參考資料
暫時冇資源。
文件📁
冇文件可用。