neopixel.py
La trama WS2812 a 800 kHz la genera el MCU, la animación viene de Python: la tira de direccionables se sube al nivel de los scripts del PC. Ambiente luminoso pilotable por cámara o música.
Hardware necesario
Una LattePanda Alpha (x86 Intel m3-7Y30, Windows 10 o Linux) con su coprocesador ATmega32U4 compatible Arduino Leonardo en los conectores de 50 pines. 12 WS2812 + alimentación externa de 5 V ≥ 1 A + resistencia de 330-470 Ω en la data.
Cableado
Data de la tira por 470 Ω a D5, VDD a la alimentación externa, GND común con el conector. Condensador de 1000 µF en la alimentación de la tira, recomendado.
Funcionamiento
La librería envía la lista de colores al firmware PinPong, que hace bit-bang de la trama NRZ en el timer. El PC marca el ritmo, el MCU sostiene los 1,25 µs por bit. El ATmega32U4 es un Leonardo auténtico: prográmelo como « Arduino Leonardo » en el IDE por su puerto COM interno. En el anfitrión, la librería Python lattepanda de DFRobot habla con él por serie.
Para ir más lejos
Mando por análisis espectral del micrófono (música → luz), o tiempo en degradado de color.
neopixel.py
#!/usr/bin/env python3
# 12 WS2812 sur D5 — PinPong pilote la trame, le MCU la genere.
from pinpong.board import Board, Pin
from pinpong.libs.dfrobot_neopixel import Neopixel
import time
Board().begin()
ruban = Neopixel(Pin.D5, 12)
COULEURS = [(255, 0, 0), (0, 255, 0), (0, 0, 255), (255, 255, 0)]
print("Comete RGB (Ctrl-C pour sortir)")
try:
tete = 0
while True:
ruban.rainbow(0) # fond discret
for i in range(12):
r, g, b = COULEURS[(tete + i) % 4]
ruban.set_pixel(i, r // 4, g // 4, b // 4)
ruban.set_pixel(tete, 255, 255, 255) # tete blanche
ruban.show()
tete = (tete + 1) % 12
time.sleep(0.08)
except KeyboardInterrupt:
ruban.rainbow(0)
print("\nRuban eteint")