Controlar iluminación ARGB de ventiladores con ESPHome y ESP32
Tabla de contenidos
Introducción
Muchos ventiladores actuales incorporan iluminación ARGB además del motor PWM. Aunque ambas funciones estén en el mismo ventilador, en realidad suelen ser dos circuitos separados: por un lado el motor de 12 V y por otro la iluminación direccionable de 5 V.
En este artículo se documenta cómo controlar la iluminación ARGB de varios ventiladores desde Home Assistant usando un ESP32 y ESPHome. La idea es que los ventiladores sigan alimentándose por su circuito normal de 12 V, mientras que la iluminación ARGB se alimenta a 5 V y se controla mediante una única línea de datos desde el ESP32.
ESPHome incluye el componente esp32_rmt_led_strip, que usa el periférico RMT del ESP32 para controlar tiras LED direccionables. La documentación oficial lo describe como un componente para manejar la mayoría de tiras LED direccionables desde ESP32.
ARGB no es RGB de 12 V
Antes de conectar nada, hay que distinguir entre RGB y ARGB:
ARGB 5 V direccionable: +5V | DATA | GND RGB 12 V analógico: +12V | R | G | B
Este artículo se refiere a ARGB direccionable de 5 V, normalmente compatible con protocolos tipo WS2812, SK6812 o similares. En estos sistemas cada LED recibe datos digitales y puede tener un color independiente.
Si se conecta una tira ARGB de 5 V a 12 V, es muy probable que se dañen los LED.
Objetivo del montaje
El objetivo es conseguir:
- Controlar la iluminación ARGB de tres ventiladores.
- Exponer la iluminación como una entidad
lighten Home Assistant. - Cambiar color, brillo y efectos desde Home Assistant.
- Añadir efectos personalizados para contar LED.
- Separar correctamente la alimentación de 5 V del ARGB y la de 12 V de los motores.
Material necesario
Para este montaje se ha usado:
- 1 ESP32.
- 3 ventiladores con ARGB de 5 V.
- 1 fuente de 5 V para ARGB y ESP32.
- 1 resistencia de 330 Ω para la línea DATA.
- Opcional: conversor de nivel lógico de 3,3 V a 5 V.
- Opcional: condensador de 1000 µF entre +5 V y GND cerca de los LED.
La resistencia en la línea de datos ayuda a suavizar la señal y proteger el primer LED. El conversor de nivel no siempre es imprescindible, pero puede mejorar la fiabilidad si aparecen parpadeos, colores extraños o fallos al subir el brillo.
Esquema de conexión
La parte ARGB se alimenta con 5 V:
Fuente 5 V + ───────────── +5 V ARGB ventiladores Fuente 5 V GND ──────────── GND ARGB ventiladores ESP32 GPIO26 ── 330 Ω ───── DATA ARGB ventiladores ESP32 GND ───────────────── GND fuente 5 V
Si el ESP32 también se alimenta desde esa fuente:
Fuente 5 V + ───────────── 5V/VIN ESP32 Fuente 5 V GND ──────────── GND ESP32
El GPIO del ESP32 solo manda datos. No alimenta los LED.

