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)