Samouczek ESP32 12/55 - Projekt 4 z paskiem RGB WS2812 z zestawem edukacyjnym IoT ESP32 od SunFounder
W tym samouczku dowiemy się, jak sterować paskiem LED WS2812 za pomocą mikrokontrolera ESP32. Ten projekt pozwala tworzyć różnorodne kolory i sterować każdą diodą LED indywidualnie, zapewniając zabawny i atrakcyjny wizualnie sposób nauki programowania i elektroniki. Po ukończeniu tego samouczka będziesz mieć w pełni funkcjonalny układ, który może dynamicznie zmieniać kolory i wzory.
Używając mikrokontrolera ESP32 firmy SunFounder, który posiada wbudowaną łączność Wi-Fi i Bluetooth, możemy łatwo podłączyć i sterować paskiem LED RGB WS2812. Elastyczność tego paska LED pozwala na kreatywne zastosowania, zarówno w dekoracyjnym oświetleniu, jak i w projektach edukacyjnych. Aby lepiej zrozumieć poszczególne kroki, możesz odwołać się do filmu (na filmie w czasie 00:00).
Omówienie sprzętu
Główne komponenty tego projektu to mikrokontroler ESP32 oraz pasek LED WS2812. ESP32 to wydajny mikrokontroler, który może wykonywać zadania podobne do Arduino, ale z dodatkowymi opcjami łączności. Posiada bogaty zestaw funkcji umożliwiających połączenie z chmurą, co pozwala na zdalne sterowanie i rejestrowanie danych.
Pasek LED WS2812 składa się z indywidualnie adresowalnych diod LED RGB, co oznacza, że każdą diodą można sterować tak, aby wyświetlała różne kolory. Pasek działa w oparciu o protokół jednowarstwowy, umożliwiający łączenie wielu diod LED w łańcuch bez utraty jakości sygnału. Każda dioda LED zawiera wbudowany sterownik, który odbiera sygnał wejściowy i wzmacnia go dla następnej diody w łańcuchu.
Szczegóły z karty katalogowej
| Producent | Worldsemi |
|---|---|
| Numer części | WS2812 |
| Napięcie logiczne/IO | 3,5–5,3 V |
| Napięcie zasilania | 5 V |
| Prąd wyjściowy (na kanał) | maks. 20 mA |
| Prąd szczytowy (na kanał) | maks. 60 mA |
| Zalecana częstotliwość PWM | 400 Hz |
| Progi logiczne wejścia | 0,3 x VDD do 0,7 x VDD |
| Spadek napięcia / RDS(on) / nasycenie | maks. 0,5 V |
| Limity termiczne | -25 do 80 °C |
| Obudowa | 5050 |
| Uwagi / warianty | Można łączyć w łańcuch dla dłuższych pasków |
- Zapewnij odpowiednie zasilanie (5 V), aby uniknąć uszkodzenia diod LED.
- Użyj kondensatora (100 µF) na zaciskach zasilania, aby wygładzić skoki napięcia.
- Utrzymuj krótkie przewody danych, aby zmniejszyć degradację sygnału.
- Zwracaj uwagę na temperaturę diod LED; zapewnij odpowiednie odprowadzanie ciepła.
- Zachowaj właściwą polaryzację przy podłączaniu zasilania i masy.
- Użyj rezystora podciągającego na linii danych w przypadku długich pasków.
Instrukcje podłączenia

