Tira LED WS2812B NeoPixel con Arduino: guía de LED RGB direccionables
¿Qué es un WS2812B NeoPixel y cómo se conecta? Tiras, anillos y matrices de LED RGB direccionables, cálculo de potencia, código con Adafruit NeoPixel y FastLED, efecto arcoíris, ESP32 y Pico.
El WS2812B es un LED RGB que lleva su propio chip controlador integrado. Mientras que un LED RGB normal necesita un pin para cada color, con el WS2812B controlas cientos de LED con un solo cable de datos y das a cada uno su propio color y brillo. NeoPixel es el nombre que Adafruit da a esta familia de LED direccionables. Se venden en tiras, anillos, barras y matrices, y se usan en un sinfín de proyectos, desde iluminación ambiental y relojes LED hasta juegos y lámparas de notificación.

¿Cómo funciona el WS2812B?
Dentro de la cápsula de 5x5 mm de cada WS2812B hay tres LED diminutos, rojo, verde y azul, y un minúsculo chip que los controla. Arduino envía por la línea de datos, uno tras otro, paquetes de color de 24 bits: 8 bits de verde, 8 de rojo y 8 de azul (orden GRB). El primer LED se queda con los primeros 24 bits y pasa el resto al siguiente LED por su pin DO; todos los LED hacen lo mismo. Cuando la línea de datos se queda en LOW al menos 50 microsegundos (280 en las versiones nuevas), todos los LED muestran su color a la vez. Con 256 niveles por color, un solo LED puede mostrar 16,7 millones de colores.
| Característica | Valor |
|---|---|
| Tensión de alimentación | 5 V (3,5–5,3 V) |
| Corriente por LED | Hasta ~60 mA (blanco total), ~1 mA apagado |
| Velocidad de datos | 800 kHz, un solo cable |
| Orden de colores | GRB (verde, rojo, azul) |
| Profundidad de color | 24 bits, 16,7 millones de colores |
| Encapsulado | 5050 SMD (5x5 mm) |
Tiras, anillos y matrices
| Tipo | Número de LED | Uso típico |
|---|---|---|
| Tira | 30, 60 o 144 por metro | Iluminación ambiental, detrás de la TV, estanterías |
| Anillo | 8, 12, 16, 24 | Reloj LED, indicador, lámpara de mesa |
| Matriz | 8x8 = 64, 16x16 = 256 | Texto en movimiento, animaciones, juegos de píxeles |
| Barra (stick) | 8 | Indicador de nivel, luz de estado |

