搜尋程式碼

ESP32 教學 12/55 - WS2812 RGB 燈帶 4 項目,配合 SunFounder 嘅 ESP32 IoT 學習套件

ESP32 教學 12/55 - WS2812 RGB 燈帶 4 項目,配合 SunFounder 嘅 ESP32 IoT 學習套件

喺呢個教學入面,我哋會探討點樣用ESP32微控制器嚟控制WS2812 LED燈帶。呢個項目可以俾你創造各種顏色,並且可以獨立控制每一粒LED,提供一個有趣同埋視覺上吸引嘅方式嚟學習編程同電子。完成呢個教學之後,你就會有一個可以動態改變顏色同圖案嘅完整設置。

SunFounder-ESP32-Lesson-12-LED-Strip.mp4_snapshot_00.02.422

用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溫度;確保有適當嘅散熱。
  • 連接電源同地線時要注意正確極性。
  • 如果使用長燈帶,喺數據線上加一個上拉電阻。

接線說明

ESP32-12-WS2812-wiring

要將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 來回燈光

圖片

ESP32-12-WS2812-wiring
ESP32-12-WS2812-wiring
ESP32-12-WS2812-schematic
ESP32-12-WS2812-schematic
SunFounder-ESP32-Lesson-12-LED-Strip.mp4_snapshot_00.02.422
SunFounder-ESP32-Lesson-12-LED-Strip.mp4_snapshot_00.02.422
811-ESP32 Tutorial 12/55- Arduino code for WS2812 RGB LED stripe using ESP32
語言: C++
#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
  }
}

你可能需要嘅嘢

資源與參考資料

暫時冇資源。

文件📁

冇文件可用。