neopixel.py
La trame WS2812 à 800 kHz est générée par le MCU, l'animation vient de Python : le ruban d'adresseables se met au niveau des scripts du PC. Ambiance lumineuse pilotable par la caméra ou la musique.
Matériel requis
Une LattePanda Alpha (x86 Intel m3-7Y30, Windows 10 ou Linux) avec son coprocesseur ATmega32U4 compatible Arduino Leonardo sur les connecteurs 50 broches. 12 WS2812 + alimentation 5 V externe ≥ 1 A + résistance 330-470 Ω sur la data.
Branchement
Data du ruban via 470 Ω sur D5, VDD sur l'alimentation externe, GND commun avec le connecteur. Condensateur 1000 µF conseillé sur l'alimentation du ruban.
Fonctionnement
La bibliothèque envoie la liste des couleurs au firmware PinPong qui bit-bang la trame NRZ sur le timer. Le PC rythme l'animation, le MCU tient les 1,25 µs par bit. L'ATmega32U4 est un vrai Leonardo : brochez-le en « Arduino Leonardo » dans l'IDE via son port COM interne. Côté hôte, la bibliothèque DFRobot lattepanda (Python) dialogue avec lui par série.
Pour aller plus loin
Pilotage par analyse spectrale du micro (musique → lumière), ou météo en dégradé de couleurs.
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")