Conectar y controlar LEDs WS2812B a ESP8266 con ESPEasy

Última modificación el 23 febrero, 2021

¿Quieres conectar LEDs WS2812 a un ESP8266 con ESP Easy? En este tutorial te voy a enseñar a hacerlo fácilmente.

Los LEDs WS2812 (también llamados NeoPixels) son fantásticos y nos dan unas posibilidades y una flexibilidad increíble.

Los WS2812 se presentan tanto de forma individual como en tiras, pero mientras que una tira normal RGB se enciende toda a la vez de un color, en este caso podemos controlar cada LED independientemente.

Son LEDs que podemos conectar el paralelo, uniendo tantos como queramos con solo tres cables y la gran ventaja es que los podemos controlar de uno en uno. Podemos encender unos y apagar otros, poner cado uno del color que queramos y regular su intensidad independientemente.

Estos LEDs son de los llamados RGB porque cada uno de ellos tiene los tres colores básicos (rojo, verde y azul). Lo que quiere decir que podemos conseguir muchísimos colores combinando esos tres colores básicos (incluso el blanco, si encendemos los tres colores juntos con la misma intensidad).

Además, se alimentan a 5 voltios, lo que facilita mucho los montajes, al no necesitar fuentes de alimentación adicionales. Podemos utilizar la misma alimentación de un NodeMCU o Wemos D1 Mini o poner un cargador de móvil independiente para alimentarlos (u otra fuente de alimentación mayor si hay muchos LEDs).

Solamente tienes que tener en cuenta una cosa: cada color de cada led, encendido al 100% consume 20mA. Cada LED tiene tres colores. Esto significa que un LED puede consumir 60mA si encendemos sus tres colores a máxima potencia al mismo tiempo.

Si ponemos una tira de 10 LEDs WS2812 consumirá un máximo de 600mA. Tenlo en cuenta a la hora de pensar en el alimentador que usarás.

Los alimentadores de móvil suelen proporcionar entre 500 y 2000mA, mira de cuanto es el tuyo y calcula cuántos LEDs puedes conectar a tu alimentador para no exceder su capacidad.

Diagrama con las conexiones del NodeMCU a los LEDs WS2812 (Neopixel)

Como te decía, la conexión no puede ser más fácil. ¡Solamente tres cables y a funcionar!

En el ejemplo he utilizado tres LED WS2812B pero, una de las grandes ventajas de este tipo de LED, es que puedes utilizar los que quieras. Eso sí, ten en cuenta el consumo, cada LED puede consumir hasta 60 mA.

Configuración ESPEasy

Una vez que tengas hechas las conexiones, tienes que configurar el ESPEasy para que reconozca los dispositivos e incluir unas sencillas reglas para que se comporten de la forma que queramos.

Te voy a poner como ejemplo el medidor de CO₂ casero de eMariete, pero puedes utilizarlo exactamente igual con cualquier otro proyecto.

Básicamente, tendremos que hacer lo siguiente:

  1. Activar el motor de reglas de ESPEasy
  2. Añadir una regla para que cuando se encienda el ESP8266 lo haga con los LEDS apagados
  3. Añadir una regla para que cambie el color de los LEDS dependiendo del nivel de CO2

No es necesario que des de alta los LEDs como dispositivo en la pestaña “Devices”.

Activar el motor de reglas de ESPEasy

Lo primero que debes hacer, es activar el motor de reglas de ESPEasy, si no lo has hecho ya.

Para ello, vete a la pestaña “Tools” (Herramientas) y pulsa el botón “Advanced” (Avanzado):

Se abrirá la ventana con las opciones de configuración avanzadas de ESPEasy.

Allí debes activar las opciones “Rules” (Reglas) y “Old Engine” (Viejo Motor):

Añadir una regla para que cuando se encienda lo haga con los LEDS apagados

Ahora tienes que escribir las reglas, en la pestaña “Rules” (Reglas). Esta pestaña no aparecerá hasta que no habilites el motor de reglas, como has visto en el punto anterior:

