🌈

Pasek LED WS2812B z FastLED i ESP32 – efekty i sterowanie przez Wi-Fi

📅 28 marca 2026 ⏱ 10 min czytania 🏷️ Arduino/ESP 👁 12 odsłon
← Arduino/ESP

Adresowalne diody LED WS2812B (znane też jako NeoPixel) umożliwiają niezależne sterowanie kolorem i jasnością każdej diody na pasku. Biblioteka FastLED sprawia, że tworzenie efektów świetlnych jest proste i wydajne nawet na mikrokontrolerach.

Komponenty

ElementSpecyfikacjaCena
ESP32 DevKit v1240 MHz, Wi-Fi + BT~20 zł
Pasek LED WS2812B60 diod/m, 5 V, IP30 lub IP65~25–40 zł/m
Zasilacz 5 V / 5 ADla 1 m paska (max ~18 W)~25 zł
Rezystor 330–470 ΩNa linii danych (ochrona)~0,50 zł
Kondensator 1000 µF / 10 VNa zasilaniu paska~2 zł

Schemat połączeń

WS2812BESP32Uwagi
VCC (5 V)zewnętrzny zasilacz 5 V+Nie używaj pinu 3V3 ESP
GNDGND (wspólna masa z ESP)Masy muszą być połączone!
DIN (data)GPIO4 przez rezystor 330 ΩRezystor blisko paska
⚠️ Przy paskach dłuższych niż 0,5 m zastosuj iniekcję zasilania co 0,5–1 m (drugie złącze VCC/GND z zasilacza). Inaczej diody na końcu paska będą miały inny odcień bieli przez spadek napięcia.

Instalacja FastLED i pierwszy efekt

Zainstaluj FastLED przez Library Manager. Minimalny szkic:

#include <FastLED.h>

#define LED_PIN     4
#define NUM_LEDS   60
#define BRIGHTNESS 80

CRGB leds[NUM_LEDS];

void setup() {
    FastLED.addLeds<WS2812B, LED_PIN, GRB>(leds, NUM_LEDS);
    FastLED.setBrightness(BRIGHTNESS);
}

void loop() {
    // Efekt tęczy
    for (int i = 0; i < NUM_LEDS; i++) {
        leds[i] = CHSV((i * 256 / NUM_LEDS + millis()/10) % 256, 255, 255);
    }
    FastLED.show();
    delay(20);
}

Popularne efekty FastLED

Ogień (Fire2012)

#define COOLING  55
#define SPARKING 120

void Fire2012() {
    static byte heat[NUM_LEDS];
    for (int i = 0; i < NUM_LEDS; i++)
        heat[i] = qsub8(heat[i], random8(0, ((COOLING * 10) / NUM_LEDS) + 2));
    for (int k = NUM_LEDS - 1; k >= 2; k--)
        heat[k] = (heat[k-1] + heat[k-2] + heat[k-2]) / 3;
    if (random8() < SPARKING)
        heat[random8(7)] = qadd8(heat[random8(7)], random8(160, 255));
    for (int j = 0; j < NUM_LEDS; j++)
        leds[j] = HeatColor(heat[j]);
    FastLED.show();
    delay(15);
}

Meteoryt

void Meteor(byte r, byte g, byte b, byte rozmiar, byte ogon) {
    for (int i = 0; i < NUM_LEDS + NUM_LEDS; i++) {
        for (int j = 0; j < NUM_LEDS; j++) {
            if (random8() > ogon) {
                leds[j].fadeToBlackBy(64);
            }
        }
        for (int j = 0; j < rozmiar; j++) {
            if (i - j >= 0 && i - j < NUM_LEDS) {
                leds[i - j] = CRGB(r, g, b);
            }
        }
        FastLED.show();
        delay(25);
    }
}

Sterowanie przez Wi-Fi (serwer HTTP)

#include <FastLED.h>
#include <WiFi.h>
#include <WebServer.h>

WebServer server(80);
int efekt = 0;

void setup() {
    FastLED.addLeds<WS2812B, 4, GRB>(leds, NUM_LEDS);
    WiFi.begin("SSID", "HASLO");
    while (WiFi.status() != WL_CONNECTED) delay(500);

    server.on("/", []() {
        server.send(200, "text/html",
            "<a href='/rainbow'>Tecza</a> "
            "<a href='/fire'>Ogien</a> "
            "<a href='/off'>Wylacz</a>");
    });
    server.on("/rainbow", []() { efekt = 1; server.sendHeader("Location","/"); server.send(302); });
    server.on("/fire",    []() { efekt = 2; server.sendHeader("Location","/"); server.send(302); });
    server.on("/off",     []() { efekt = 0; FastLED.clear(true); server.sendHeader("Location","/"); server.send(302); });
    server.begin();
}

void loop() {
    server.handleClient();
    if (efekt == 1) { /* rainbow */ }
    if (efekt == 2) { Fire2012(); }
}
✅ Zastosuj WLED – gotowe oprogramowanie open-source dla ESP8266/ESP32 z dziesiątkami efektów, app mobilną i integracją Alexa. Wgrasz przez przeglądarkę bez Arduino IDE. install.wled.me
Tagi: efekty-led esp32 fastled led ws2812b