Una tira de LEDs RGB puede convertir un mueble, una repisa o el borde de tu monitor en algo que reacciona a la música, marca la hora o simplemente pinta la pared del color que quieras. Y lo mejor: con los LEDs direccionables WS2812B (los famosos "Neopixel") controlas decenas de luces, cada una con su propio color, usando un solo pin del ESP32.
En esta guía vas a aprender a conectar una tira o anillo WS2812B al ESP32 y a programar cuatro efectos con la librería FastLED: colores individuales, color uniforme, un efecto de barrido y un arcoíris animado. Al final vas a entender no solo cómo se usan, sino por qué funcionan como funcionan.
Qué tienen de especial los WS2812B
A diferencia de un LED RGB común (que necesita tres pines, uno por color), cada LED WS2812B trae un chip controlador integrado dentro del propio encapsulado. Ese chip lee los datos que le llegan, se queda con la parte que le corresponde y reenvía el resto al siguiente LED por su pin DOUT. Así se encadenan en serie y se manejan todos por una sola línea de datos.

El detalle técnico que importa: el protocolo es de temporización muy estricta (pulsos de cientos de nanosegundos definen un 0 o un 1). Por eso no basta con "poner un pin en alto"; se necesita una librería que genere esos pulsos con precisión. Aquí es donde entra FastLED. Otro punto: la mayoría de estos LEDs esperan los datos en orden GRB, no RGB, algo que verás reflejado en el código.
El presupuesto de energía (no lo saltes)
Cada LED a brillo máximo en blanco consume cerca de 50mA a 5V. Multiplica: 30 LEDs pueden pedir hasta 1.5A. Para tiras largas necesitas una fuente externa de 5V dedicada, y en ese caso hay una regla de oro: conecta siempre el GND de la fuente externa al GND del ESP32, o los datos no tendrán referencia común y verás parpadeos y colores erráticos.
En este tutorial controlamos solo 8 LEDs, así que no hace falta fuente externa: los alimentamos desde el pin VIN del ESP32.
Conexiones

Cablear el WS2812B al ESP32 es simple porque solo usa un pin de datos (DIN):
| WS2812B | ESP32 |
|---|---|
| GND | GND |
| DIN | GPIO2 (o cualquier GPIO digital) |
| 4-7 VDC | VIN (5V) |

Necesitas una placa ESP32, una tira/anillo/stick WS2812B y algunos cables jumper. En nuestro ejemplo usamos un stick de 8 LEDs.
Instalar la librería FastLED

Abre el Administrador de Librerías del Arduino IDE, busca FastLED e instala la versión de Daniel Garcia. Con eso ya puedes compilar los ejemplos.
Ejemplo 1: controlar cada LED por separado
Este código asigna un color distinto a cada uno de los 8 LEDs, uno tras otro. Cárgalo a tu placa y funcionará de inmediato.
/*
Rui Santos & Sara Santos - Random Nerd Tutorials
Complete project details at https://RandomNerdTutorials.com/esp32-ws2812b-neopixels-arduino/
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files.
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*/
#include <FastLED.h>
#define NUM_LEDS 8
#define DIN_PIN 2
#define BRIGHTNESS 80 // Brightness (0-255)
#define DELAY_MS 500
CRGB leds[NUM_LEDS];
void setup() {
FastLED.addLeds<WS2812B, DIN_PIN, GRB>(leds, NUM_LEDS);
FastLED.setBrightness(BRIGHTNESS);
FastLED.clear();
}
void loop() {
leds[0] = CRGB(255, 0, 0); // Red » (R=255, G=0, B=0)
FastLED.show();
delay(DELAY_MS);
leds[1] = CRGB(0, 255, 0); // Green » (R=0, G=255, B=0)
FastLED.show();
delay(DELAY_MS);
leds[2] = CRGB(0, 0, 255); // Blue » (R=0, G=0, B=255)
FastLED.show();
delay(DELAY_MS);
leds[3] = CRGB(255, 165, 0); // Orange » (R=255, G=165, B=0)
FastLED.show();
delay(DELAY_MS);
leds[4] = CRGB(128, 0, 128); // Purple » (R=128, G=0, B=128)
FastLED.show();
delay(DELAY_MS);
leds[5] = CRGB(255, 255, 0); // Yellow » (R=255, G=255, B=0)
FastLED.show();
delay(DELAY_MS);
leds[6] = CRGB(255, 255, 255); // White » (R=255, G=255, B=255)
FastLED.show();
delay(DELAY_MS);
leds[7] = CRGB(0, 0, 0); // Off/Black » (R=0, G=0, B=0)
FastLED.show();
delay(DELAY_MS);
FastLED.clear();
delay(DELAY_MS);
}