Alimentación y consumo
El ARGB puede consumir bastante más que los motores. Como regla orientativa, un LED ARGB tipo WS2812 puede acercarse a 60 mA en blanco al 100 %. Por tanto:
36 LED × 0,06 A = 2,16 A a 5 V 43 LED × 0,06 A = 2,58 A a 5 V 72 LED × 0,06 A = 4,32 A a 5 V
Para tres ventiladores ARGB normales, una fuente de 5 V y 5 A suele ser una elección razonable. Si se desconoce el número exacto de LED, conviene limitar el brillo mientras se hacen pruebas.
¿Un GPIO para los tres ventiladores?
Sí. Hay dos formas posibles.
Opción 1: conexión en paralelo
Los tres ventiladores reciben la misma señal DATA:
GPIO26 ── 330Ω ──┬── DATA ventilador 1
├── DATA ventilador 2
└── DATA ventilador 3
En esta configuración, los tres ventiladores hacen exactamente lo mismo. Si el LED 1 está rojo en uno, estará rojo en los tres.
Es la opción más sencilla.
Opción 2: conexión en cadena
La salida de datos de un ventilador entra en el siguiente:
GPIO26 ── 330Ω ── DATA IN ventilador 1 DATA OUT ventilador 1 ─── DATA IN ventilador 2 DATA OUT ventilador 2 ─── DATA IN ventilador 3
En este caso se puede controlar toda la cadena como una tira larga.
Por ejemplo:
14 LED + 14 LED + 15 LED = 43 LED
Entonces en ESPHome se configuraría:
num_leds: 43
Particularidad encontrada: ventiladores iguales con distinto número de LED
Durante las pruebas se detectó algo curioso: tres ventiladores aparentemente iguales no tenían el mismo número de LED. Dos tenían 14 LED y uno tenía 15 LED.
Si los ventiladores están conectados en paralelo al mismo GPIO, lo más práctico es configurar el número común más bajo:
num_leds: 14
Así todos los ventiladores se sincronizan correctamente. El LED extra del ventilador de 15 LED simplemente no se utiliza en los efectos.
Si están conectados en cadena, se debe configurar el total real:
num_leds: 43
Configuración ESPHome
El componente esp32_rmt_led_strip necesita indicar el pin de datos, el número de LED, el chipset y el orden de color. La documentación oficial muestra precisamente estas opciones: pin, num_leds, chipset y rgb_order.
Ejemplo de configuración para ventiladores ARGB:
substitutions:
device_name: "control-argb-rack"
friendly_name: "Control ARGB Rack"
argb_leds: "14"
esphome:
name: ${device_name}
friendly_name: ${friendly_name}
esp32:
board: esp32dev
framework:
type: esp-idf
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
ap:
ssid: "${friendly_name} Fallback"
password: "cambia-esta-clave"
captive_portal:
logger:
api:
ota:
- platform: esphome
light:
- platform: esp32_rmt_led_strip
id: argb_fans
name: "ARGB ventiladores"
pin: GPIO26
num_leds: ${argb_leds}
chipset: ws2812
rgb_order: GRB
restore_mode: RESTORE_DEFAULT_OFF
effects:
- addressable_rainbow:
name: "Arco iris"
speed: 10
width: 50
- addressable_color_wipe:
name: "Barrido RGB"
colors:
- red: 100%
green: 0%
blue: 0%
num_leds: 6
- red: 0%
green: 100%
blue: 0%
num_leds: 6
- red: 0%
green: 0%
blue: 100%
num_leds: 6
add_led_interval: 80ms
reverse: false
- random:
name: "Aleatorio suave"
transition_length: 5s
update_interval: 8s
button:
- platform: restart
name: "Reiniciar Control ARGB"
Una vez cargado este firmware, Home Assistant mostrará una entidad light desde la que se podrá elegir color, brillo y efectos. ESPHome indica que los efectos definidos en la configuración aparecen como entradas en el desplegable de efectos de la luz en Home Assistant.
Efecto para contar LED uno a uno
Para comprobar cuántos LED reales tiene cada ventilador, se puede añadir un efecto personalizado que encienda un solo LED cada vez, avanzando de uno en uno.
ESPHome permite crear efectos personalizados para luces direccionables mediante addressable_lambda. Este tipo de efecto permite acceder individualmente a cada LED usando it[num], consultar el número total con it.size() y asignar colores mediante Color(r, g, b).
Añadimos este efecto dentro de effects::
- addressable_lambda:
name: "Contador LED uno a uno"
update_interval: 250ms
lambda: |-
static int pos = 0;
for (int i = 0; i < it.size(); i++) {
it[i] = Color(0, 0, 0);
}
it[pos] = Color(255, 255, 255);
pos++;
if (pos >= it.size()) {
pos = 0;
}
Para usarlo como prueba, se puede subir temporalmente el número de LED:
argb_leds: "50"
Luego se activa el efecto desde Home Assistant y se observa hasta qué LED llega antes de volver al inicio. Esto permitió descubrir que los ventiladores aparentemente iguales no tenían todos el mismo número de LED.
Configuración final recomendada para tres ventiladores en paralelo
Si los tres ventiladores están conectados al mismo GPIO en paralelo y se quiere que todos hagan exactamente lo mismo:
substitutions: argb_leds: "14"
Y el bloque de luz:
light:
- platform: esp32_rmt_led_strip
id: argb_fans
name: "ARGB ventiladores"
pin: GPIO26
num_leds: ${argb_leds}
chipset: ws2812
rgb_order: GRB
restore_mode: RESTORE_DEFAULT_OFF
effects:
- addressable_lambda:
name: "Contador LED uno a uno"
update_interval: 250ms
lambda: |-
static int pos = 0;
for (int i = 0; i < it.size(); i++) {
it[i] = Color(0, 0, 0);
}
it[pos] = Color(255, 255, 255);
pos++;
if (pos >= it.size()) {
pos = 0;
}
- addressable_rainbow:
name: "Arco iris"
speed: 10
width: 50
- random:
name: "Aleatorio suave"
transition_length: 5s
update_interval: 8s
Problemas encontrados
Durante el montaje se detectó que al conectar el ARGB los ventiladores parecían perder velocidad. El problema no era la configuración del ARGB, sino la alimentación y las masas compartidas.
La solución fue separar correctamente:
12 V → motores 5 V → ARGB y ESP32 GND común → solo como referencia común, con cableado adecuado
Aunque motor y ARGB estén físicamente en el mismo ventilador, no siempre comparten GND internamente. Por tanto, para que el ESP32 controle ambas partes, debe existir una referencia común entre:
GND fuente 12 VGND motor ventiladoresGND fuente 5 VGND ARGBGND ESP32
Eso no significa mezclar positivos. Nunca se debe unir +12 V con +5 V.
Recomendaciones finales
Para un montaje fiable:
1. Confirmar que el conector es ARGB 5 V, no RGB 12 V. 2. Alimentar ARGB con fuente de 5 V suficiente. 3. No alimentar los LED desde el GPIO del ESP32. 4. Usar resistencia de 330 Ω en DATA. 5. Unir GND de fuente 5 V, ESP32 y ARGB. 6. Si también se controlan motores PWM, unir también GND de la fuente de 12 V. 7. Limitar brillo al principio. 8. Ajustar num_leds al número real de LED.
Si aparecen parpadeos, colores incorrectos o fallos al poner blanco, las causas más habituales son:
Fuente de 5 V insuficiente Masa común deficiente Número de LED mal configurado Ausencia de conversor de nivel lógico Cable DATA demasiado largo o sin resistencia
Conclusión
Controlar la iluminación ARGB de ventiladores desde ESPHome es bastante sencillo si se respetan las diferencias entre el circuito de motor y el circuito de iluminación.
La clave está en recordar que:
Motor PWM → 12 V ARGB → 5 V DATA → GPIO del ESP32 GND → referencia común
Con un ESP32, ESPHome y el componente esp32_rmt_led_strip, la iluminación queda integrada en Home Assistant como cualquier otra luz, con control de color, brillo y efectos personalizados.
