RGB LED Interno con CircuitPython

Todas las tarjetas tienen un LED RGB integrado. Puedes utilizar a CircuitPython para controlar el color y la intensidad de este LED. Hay dos tipos diferentes de LEDs RGB integrados, los DotStar y los NeoPixel. Esta sección los cubre a ambos y explica cual tarjeta tiene cual tipo de LED.

circuitpython_NeoPixelDotStar.jpg
Un NeoPixel en la izquierda, un DotStar a la derecha. No es a escala... ¡los DotStars integrados son pequeños!

Este primer ejemplo de muesta como cambiar de color e intensidad en el LED RGB integrado.

Copia y pega el código dentro de code.py utilizando tu editor favor y salva el archivos.

import time
import board

# For Trinket M0, Gemma M0, ItsyBitsy M0 Express, and ItsyBitsy M4 Express
import adafruit_dotstar
led = adafruit_dotstar.DotStar(board.APA102_SCK, board.APA102_MOSI, 1)
# For Feather M0 Express, Metro M0 Express, Metro M4 Express, and Circuit Playground Express
# import neopixel
# led = neopixel.NeoPixel(board.NEOPIXEL, 1)

led.brightness = 0.3

while True:
    led[0] = (255, 0, 0)
    time.sleep(0.5)
    led[0] = (0, 255, 0)
    time.sleep(0.5)
    led[0] = (0, 0, 255)
    time.sleep(0.5)

Creando el objeto LED

Primero, creamos el objeto LED y lo conectamos con el pin o pines correctos. En el caso del NeoPixel, solo es necesario un pin, y lo hemos llamado NEOPIXEL para facilidad de uso. Sin embargo, para el caso de un DotStar es necesario dos pines, así vamos a usar los pines nombrados como APA102_MOSI y APA102_SCK para configurarlo. Ya que estamos usando un solo LED integrado, ¡lo siguiente que queremos es decirle que la cantidad de LEDs es 1!

En las Trinket M0, Gemma M0, ItsyBitsy M0 Express, y las ItsyBitsy M4 Express tienen su propio LED Dotstar integrado, por lo que no se requieren cambios a la versión inicial de este ejemplo.

Para las Feather M0 Express, Feather M4 Express, Metro M0 Express, Metro M4 Express, y Circuit Playground Express tienen su propio LED  NeoPixel integrado, así que debes comentar  import adafruit_dotstar y led = adafruit_dotstar.DotStar(board.APA102_SCK, board.APA102_MOSI, 1), y descomentar import neopixel y led = neopixel.NeoPixel(board.NEOPIXEL, 1).

Recuerda: Para "comentar" una línea, agrega un # y un espacio en blanco al inicio. Para "descomentar" una línea, remueva el # más el espacio en blanco del inicio.

Brillo

Para definir el brillo, simplemente utilice el atributobrightness. El brillo se define con un número entre 0 y 1, que representa un porcentaje de 0% a 100%. Así que, led.brightness = (0.3) ajusta el brillo del LED a un 30%. El brillo por omisión es 1 o 100%, y ¡en su máximo el LED es demasiado brillante! Lo puedes bajar si así lo deseas.

Ciclo Principal

Los colores del LED se definen con una combinación de rojo (red), verde (green), y azul (blue), en la forma de una tupla (RG, B). Cada miembro de la tupla es un número entre 0 y 255 que determina la cantidad de color presente. ¡Rojo, verde y azul en diferentes combinaciones pueden crear todos los colores del arcoiris! Así que por ejemplo, para prender el LED en rojo, la tupla sería (255, 0, 0), lo cual es el máximo de color para el rojo, y nada de verde o azul. Verde sería (0, 255, 0) y así. Para los colores intermedios, puedes definir una combinación como cían sería (0, 255, 255), con cantidades iguales de verde y azul.

El ciclo principal es muy sencillo. Define el primer LED en rojo utilizando (255, 0, 0), luego verde usando (0, 255, 0), y finalmente azul usando (0, 0, 255). Luego hacemos un llamado a  time.sleep() para que se quede en cada color un periodo de tiempo. Escogemos  time.sleep(0.5), o medio segundo. ¡Sin el time.sleep() va a parpadear los colores demasiado rápido y va a ser difícil de ver!