Cómo funciona. Primero se incluye #include <FastLED.h> y se define el arreglo CRGB leds[NUM_LEDS], que es donde FastLED guarda el color de cada LED. En el setup(), la línea clave es FastLED.addLeds<WS2812B, DIN_PIN, GRB>(leds, NUM_LEDS): le dices el tipo de LED, el pin de datos y el orden de color GRB. Después, para cambiar un LED escribes su color en el arreglo (leds[0] = CRGB(255, 0, 0)) y recién al llamar a FastLED.show() los cambios llegan físicamente a las luces. Ese patrón. modificar el arreglo, luego show()— se repite en todos los ejemplos.
Ejemplo 2: el mismo color en todos los LEDs
Aquí aplicamos un color a toda la tira con un solo comando, usando fill_solid().
/*
Rui Santos & Sara Santos - Random Nerd Tutorials
Complete project details at https://RandomNerdTutorials.com/esp32-ws2812b-neopixels-arduino/
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files.
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*/
#include <FastLED.h>
#define NUM_LEDS 8
#define DIN_PIN 2
#define BRIGHTNESS 80 // Brightness (0-255)
#define DELAY_MS 500
CRGB leds[NUM_LEDS];
void setup() {
FastLED.addLeds<WS2812B, DIN_PIN, GRB>(leds, NUM_LEDS);
FastLED.setBrightness(BRIGHTNESS);
FastLED.clear();
}
void loop() {
fill_solid(leds, NUM_LEDS, CRGB(255, 0, 0)); // Color » Red
FastLED.show();
delay(DELAY_MS);
fill_solid(leds, NUM_LEDS, CRGB(0, 255, 0)); // Color » Green
FastLED.show();
delay(DELAY_MS);
fill_solid(leds, NUM_LEDS, CRGB(0, 0, 255)); // Color » Blue
FastLED.show();
delay(DELAY_MS);
fill_solid(leds, NUM_LEDS, CRGB(255, 255, 255)); // Color » White
FastLED.show();
delay(DELAY_MS);
}

La función fill_solid(leds, NUM_LEDS, CRGB(...)) recibe el arreglo, la cantidad de LEDs y el color a aplicar. Es la forma más limpia de pintar toda la tira de un color de una sola vez.
Ejemplo 3: efecto de barrido (chase)
Este efecto enciende un LED a la vez que "corre" a lo largo de la tira mientras los demás quedan apagados, primero en un sentido y luego en el otro.
/*
Rui Santos & Sara Santos - Random Nerd Tutorials
Complete project details at https://RandomNerdTutorials.com/esp32-ws2812b-neopixels-arduino/
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files.
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*/
#include <FastLED.h>
#define NUM_LEDS 8
#define DIN_PIN 2
#define BRIGHTNESS 80 // Brightness (0-255)
#define DELAY_MS 50 // Chase effect speed
CRGB leds[NUM_LEDS];
void setup() {
FastLED.addLeds<WS2812B, DIN_PIN, GRB>(leds, NUM_LEDS);
FastLED.setBrightness(BRIGHTNESS);
FastLED.clear();
}
void loop() {
// Chase effect from left to right
for (int i = 0; i < NUM_LEDS; i++) {
FastLED.clear(); // Clear LEDs
leds[i] = CRGB(0, 0, 255); // Light current position
FastLED.show();
delay(DELAY_MS); // Chase effect speed
}
// Reverse the chase effect direction
for (int i = NUM_LEDS - 1; i >= 0; i--) {
FastLED.clear();
leds[i] = CRGB(0, 0, 255);
FastLED.show();
delay(DELAY_MS);
}
}