En el editor de reglas que aparece en ESPEasy, escribes las siguientes reglas (te recomiendo copiar y pegar, para evitar errores y dejar los comentarios – líneas que empiezan por // – que ESPEasy ignorará).

Deberás sustituir Senseair#PPM por el nombre de dispositivo y valor que hayas elegido (en la pestaña “Devices” – Dispositivos). En esta captura de pantalla el nombre del dispositivo es CO2, por lo que en vez de Senseair#PPM escribiríamos CO2#PPM:

On System#Boot do
  NeoPixelAll,0,0,0 // LEDS APAGADOS
EndOn

La línea NeoPixelAll,0,0,0 ordena a ESPEasy que apague todos los LEDS.

Realmente lo que le dice esta línea es que ponga el Rojo a 0, el Verde a 0 y el Azul a 0.

Al estar la línea NeoPixelAll,0,0,0 entre “un bloque“, formado por la línea On System#Boot do y EndOn, le indicamos a ESPEasy que lo ejecute al arrancar el NodeMCU (cualquier cosa que metas dentro de ese bloque se ejecutará cada vez que el NodeMCU se encienda).

Añadir una regla para que cambie el color de los LEDS dependiendo del nivel de CO2

Ahora añade este otro bloque a las reglas:

On SenseairCO2#PPM do
  if [SenseairCO2#PPM]>2000
    NeoPixelAll,32,0,0 // LEDS ROJO
  Elseif [SenseairCO2#PPM] > 1500
    NeoPixelAll,16,9,0 // LEDS NARANJA
  Else
    NeoPixelAll,0,32,0 // LEDS VERDE
  Endif
endon

Este bloque ordena a ESPEasy que cada vez que reciba un nuevo valor desde el sensor SenseairCO2 (On SenseairCO2#PPM do), compruebe lo siguiente:

si el valor de SenseairCO2#PPM es superior a 2000 y, de ser así, encienda todos los LEDs de la tira con los siguientes valores: Rojo a 32, el Verde a 0 y el Azul a 0.

si no se cumple lo anterior (que el valor de SenseairCO2#PPM sea superior a 2000), comprobará si el valor es superior a 1500 y, si se cumple, encienda todos los LEDs de la tira con los siguientes valores: Rojo a 16, el Verde a 9 y el Azul a 0 (un amarillo/naranja).

si no se cumple lo anterior (que el valor de SenseairCO2#PPM sea superior a 1500), y sin hacer más comprobaciones, encenderá todos los LEDs de la tira con los siguientes valores: Rojo a 0, el Verde a 32 y el Azul a 0.

la línea endon termina el bloque de comprobaciones que empezó con On SenseairCO2#PPM do.

El resultado final, debería ser similar a este:

Añadir una regla para hacer un semáforo de LEDs

Con los LEDs WS2812 es posible crear, por ejemplo, un efecto de semáforo, en el que, con una tira de tres LED, colocados de manera vertical, podremos encender el primer LED de la tira en verde, el segundo en naranja y el tercero en rojo, dependiendo del nivel de CO2 o de cualquier otro valor.

El comando a enviar para encender un led determinado de la tira es:

NeoPixel, NumeroLed, CantidadDeRojo, CantidadDeVerde, CantidadDeAzul

Siendo NumeroLed la posición que ocupa el LED que queremos controlar en la tira, y la cantidad de rojo, verde y azul un número entre 0 (apagado) y 255 (encendido al 100% de intensidad).

Para encender el primer LED en rojo (al 50% de intensidad, por ejemplo, ya que el 100% es muy fuerte para mi gusto) utilizaríamos el comando:

NeoPixel,1,128,0,0

Para encender el segundo LED en ámbar (al 50% de intensidad), lo podríamos hacer sumando un 25% de rojo más un 12% de verde. Para conseguir esto utilizaríamos el comando:

NeoPixel,2,64,32,0

Para encender el tercer LED en verde (al 50% de intensidad), utilizaríamos el comando:

NeoPixel,3,0,64,0

La regla que deberíamos incluir sería esta:

On SenseairCO2#PPM do
  if [SenseairCO2#PPM]>900
    NeoPixelAll,0,0,0 // APAGAMOS LOS LED
    NeoPixel,1,128,0,0 // ENCENDEMOS EL PRIMER LED EN ROJO
  Elseif [SenseairCO2#PPM] > 800
    NeoPixelAll,0,0,0 // APAGAMOS LOS LED
    NeoPixel,2,64,32,0 // ENCENDEMOS EL SEGUNDO LED EN NARANJA
  Else
    NeoPixelAll,0,0,0 // APAGAMOS LOS LED
    NeoPixel,3,0,64,0 // ENCENDEMOS EL TERCER LED EN VERDE
  Endif
endon

He escogido los niveles de CO2 para que el semáforo se ponga rojo cuando se superen las 900 ppm (según la normativa RITE IDA 2 para aulas de enseñanza, adecuado para aulas de colegios). Siéntete libre de sustituir los valores de 900 y 700 por los que más te convengan.

Dependiendo de a qué distancia se vaya a ver y de la luminosidad de la sala, puedes ajustar la intensidad de los LEDs (uno de estos LEDS encendido al máximo, valor de 255, se ve mucho).

Como verás antes de encender cada led primero apagamos la tira completa, utilizando el comando NeoPixelAll,0,0,0 porque, si no lo hiciéramos así, en los cambios de color (por ejemplo, al pasar de verde a naranja), se quedarían encendidos los dos LEDS.

Este tipo de LEDS es perfecto para hacer semáforos y otros indicadores. Mejor que las tiras porque se pueden utilizar unidos o separar de forma individual.

Mucho mejor que las tiras LED, que dan mucha menos flexibilidad.

Pincha en la imagen o aquí para ver dónde los compro yo.

Video tutorial paso a paso

Aunque el montaje y configuración son muy sencillos, en el video de la caja en 3D tienes instrucciones específicas y detalladas de conexión y configuración de los LEDs, ya que los utilizaba.

En él podrás encontrar explicaciones, detalles y consejos de todo tipo.

Deja un comentario