Aby podłączyć pasek LED WS2812 do ESP32, zacznij od podłączenia zasilania. Przewód +5V z paska LED należy podłączyć do pinu 5V na ESP32, a przewód masy (GND) do jednego z pinów GND na ESP32.
Następnie podłącz przewód wejścia danych z paska LED do pinu 14 na ESP32. Upewnij się, że połączenia są pewne, aby zapewnić prawidłową transmisję danych. Jeśli używasz wielu pasków lub dłuższych odległości, rozważ użycie konwertera poziomów, aby zapewnić integralność sygnału. Taka konfiguracja pozwoli Ci sterować paskiem LED bezpośrednio z ESP32.
Przykłady kodu i omówienie
Kod używa biblioteki Adafruit NeoPixel do sterowania paskiem LED WS2812. Zaczyna się od inicjalizacji paska LED i ustawienia początkowego koloru na czarny. Kluczowe identyfikatory w kodzie to LED_PIN, który definiuje pin podłączony do linii danych paska LED, oraz NUM_LEDS, który określa liczbę diod LED w pasku.
#include // Dołącz bibliotekę Adafruit NeoPixel
#define LED_PIN 14 // Pasek LED NeoPixel
#define NUM_LEDS 8 // Liczba diod LED
W funkcji setup pasek jest inicjalizowany za pomocą strip.begin(), a początkowy kolor jest ustawiany na czarny za pomocą strip.show(). To przygotowuje pasek do zmian kolorów podczas działania programu.
void setup() {
strip.begin(); // Inicjalizuj pasek NeoPixel
strip.show(); // Ustaw początkowy kolor na czarny
}
Główna pętla programu składa się z dwóch pętli for. Pierwsza pętla włącza każdą diodę LED po kolei, ustawiając jej kolor i aktualizując pasek. Druga pętla wyłącza każdą diodę LED w ten sam sposób. Tworzy to prostą, ale skuteczną animację świetlną.
void loop() {
// Włącz diody LED jedna po drugiej
for (int i = 0; i < NUM_LEDS; i++) {
strip.setPixelColor(i, 100, 45, 0); // Ustaw kolor i-tej diody LED na czerwony
strip.show(); // Zaktualizuj pasek LED nowymi kolorami
delay(100); // Poczekaj 100 milisekund
}
// Wyłącz diody LED jedna po drugiej
for (int i = 0; i < NUM_LEDS; i++) {
strip.setPixelColor(i, 0, 0, 0); // Ustaw kolor i-tej diody LED na czarny (wyłącz ją)
strip.show(); // Zaktualizuj pasek LED nowymi kolorami
delay(100); // Poczekaj 100 milisekund
}
}
Obejrzyj pełne ładowanie kodu poniżej artykułu, aby uzyskać więcej informacji na temat implementacji różnych efektów kolorystycznych i animacji.
Demonstracja / Czego się spodziewać
Po zakończeniu podłączania przewodów i wgraniu kodu powinieneś zobaczyć, jak diody LED na pasku zapalają się jedna po drugiej w określonym kolorze, a następnie gasną w tej samej kolejności. Tworzy to efekt „biegnącego światła”. Jeśli diody LED nie zapalają się zgodnie z oczekiwaniami, sprawdź ponownie połączenia przewodów i upewnij się, że zasilanie jest wystarczające. Zweryfikuj również, czy w kodzie zdefiniowano właściwy pin (na filmie o 12:30).
Znaczniki czasowe filmu
- 00:00 Start
- 1:40 Wprowadzenie do diody LED WS2812
- 7:25 Strona dokumentacji projektu
- 9:16 Wyjaśnienie koloru RGB
- 13:16 Wyjaśnienie podłączenia przewodów
- 13:48 Wyjaśnienie kodu Arduino-1
- 19:03 Wybór płytki ESP32 i portu w Arduino IDE
- 20:45 Demonstracja kodu-1
- 22:00 Sterowanie pojedynczą diodą LED
- 24:16 Przesuwające się światło LED
- 25:41 Światło w przód i w tył
#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
Rzeczy, których możesz potrzebować
-
Amazon
-
Allegro
-
AliExpressPurchase WS2812 LED stripe from AliExpresss.click.aliexpress.com
-
AliExpressPurchase WS2812 LED stripe from AliExpress-2s.click.aliexpress.com
-
BanggoodPurchase WS2812 LED stripe from Banggoodbanggood.com
Zasoby i odniesienia
Brak zasobów.
Pliki📁
Brak dostępnych plików.