La lógica es simple: en cada paso se hace FastLED.clear(), se enciende el LED de la posición actual y se llama a show() con un pequeño delay. El primer for recorre de izquierda a derecha y el segundo invierte la dirección.
Ejemplo 4: efecto arcoíris animado
El último ejemplo genera un arcoíris que se desliza suavemente por toda la tira.
/*
Rui Santos & Sara Santos - Random Nerd Tutorials
Complete project details at https://RandomNerdTutorials.com/esp32-ws2812b-neopixels-arduino/
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files.
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*/
#include <FastLED.h>
#define NUM_LEDS 8
#define DIN_PIN 2
#define SATURATION 255 // Saturarion (0-255)
#define BRIGHTNESS 255 // Brightness (0-255)
#define DELAY_MS 20
CRGB leds[NUM_LEDS];
void setup() {
FastLED.addLeds<WS2812B, DIN_PIN, GRB>(leds, NUM_LEDS);
FastLED.setBrightness(BRIGHTNESS);
FastLED.clear();
}
void loop() {
for (int i = 0; i < NUM_LEDS; i++) {
// Set LED i to a moving rainbow color effect: i*10 creates color spread across LEDs
// millis()/20 makes the rainbow slowly animate over time with full saturation and full brightness
leds[i] = CHSV(i * 10 + millis() / 20, SATURATION, BRIGHTNESS);
}
FastLED.show();
delay(DELAY_MS);
}

La clave está en CHSV(i * 10 + millis() / 20, SATURATION, BRIGHTNESS), que usa el modelo de color HSV (matiz, saturación, valor). El término i * 10 reparte el matiz entre los LEDs para crear el degradado, y millis() / 20 agrega un desplazamiento en el tiempo que hace que el arcoíris se anime solo.
Variantes y mejoras
Ideas para llevar esto más allá de lo que muestra el tutorial original:
- Control por navegador con un servidor web: el ESP32 puede levantar un servidor web con botones para cambiar color y efecto desde el celular o el PC, sin recompilar. Es la evolución natural: pasas de efectos fijos a una lámpara RGB controlable por WiFi desde cualquier dispositivo de tu casa.
- Luces reactivas al sonido: agregando un módulo de micrófono puedes hacer que la tira "baile" con la música, mapeando el nivel de audio a brillo o a la cantidad de LEDs encendidos.
- Tiras más largas con fuente externa: si escalas a una tira de metros, agrega una fuente de 5V/2A o más, inyecta alimentación cada cierta cantidad de LEDs y no olvides unir las tierras.
Personalización para Chile
En Chile consigues todo con stock local en MechatronicStore:
- Placa ESP32 WROOM-32 (SKU X2-10V2). $7.990 CLP
- Módulo/Stick WS2812B RGB de 8 bits (SKU GN3-11). $1.990 CLP (el stick de 8 LEDs que usamos en los ejemplos)
- Cinta LED WS2812B 5V 5 metros (SKU G-599). $23.990 CLP (para proyectos de iluminación más grandes)
- Cables macho hembra 30cm (SKU C-418). $1.990 CLP
Si el tutorial original enlaza a tiendas extranjeras, acá tienes los equivalentes exactos: el mismo LED WS2812B, ya sea en formato stick, anillo o cinta, funciona con el código tal cual. Para tiras largas, MechatronicStore también tiene fuentes de 5V.
Recursos
- Tutorial original: ESP32: WS2812B Addressable RGB LEDs (Neopixels) - Arduino IDE
- Librería: FastLED (por Daniel Garcia)
Versión chilena con componentes en stock local en MechatronicStore, inspirada en la guía de Random Nerd Tutorials.




