Tira de LED RGB Direccionable con MicroPython - pensactius/Tutoriales GitHub Wiki
MicroPython permite controlar tiras de leds RGB direccionables tipo NeoPixels directamente. Veamos algunos ejemplos sencillos.
import machine, neopixel
np = neopixel.NeoPixel(machine.Pin(4), 8)
np[0] = (255, 0, 0) # primer led rojo, máximo brillo
np[1] = (0, 128, 0) # segundo led verde, 1/2 de brillo
np[2] = (0, 0, 64) # tercer led azul, 1/4 de brillo
np.write() # muestra el estado de los LEDs
En primer lugar importamos las librerías necesarias para el control de pines (machine) y de la tira de leds (neopixel).
import machine, neopixel
A continuación creamos un objeto de tipo NeoPixel que permitirá controlar los LEDs. Al crear el objeto le decimos que la tira está conectada al GPIO 4
(D2) y que queremos controlar 8 leds.
np = neopixel.NeoPixel(machine.Pin(4), 8)
Accedemos a cada LED mediante su índice correspondiente (comenzando por 0) y asignamos el color deseado mediante una tupla con los tres valores RGB.
np[0] = (255, 0, 0) # primer led rojo, máximo brillo
np[1] = (0, 128, 0) # segundo led verde, 1/2 de brillo
np[2] = (0, 0, 64) # tercer led azul, 1/4 de brillo
Hasta ahora únicamente hemos cambiado los datos del objeto, pero éste no es más que una abstracción del mundo real. Físicamente la tira de leds no muestra el estado hasta que no llamamos al método write().
np.write() # muestra el estado de los LEDs
Ejemplo - Sube y baja
En este ejemplo vamos a ver el uso de la instrucción for para iluminar un led con un efecto de subir y bajar a lo largo de la tira:
#
# neopixels-ida_y_vuelta.py
#
# Enciende un led del mismo color que se mueve a lo largo de la tira
# en un efecto de ida y vuelta.
#
import machine, neopixels
NUM_LEDS = 8
DI = 4
np = neopixels.NeoPixels (machine.Pin(DI), NUM_LEDS)
while True:
# Efecto de Subida
for i in range(NUM_LEDS):
# Enciende el led actual
np[i] = (0, 8, 63)
# Apaga el led anterior
if i > 0:
np[i-1] = (0, 0, 0)
Efectos Básicos
(extraído de randomnerdtutorials.com](https://randomnerdtutorials.com/micropython-ws2812b-addressable-rgb-leds-neopixel-esp32-esp8266/)) Ahora que ya sabemos controlar LEDs de individualmente podemos empezar a realizar algunos efectos. Crearemos algunas funciones propias que podremos reutilizar en nuestros proyectos.
Borrar todos los LEDs
Borrar todos los leds es lo mismo que poner todos los leds al color (0, 0, 0).
def clear():
for i in range(NUM_PIXELS):
np[i] = (0, 0, 0)
np.write()
Establecer N leds al mismo color
De forma similar, podemos hacer una función que establezca tantos leds como indiquemos (n) del mismo color (color)
def set_color(color, n):
for i in range(n):
np[i] = color
np.write()
Si quisiéramos encender los ocho primeros leds a rojo podríamos usar la función así:
set_color( (64, 0, 0), 8)
La versión de la librería neopixels para ESP8266 ya tiene un método que hace exactamente lo mismo: neopixels.fill(). Para conseguir el mismo efecto del ejemplo anterior se podría usar de esta forma:
np.fill( (63, 0, 0), 8)