ESP32 Tira LED RGB IoT (WS2812B)
Controla la luz de tu habitación desde el móvil: elige el color, ajusta el brillo, activa el efecto arcoíris o respiración. Esta es la guía paso a paso de la plantilla IoT Tira LED RGB de la app, montada con un ESP32 y una tira WS2812B de 30 LED con tres cables. Ve a Taller › Dispositivos › Añadir dispositivo y elige Tira LED RGB; Ohmi prepara el código con tu propia clave de dispositivo. El código de esta página es un ejemplo: la clave y los datos del Wi-Fi son de relleno.

Controla este dispositivo desde la app
Conecta tu ESP32 o Raspberry Pi Pico W al wifi, enciéndelo y apágalo desde el móvil y mira las lecturas en directo. Ohmi prepara el código; tú solo pones los datos de tu wifi y lo subes.
Plantilla en la app: Tira LED RGB
- ¿Dónde está en la app?Añade un dispositivo nuevo desde la pestaña Herramientas o en Taller › Dispositivos y elige esta plantilla.
- Librería de ArduinoAbre el Gestor de librerías en el Arduino IDE, busca BlueGraysIoT e instálala.
El plan gratis incluye 1 dispositivo, 1 gráfica y 24 horas de historial. Con Premium tienes más dispositivos, más gráficas y un historial más largo.
Diagrama del circuito

Código fuente
1// ─────────────────────────────────────────
2// BlueGrays · bluegrays.com
3// ESP32 Tira LED RGB IoT (WS2812B)
4// ─────────────────────────────────────────
5// La plantilla IoT "Tira LED RGB" de la app BlueGrays: cambias desde el
6// móvil la luz, el color, el brillo y el efecto (fijo, arcoíris,
7// respiración, parpadeo) de una tira WS2812B de 30 LED. Ohmi prepara el
8// código real en la app con tu propia clave de dispositivo (Taller ›
9// Dispositivos › Añadir dispositivo); el código de aquí es un ejemplo, la
10// clave del dispositivo y los datos del Wi-Fi son de relleno. Gestor de
11// bibliotecas: BlueGraysIoT (con sus dependencias) y Adafruit NeoPixel. La
12// placa solo se conecta a redes Wi-Fi de 2,4 GHz. Para 30 LED a pleno
13// brillo, alimenta la tira con un adaptador aparte de 5 V 2 A y une las
14// masas.
15//
16// Pines:
17// GPIO13 -> Tira WS2812B DIN
18// 5V, GND -> Tira 5V, GND
19// Pico W: tira DIN GP2, 5V VBUS
20
21/*
22 * Tira LED RGB · BlueGrays IoT
23 * BlueGrays · bluegrays.com
24 * No compartas este código: contiene la clave de tu dispositivo y la contraseña del Wi-Fi.
25 */
26
27#include <BlueGraysIoT.h>
28#include <Adafruit_NeoPixel.h> // Gestor de bibliotecas: 'Adafruit NeoPixel'
29
30const char *DEVICE_KEY = "TU_CLAVE_DE_DISPOSITIVO";
31const char *WIFI_NAME = "TU_RED_WIFI";
32const char *WIFI_PASSWORD = "TU_CONTRASENA_WIFI";
33
34BlueGraysIoT bg(DEVICE_KEY);
35
36const int LED_COUNT = 30;
37Adafruit_NeoPixel strip(LED_COUNT, 13, NEO_GRB + NEO_KHZ800);
38bool isOn = false; uint8_t cr = 255, cg = 255, cb = 255; int brightness = 70; String effect = "sabit";
39void paint() {
40 strip.setBrightness(isOn ? map(brightness, 0, 100, 0, 255) : 0);
41 for (int i = 0; i < LED_COUNT; i++) strip.setPixelColor(i, strip.Color(cr, cg, cb));
42 strip.show();
43}
44
45void setup() {
46 Serial.begin(115200);
47 strip.begin();
48 paint();
49 bg.onSwitch("acik", [](bool on) { isOn = on; paint(); });
50 bg.onColor("renk", [](uint8_t r, uint8_t g, uint8_t b) { cr = r; cg = g; cb = b; paint(); });
51 bg.onNumber("parlaklik", [](float v) { brightness = (int)v; paint(); });
52 bg.onChoice("efekt", [](const char *e) { effect = e; paint(); });
53 bg.setDebug(Serial);
54 bg.setLanguage(BG_LANG_EN);
55 bg.begin(WIFI_NAME, WIFI_PASSWORD);
56}
57
58void loop() {
59 bg.loop(); // evita aquí los delay() largos
60 if (isOn && effect == "gokkusagi") {
61 static uint16_t hue = 0; hue += 64;
62 for (int i = 0; i < LED_COUNT; i++) strip.setPixelColor(i, strip.gamma32(strip.ColorHSV(hue + i * 2000)));
63 strip.show(); delay(5);
64 } else if (isOn && effect == "nefes") { // se apaga y se enciende despacio
65 float wave = (sin(millis() / 600.0) + 1.0) / 2.0;
66 strip.setBrightness((uint8_t)(map(brightness, 0, 100, 0, 255) * (0.15 + 0.85 * wave)));
67 strip.show(); delay(10);
68 } else if (isOn && effect == "yanip_sonme") { // parpadea cada medio segundo
69 strip.setBrightness((millis() / 500) % 2 ? map(brightness, 0, 100, 0, 255) : 0);
70 strip.show(); delay(10);
71 }
72}
73Preguntas frecuentes
¿Puedo subir el código de esta página directamente a la placa?
Puedes, pero no se conectará: la clave del dispositivo y los datos del Wi-Fi que lleva son de relleno. En la app ve a Taller › Dispositivos › Añadir dispositivo y elige Tira LED RGB; Ohmi prepara el código con tu clave, el nombre de tu red y tu contraseña. Copia ese código y súbelo. Más tarde puedes ver el código completo en Dispositivo › Código y clave.
¿Funciona también con una Pico W?
Sí. Al añadir el dispositivo elige Pico W como placa; el código es el mismo y solo cambia el pin de datos: el DIN de la tira va a GP2, 5V a VBUS y GND a GND. En Arduino IDE instala el paquete "pico" desde el Gestor de placas y Adafruit NeoPixel desde el Gestor de bibliotecas. El circuito y la foto de esta página se hicieron con un ESP32.
¿Puedo alimentar la tira por USB?
Para pruebas cortas sí, pero con cuidado: cada LED consume unos 60 mA en blanco total, así que 30 LED a pleno brillo pueden llegar a 1,8 A. Eso es más de lo que aguantan el USB y la placa. Para uso prolongado o brillo alto, alimenta la tira con un adaptador aparte de 5 V 2 A y conecta el GND del adaptador al GND de la placa. El código es para 30 LED; si tu tira es más larga, cambia LED_COUNT y elige el adaptador en consecuencia.
¿Qué puedo cambiar en la app?
La pantalla del dispositivo tiene cuatro controles: el interruptor Luz enciende y apaga la tira, el selector de Color pinta todos los LED del mismo color, el deslizador Brillo va de 0 a 100 y la lista Efecto ofrece Fijo, Arcoíris, Respiración o Parpadeo. Tras un corte de luz, tu último color, brillo y efecto vuelven en cuanto la placa se reconecta.
