| | | | | | |

Controlar iluminación ARGB de ventiladores con ESPHome y ESP32

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 light en 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.

Publicaciones Similares

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *