WS2812是目前DIY情境燈光最主流的元件,每顆LED都能獨立控制顏色跟亮度(俗稱「可定址LED」),做出跑馬燈、漸層、呼吸燈這些效果都不難,難的地方其實在供電計算。
供電是最容易低估的環節
每顆WS2812全亮(白色,三色都拉到最大)大約需要60mA左右,一條60顆的燈條全部點亮,理論電流需求可能超過3A——這個數字常常被低估,直接用開發板供電絕對不夠,一定要用獨立的5V電源(電流承受量要抓足夠的餘裕),長燈條建議每隔一段距離(例如每1公尺)額外從電源軌補電,避免電壓隨著距離衰減導致遠端LED顏色偏暗或偏色。
程式庫與控制邏輯
- FastLED或Adafruit NeoPixel是最常用的兩套程式庫,語法略有差異但概念相通,新手從Adafruit NeoPixel的範例開始上手比較直覺
- 資料線(DIN)建議加一顆470歐姆左右的電阻做訊號保護,長距離傳輸訊號衰減時能降低雜訊干擾
- 圓形燈環(常用在時鐘、氛圍燈裝飾)跟長條燈條的程式邏輯是共通的,差別只在於你怎麼設計顏色排列的演算法
整合到智慧家居
延續前一篇提到的ESPHome,WS2812的燈光效果也能直接寫進ESPHome的light元件設定裡,效果(彩虹跑馬、閃爍、漸變)大多有現成的effect可以套用,整合進Home Assistant之後就能排程、語音控制,不需要額外寫一套App。
材料清單(BOM)
| 品項 | 數量 | 備註 |
|---|---|---|
| ESP32 開發板 | 1 | 本篇教學使用的開發板 |
| WS2812長條燈或圓形燈環 | 1 | 依你的應用選擇 |
| 獨立5V電源供應器 | 1 | 電流依燈珠數量計算,每顆全亮約60mA |
| 470歐姆電阻 | 1 | 資料線訊號保護用 |
腳位接線對照表
| 開發板腳位 | 燈條/燈環接點 | 說明 |
|---|---|---|
| 5V(獨立電源) | 5V | 燈珠供電正極,不要吃開發板5V輸出 |
| GND | GND | 共地(開發板與獨立電源共地) |
| GPIO5(經470Ω電阻) | DIN | 資料訊號輸入 |
📷 〔照片預留位:請在這裡插入實際接線/組裝照片〕
完整程式碼
// WS2812 RGB燈條/燈環基本控制(Adafruit NeoPixel程式庫)
#include <Adafruit_NeoPixel.h>
#define DATA_PIN 5
#define NUM_LEDS 8 // 依你實際燈珠數量修改
Adafruit_NeoPixel strip(NUM_LEDS, DATA_PIN, NEO_GRB + NEO_KHZ800);
void setup() {
strip.begin();
strip.setBrightness(80); // 建議先從中等亮度測試,供電不夠時全亮可能導致電壓不穩
strip.show();
}
void rainbowCycle() {
for (int j = 0; j < 256; j++) {
for (int i = 0; i < strip.numPixels(); i++) {
int pixelHue = (i * 256 / strip.numPixels() + j) & 255;
strip.setPixelColor(i, strip.gamma32(strip.ColorHSV(pixelHue * 256)));
}
strip.show();
delay(20);
}
}
void loop() {
rainbowCycle();
// 想整合Home Assistant的話,參考文章提到的ESPHome light元件設定,
// 彩虹跑馬、閃爍、漸變效果大多有現成的effect可以直接套用
}