Approved Reseller
Approved Reseller
El chip WS2812 es uno de los más fáciles de usar para añadir LEDs RGB a tu proyecto. Los LED también se conocen como Neopixel y son muy utilizados en proyectos de wearables y anuncios luminosos. Para controlarlos se usa un protocolo especial definido por el fabricante y se le envía a cada LED individual el color que debe tener, por lo que se pueden tener más 10 LEDs en un mismo pin, encendiendo de un distinto color.
Para controlar la tira de LEDs solo necesitas un pin de datos. En el código vamos a crear el protocolo que le manda la información a la tira de LEDs, por lo que no importa si no es I2C o SPI.
Este código permite crear el protocolo que maneja los 10 LEDS de tu tira RGB WS2812. Para compilarlo con la versión mas reciente de Thonny vas a necesitar copiar el bootloader de la página de Raspberry, ya que el que genera el IDE puede darte problemas para compilar. Una vez hayas descargado y copiado el archivo a tu Pico, puedes proceder a cargar el código.
import array, utime from machine import Pin import rp2 from rp2 import PIO, StateMachine, asm_pio # Configure the number of WS2812 LEDs. NUM_LEDS = 10 @asm_pio(sideset_init=PIO.OUT_LOW, out_shiftdir=PIO.SHIFT_LEFT, autopull=True, pull_thresh=24) def ws2812(): T1 = 2 T2 = 5 T3 = 3 label("bitloop") out(x, 1) .side(0) [T3 -1] jmp(not_x, "do_zero") .side(1) [T1 -1] jmp("bitloop") .side(1) [T2 - 1] label("do_zero") nop() .side(0) [T2 - 1] # Create the StateMachine with the ws2812 program sm = StateMachine(0, ws2812,freq=8000000, sideset_base=Pin(0)) #Start the StateMachine, it will wait for data on its FIFO sm.active(1) ar = array.array("I", [0 for _ in range (NUM_LEDS)]) print("blue") for j in range (0,255): for i in range (NUM_LEDS): ar[i] = j sm.put(ar,8) utime.sleep_ms(10) print("red") for j in range (0,255): for i in range (NUM_LEDS): ar[i] = j<<8 sm.put(ar,8) utime.sleep_ms(10) print("green") for j in range (0,255): for i in range (NUM_LEDS): ar[i] = j<<16 sm.put(ar,8) utime.sleep_ms(10) print("white") for j in range (0,255): for i in range (NUM_LEDS): ar[i] = (j<<16) + (j<<8) + j sm.put(ar,8) utime.sleep_ms(10)
Conclusiones:
Con este código puedes mandar la secuencia de colores que quieras a tu tira de LEDs RGB WS2812. Solo necesitas configurar que color quieres mostrar en el código. ¡Sigue el blog de 330ohms para más tutoriales de Raspberry Pico!
Para seguir leyendo…
Referencias:
Appendix C – Programmable I/O – Get started with MicroPython on Raspberry Pi Pico