HA ESPHome Tira LED

Segmentos LED con ESPHome

En esta entrada vamos a aprender a crear segmentos LED con ESPHome, para utilizar cada LED como un dispositivo independiente o unir varias tiras.

🥑 Si estás empezando con ESPHome, te recomiendo que veas el taller de la academia para sacarle el máximo partido!
Esphome para novatos

¿Qué es un segmento LED?

Visualiza una tira LED compuesta por 100 LED, que constituye por sí misma un único segmento. Esto quiere decir que funciona y responde como un único dispositivo. Por ejemplo, podemos hacer que se encienda de color rojo cuando encendemos la calefacción.

Es cierto que si usamos una tira led direccionable o «inteligente» podemos crear efectos complejos de iluminación, como un arcoiris, ya que estas permiten que cada LED se controle de forma individual. Sin embargo, la tira LED sigue funcionando como un único dispositivo, reproduciendo un único efecto de iluminación.

Dicho esto, las tiras direccionables nos permiten dividirlas en segmentos, tramos o subconjuntos de LEDs y utilizarlas como dispositivos independientes. Por ejemplo, podemos dividir la tira de 100 LED en dos segmentos de 50 LED, y colocarlo en un escritorio donde trabajan dos personas (para que cada uno reciba sus notificaciones luminosas).

Requisitos previos

Para utilizar segmentos LED con ESPHome necesitas:

  • Una tira LED direccionable. En mi caso siempre utilizo el modelo WS2812b, por ser baratísimo y fácil de encontrar en cualquier formato (tiras, anillos, paneles matrix…)
  • Haber instalado ESPHome en Home Assistant.

-49%
Tira de LED inteligente WS2812B, WS2811, WS2813, WS2815, 5050, RGBIC, WS2812, IC direccionable individualmente, 30/60/144 píxeles/LED/m, luz DC5V/12V
Aliexpress
2,32€ 4,55€
Tira de LED inteligente WS2812B, WS2811, WS2813, WS2815, 5050, RGBIC, WS2812, IC direccionable individualmente, 30/60/144 píxeles/LED/m, luz DC5V/12V
Panel de luz LED Flexible, Panel de luz direccionable individual, Digital, RGB, WS2812, 8x8, 16x16, 8x32, módulo de pantalla matriz, DC5V
Aliexpress
3,30€
Panel de luz LED Flexible, Panel de luz direccionable individual, Digital, RGB, WS2812, 8x8, 16x16, 8x32, módulo de pantalla matriz, DC5V
Anillo de diodo Led WS2812b direccionable, 8/16/24/35/45Leds, 5050 RGB, Color IC incorporado
Aliexpress
2,06€
Anillo de diodo Led WS2812b direccionable, 8/16/24/35/45Leds, 5050 RGB, Color IC incorporado
-30%
Tira de luces Led WS2812B, luz mágica direccionable individualmente, pixeles inteligentes, PCB blanco y negro, IP30, 65, 67, DC5V, WS2812
Aliexpress
3,05€ 4,36€
Tira de luces Led WS2812B, luz mágica direccionable individualmente, pixeles inteligentes, PCB blanco y negro, IP30, 65, 67, DC5V, WS2812
*Algún precio puede haber cambiado desde la última revisión

Dividir una tira en segmentos

Bien, entendido lo anterior vamos a ver como podemos crear segmentos LED con ESPHome, desde una tira/anillo/panel LED uniforme. Vamos a establecer como punto de partida que ya has integrado tus LED en ESPHome y que, dependiendo del componente que hayas utilizado, tendrás un código similar al siguiente en la configuración de tu placa.

light:
  - platform: esp32_rmt_led_strip
    id: led_ring
    rgb_order: GRB
    pin: GPIO09
    num_leds: 8
    rmt_channel: 1
    chipset: ws2812
    name: "Led Ring"