Conexión del WS2812B
El WS2812B tiene tres conexiones: 5V, GND y DIN (entrada de datos). Las flechas de la tira indican hacia dónde van los datos; conecta siempre Arduino al extremo donde empiezan las flechas, el lado DIN. Añadir una resistencia de 330–470 Ω en serie con la línea de datos y un condensador de 1000 µF entre 5V y GND en la entrada de alimentación de la tira protege al primer LED de picos de tensión repentinos.
| Pin del WS2812B | Conexión |
|---|---|
| 5V | 5V de Arduino para pocos LED, un adaptador externo de 5 V para más |
| GND | GND (con un adaptador externo, la masa debe ser común con Arduino) |
| DIN | D6 (a través de una resistencia de 330 Ω) |
| DOUT | DIN del siguiente LED o tira |
Cálculo de potencia: ¿cuántos amperios necesitas?
La fórmula para el peor caso es sencilla: número de LED × 60 mA. En las animaciones es raro que todos los LED estén en blanco total a la vez; en la práctica se ve una media de unos 20 mA por LED. Aun así, conviene elegir el adaptador para el peor caso o limitar el brillo por software. Para calcular la potencia en vatios usa la herramienta Ley de Ohm, y para estimar cuánto dura un proyecto con batería, la herramienta Duración de batería.
| Número de LED | Peor caso (blanco total) | Alimentación recomendada |
|---|---|---|
| 8 | 0,48 A | Basta con USB (brillo limitado) |
| 30 | 1,8 A | Adaptador de 5 V 3 A |
| 60 | 3,6 A | Adaptador de 5 V 4 A |
| 144 | 8,6 A | Adaptador de 5 V 10 A |
Primer código con la librería Adafruit NeoPixel
En el Gestor de librerías busca Adafruit NeoPixel e instálala. El código siguiente «barre» la tira con un color encendiendo los LED uno a uno en rojo, verde y azul:
1#include <Adafruit_NeoPixel.h>
2
3#define PIN 6 // DIN pini / data pin
4#define NUM_LEDS 8 // LED sayısı / number of LEDs
5
6Adafruit_NeoPixel strip(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);
7
8void setup() {
9 strip.begin();
10 strip.setBrightness(50); // 0–255, yalnız bir kez / only once
11 strip.show(); // hepsini söndür / all off
12}
13
14void colorWipe(uint32_t color, int wait) {
15 for (int i = 0; i < NUM_LEDS; i++) {
16 strip.setPixelColor(i, color);
17 strip.show(); // değişikliği gönder / send the change
18 delay(wait);
19 }
20}
21
22void loop() {
23 colorWipe(strip.Color(255, 0, 0), 80); // kırmızı / red
24 colorWipe(strip.Color(0, 255, 0), 80); // yeşil / green
25 colorWipe(strip.Color(0, 0, 255), 80); // mavi / blue
26}setPixelColor() solo cambia el color en la memoria; para que los LED se enciendan de verdad tienes que llamar a show(). Así puedes ajustar el color de todos los LED y mostrarlos de una sola vez. Como setBrightness() escala los datos de color de forma permanente, lo mejor es llamarla una vez en setup() en lugar de cambiarla continuamente en loop(). Cada LED ocupa 3 bytes de la RAM de Arduino; los 2 KB del Uno se llenan rápido con cientos de LED.
Efecto arcoíris: colores HSV
En lugar de ajustar los colores con valores de rojo, verde y azul, usar HSV (tono, saturación, brillo) hace los efectos mucho más fáciles: recorres todo el círculo cromático cambiando solo el tono. En la librería de Adafruit el tono va de 0 a 65535. gamma32() corrige los colores según cómo los percibe el ojo, para que las transiciones parezcan más naturales:
1#include <Adafruit_NeoPixel.h>
2
3#define PIN 6
4#define NUM_LEDS 24
5
6Adafruit_NeoPixel strip(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);
7
8void setup() {
9 strip.begin();
10 strip.setBrightness(40);
11}
12
13void loop() {
14 for (long first = 0; first < 65536; first += 256) {
15 for (int i = 0; i < NUM_LEDS; i++) {
16 uint16_t hue = first + i * 65536L / NUM_LEDS; // her LED'e farklı ton / a different hue per LED
17 strip.setPixelColor(i, strip.gamma32(strip.ColorHSV(hue)));
18 }
19 strip.show();
20 delay(10);
21 }
22}La librería FastLED
Para efectos más avanzados, la librería FastLED también es muy popular. Guarda los LED en un array CRGB, ofrece órdenes muy legibles como leds[3] = CRGB::Red; y usa un rango de tono de 0 a 255. Sus funciones listas para usar, como fill_rainbow() y fadeToBlackBy(), te permiten escribir efectos de fuego, estrella fugaz o respiración en pocas líneas. Una de sus funciones más prácticas es FastLED.setMaxPowerInVoltsAndMilliamps(5, 2000);: la librería baja el brillo automáticamente para mantener la corriente por debajo de 2 A.
Usar una matriz NeoPixel de 8x8
Una matriz no es más que una tira larga: 64 LED encadenados uno tras otro en una sola línea de datos. En la mayoría de las matrices las filas van en zigzag (serpentina): las filas pares de izquierda a derecha y las impares de derecha a izquierda. Por eso, para convertir una coordenada x, y en un número de LED se usa y × 8 + x en las filas pares e y × 8 + (7 − x) en las impares. Como 64 LED pueden consumir 3,8 A en blanco total, mantener el brillo bajo es especialmente importante en las matrices.

WS2812B con el ESP32 y la Raspberry Pi Pico
Las librerías Adafruit NeoPixel y FastLED también funcionan en el ESP32; gracias al Wi-Fi es muy fácil controlar los LED desde el móvil o hacer una lámpara que cambie de color según el tiempo. Lo que hay que vigilar es el nivel de tensión: un WS2812B alimentado a 5 V espera al menos 3,5 V en su entrada de datos, mientras que el ESP32 y la Pico dan 3,3 V. La mayoría de las tiras funcionan igualmente, pero si el primer LED parpadea o aparecen colores aleatorios, añade a la línea de datos un convertidor de nivel como el 74AHCT125. En la Raspberry Pi Pico, MicroPython ya trae el módulo neopixel:
1from machine import Pin
2import neopixel
3import time
4
5NUM = 8
6np = neopixel.NeoPixel(Pin(0), NUM) # GP0 → DIN
7
8def wheel(pos): # 0–255 → renk çemberi / colour wheel
9 if pos < 85:
10 return (255 - pos * 3, pos * 3, 0)
11 if pos < 170:
12 pos -= 85
13 return (0, 255 - pos * 3, pos * 3)
14 pos -= 170
15 return (pos * 3, 0, 255 - pos * 3)
16
17j = 0
18while True:
19 for i in range(NUM):
20 r, g, b = wheel((i * 256 // NUM + j) & 255)
21 np[i] = (r // 5, g // 5, b // 5) # parlaklığı düşür / dim it
22 np.write()
23 j = (j + 2) & 255
24 time.sleep_ms(20)Ideas de proyectos con WS2812B
- Luz ambiental para la TV: pega una tira detrás del televisor para dar a la habitación un brillo suave.
- Reloj NeoPixel: muestra horas, minutos y segundos en colores distintos en un anillo de 60 LED.
- Vúmetro: con un módulo de micrófono, haz una barra de LED que suba con el volumen de la música.
- Lámpara de notificaciones: cambia de color con el ESP32 según el tiempo o los correos que lleguen por internet.
- Luces de policía y Knight Rider: programa destellos rojo-azul o una luz que va y viene.
- Juego de la serpiente: recrea el clásico juego de la serpiente con una matriz de 8x8 y un joystick.
Errores comunes y cómo solucionarlos
- No se enciende ningún LED: Arduino está conectado al extremo equivocado de la tira, el lado DOUT; fíjate en las flechas y usa el extremo DIN.
- Los colores salen cambiados (verde en vez de rojo): el orden de colores es incorrecto; usa NEO_GRB en el código, aunque algunas tiras necesitan NEO_RGB.
- El primer LED parpadea o muestra colores aleatorios: falta la resistencia en serie, la masa no es común o la señal de datos de 3,3 V no basta.
- El final de la tira se ve amarillento: hay caída de tensión; alimenta la tira en varios puntos o baja el brillo.
- Arduino se reinicia al encenderse los LED: se está consumiendo demasiada corriente del USB; usa un adaptador externo y un condensador de 1000 µF.
- Solo se encienden los primeros LED: el valor NUM_LEDS del código es menor que el número real de LED, o hay una conexión rota en algún punto de la tira.
El WS2812B es un punto de partida estupendo para entender cómo se mezclan los colores; la lógica del color la tienes en Cómo usar un LED RGB y el control del brillo en ¿Qué es PWM? En la app BlueGrays encontrarás proyectos de uso del WS2812B, luces de policía, LED secuenciales, efecto Knight Rider, animaciones y control de tiras NeoPixel con el ESP32, con esquemas y código.
Preguntas frecuentes
¿Qué diferencia hay entre WS2812B y NeoPixel?
NeoPixel es la marca que usa Adafruit para LED direccionables como el WS2812, el WS2812B y el SK6812. Todos usan el mismo protocolo de datos, así que se controlan igual y con las mismas librerías.
¿Cuántos WS2812B puedo conectar a un Arduino?
En cuanto a datos no hay un límite fijo, pero te limitan tres cosas: la RAM (3 bytes por LED, unos cientos de LED en la práctica en un Uno), el tiempo de refresco (30 microsegundos por LED; 1000 LED tardan unos 30 ms, unos 33 fotogramas por segundo) y la fuente de alimentación.
¿Puedo alimentar el WS2812B desde el pin 5V de Arduino?
Solo unos pocos LED con poco brillo; por ejemplo, una barra de 8 LED funciona por USB con un brillo de unos 50. Para más LED usa un adaptador externo de 5 V y une las masas.
¿Son imprescindibles la resistencia y el condensador?
No son obligatorios, pero sí muy recomendables. La resistencia de 330–470 Ω en la línea de datos suaviza los picos de la señal y protege al primer LED, y el condensador de 1000 µF en la entrada de alimentación absorbe el pico de corriente al conectar la alimentación.
¿Funciona el WS2812B con el ESP32 y placas de 3,3 V?
Casi siempre, pero no está garantizado: un WS2812B alimentado a 5 V espera al menos 3,5 V en su entrada de datos. Si ves parpadeos o colores incorrectos, sube la señal de datos a 5 V con un convertidor de nivel como el 74AHCT125.
¿Qué diferencias hay entre WS2812B, WS2811, WS2813 y SK6812?
El WS2811 es un chip controlador aparte y en las tiras de 12 V suele controlar tres LED juntos. El WS2813 tiene una línea de datos de reserva, de modo que la cadena sigue funcionando aunque falle un LED. El SK6812 es una alternativa compatible y también existe en versión RGBW con LED blanco; para ella se usa NEO_GRBW en el código.
Proyectos para hacer después de leer esto
Ver todos los proyectos
Uso de la tira LED WS2812B
Proyecto que demuestra el uso básico de la tira de LED direccionable WS2812B ajustando el color de cada LED de forma independiente. Enseña el control del color basado en píxeles con la librería FastLE

Luces de policía con WS2812B
Proyecto que crea un efecto estroboscópico de policía mediante el parpadeo rápido de colores rojo y azul con tira de LED WS2812B. Enseña el control de LED basado en grupos y la lógica de temporización

Luz secuencial con WS2812B
Un proyecto que crea un efecto de luz secuencial moviendo un único LED secuencialmente hacia delante en una tira de LED WS2812B. Enseña la lógica de animación secuencial basada en píxeles.

Luz secuencial con WS2812B (efecto llenado)
Un proyecto de animación de llenado y drenaje que acumula LEDs en una tira de LED WS2812B encendiéndolos secuencialmente, y luego apagándolos secuencialmente. Enseña la lógica de la animación LED acum

Efecto coche fantástico con WS2812B
Proyecto para crear un efecto coche fantástico (Knight Rider) moviendo un solo LED hacia adelante y hacia atrás en la tira de LED WS2812B. Enseña la animación bidireccional de píxeles.

WS2812B Trueno negro 3 piezas
Proyecto para crear una animación de transición de color de arco iris que cambia continuamente en una tira de LED WS2812B utilizando el espacio de color HSV. Enseña el uso del modelo de color CHSV y l

WS2812B Animación 1
Proyecto que crea una animación de arco iris de desplazamiento continuo con espacio de color HSV en tira de LED WS2812B. Enseña la lógica de la transición suave del color cambiando el valor del tono e

WS2812B Animación 2
Proyecto de animación avanzada con sistema de paleta FastLED en tira de LED WS2812B, que cambia automáticamente diferentes paletas de colores como arco iris, nube, fiesta, etc. en función del tiempo.

Control de la tira NeoPixel WS2812B con ESP32
Los LED direccionables WS2812B (NeoPixel) son LED RGB inteligentes que se pueden controlar en cadena a través de un único pin de datos. En este proyecto, controlaremos una tira de 8 LED WS2812B con la biblioteca Adafruit_NeoPixel para crear una animación fluida de arcoíris. Aunque el nivel lógico de 3,3 V del ESP32 funciona sin problemas en la mayoría de los componentes WS2812B, mostraremos la solución de una resistencia en serie de 470 Ω y un condensador de 1000 µF en caso de inestabilidad. La
Más artículos
Aprende paso a paso a controlar cientos de LED RGB con un solo cable de datos, a conectar bien una tira WS2812B, a calcular cuánta corriente necesita y a programar efectos arcoíris.
