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!
Índice
¿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.
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! 🙂