Observe que definimos led[0]. Esto quiere decir el primero, en el caso de la mayoría de tarjetas, el único LED. En CircuitPython, los contadores inician en 0. ¡Así que el primero objeto de por ejemplo una lista, va a ser 0!

Trata cambiando los números en las tuplas, para cambiar tu LED a cualquier color del arcoiris. O, puedes agregar más líneas con diferentes tuplas de color para agregar más colores a la secuencia. Siempre agrega time.sleep(), ¡pero trata cambiando la cantidad de tiempo para crear diferentes animaciones de ciclo!

Haciendo Arcoiris (¿a quién no le gustan?)

Programar efectos de arcoiris involucra un poquito de matemática y una función llamada wheel. Para detalles de como funciona wheel, ¡observa esta explicación!!

El último ejemplo muestra como agregar la animación de arcoiris al LED RGB integrado.

Copia y pega el código en code.py utilizando tu editor favorito y salva el archivo. Recuerda comentar y descomentar las líneas apropiadas para tu tarjeta, según se explicó arriba.

import time
import board

# For Trinket M0, Gemma M0, ItsyBitsy M0 Express and ItsyBitsy M4 Express
import adafruit_dotstar
led = adafruit_dotstar.DotStar(board.APA102_SCK, board.APA102_MOSI, 1)
# For Feather M0 Express, Metro M0 Express, Metro M4 Express and Circuit Playground Express
# import neopixel
# led = neopixel.NeoPixel(board.NEOPIXEL, 1)


def wheel(pos):
    # Input a value 0 to 255 to get a color value.
    # The colours are a transition r - g - b - back to r.
    if pos < 0 or pos > 255:
        return 0, 0, 0
    if pos < 85:
        return int(255 - pos * 3), int(pos * 3), 0
    if pos < 170:
        pos -= 85
        return 0, int(255 - pos * 3), int(pos * 3)
    pos -= 170
    return int(pos * 3), 0, int(255 - (pos * 3))


led.brightness = 0.3

i = 0
while True:
    i = (i + 1) % 256  # run from 0 to 255
    led.fill(wheel(i))
    time.sleep(0.1)

Vamos a agregar la función wheel luego de setup, pero antes de nuestro ciclo principal.

Y justo antes de nuestro ciclo principal, asignamos a la variable i = 0, así que está listo para usarse dentro del ciclo.

El ciclo principal contiene algo de matemática que cicla i de 0 a 255 y de vuelta de nuevo de forma repetida. ¡Usamos esto para ciclar wheel() alrededor del arcoiris!

El time.sleep() determina la velocidad con la que el arcoiris cambia. ¡Trata un número mayor para un arcoiris más lento, y un número menor para uno más rápido!

Arcoiris en la Circuit Playground Express

Note que aquí usamos led.fill en lugar de led[0]. Esto significa que prendemos todo los LEDs, que en nuestro código actual es solo uno. ¿Para que preocuparnos con fill? Bueno, es posible que tengas una Circuit Playground Express, la cual tiene DIEZ LEDs NeoPixel integrados. Los ejemplos hasta el momento solo han prendido el primero. Si deseas realizar un arcoiris con todos los diez LEDs, cambie el 1 en:

led = neopixel.NeoPixel(board.NEOPIXEL, 1)

por 10 para que lea:

led = neopixel.NeoPixel(board.NEOPIXEL, 10).

Esto le dice al código que busque 10 LEDs, en lugar de solo 1. Ahora salve el código y ¡observe como se mueve el arcoiris! Puede cambiar el mismo 1 por 10 en los ejemplos anteriores, y ¡utilizar led.fill para prender los LEDs con los colores que escoja! Para más detalles, revise la sección de NeoPixel en la guía de CPX!

This guide was first published on Jun 24, 2020. It was last updated on Jun 24, 2020.
This page (RGB LED Interno con CircuitPython) was last updated on Jul 08, 2020.