En este caso corresponde a un anillo de 8 LED que he integrado utilizando el componente ESP32 RMT LED Strip. Estos detalles no son relevantes, ya que funcionaría igual, por ejemplo, para una tira de 50 LED integrada con el componente FastLED Light.

Lo importante aquí es que tenemos un dispositivo de iluminación bajo el dominio ‘light’ con un ‘id’ que le identifica (en este caso, «led_ring»). Partiendo de esto vamos a crear dos segmentos utilizando el componente Light Partition. Básicamente, este nos permite dividir en segmentos una tira LED direccionable y de esta forma conseguir transformarla (virtualmente) en dos dispositivos independientes.

Por ejemplo, partiendo del código anterior, vamos a dividir por la mitad el anillo de 8 LED. De esta forma podremos usar, por un lado, los 4 LED de la parte izquierda y, por otro, los 4 LED de la parte derecha como dispositivos independientes. Esto lo hacemos transformando el código de la siguiente forma:

light:
  - platform: partition
    name: "Segmento 1"
    id: segmento_1
    segments:
      - id: led_ring
        from: 0
        to: 4

  - platform: partition
    name: "Segmento 2"
    id: segmento_2
    effects:
      - pulse:
    segments:
      - id: led_ring
        from: 6
        to: 7

  - platform: esp32_rmt_led_strip
    id: led_ring
    internal: true # Añade aquí esta línea
    rgb_order: GRB
    pin: GPIO09
    num_leds: 8
    rmt_channel: 1
    chipset: ws2812
    name: "Led Ring"

Revisa el código anterior y observa lo siguiente:

  • Para crear un segmento sólo tienes que añadir el bloque correspondiente. Cada segmento tiene su nombre y su ‘id’, y podrás controlarlo desde tu panel de control de forma independiente.
  • En cada segmento se indica el ‘id’ del dispositivo de referencia, del que debe seleccionar los LED que forman el segmento.
  • En cada segmento tienes que indicar que LED se incluyen. Para ello indicamos el primer LED incluido (en el campo «from»), siguiendo el orden de los mismos en la tira y empezando por ‘0’, y el último LED de la cadena (en el campo «to»). Por cierto, no es necesario que todos los LED formen parte de un segmento (si te fijas, no he incluido el LED 5 en ningún tramo).
  • Como cada segmento funciona como un dispositivo independiente, puedes asignarle propiedades específicas. Por ejemplo, si te fijas en el segundo segmento he añadido el código correspondiente para que reproduzca el efecto de iluminación «Pulse».
  • He añadido una línea en el código original, que indica ‘internal: true’. Esto hace que la tira LED en su conjunto se trate como un dispositivo «interno», pero no aparezca como un dispositivo controlable en el panel de control.

Una vez termines de editar el código no olvides actualizarlo en tu placa para que haga efecto!

Unir varias tiras en un segmento

El componente Light Partition también permite coger segmentos de distintos dispositivos y considerarlos como un sólo. Por ejemplo, imagina que además de tener una tira de 100 LED en el escritorio, tienes otra igual en una balda que se encuentra sobre el mismo. Puedes coger los 50 LED izquierdos de cada tira y crear un segmento, y hacer lo mismo con el lado derecho.

El código es muy similar al que has visto en el apartado anterior:

light:
  - platform: partition
    name: "Lado izquierdo"
    segments:
      - id: tira_escritorio
        from: 0
        to: 49
      - id: tira_balda
        from: 0
        to: 49

  - platform: fastled_clockless
    id: tira_escritorio
    internal: true

  - platform: fastled_clockless
    id: tira_balda
    internal: true

Básicamente en esta ocasión lo que estamos haciendo es añadir al segmento dos conjuntos de LED, cada uno perteneciente a una de las tiras. De esta forma ambos segmentos responderán al unísono como un único dispositivo.


¿Dudas?¿necesitas ayuda? entra aquí
Y si te ha gustado, compártelo! 🙂
Contenido exclusivo de Aguacatec
Send this to a friend