neopixel.py
Une tête blanche suivie d'une traînée rouge se déplace sur un ruban de 12 NeoPixel (WS2812B), pilotés nativement par MicroPython via machine.NeoPixel. Chaque LED reçoit sa couleur dans une trame unique envoyée par write().
Matériel requis
Une carte générique à microcontrôleur RP2350 (double Cortex-M33) programmée en MicroPython. 1 ruban/anneau 12 LED NeoPixel (WS2812B) ; alimentation 5 V externe recommandée.
Câblage
Data (DIN) sur GP16 (résistance 330 Ω conseillée), VCC sur 5 V externe, GND relié à la carte.
Fonctionnement
ruban[i] = (R, V, B) écrit dans la mémoire tampon ; write() génère la séquence d'impulsions unique qui adresse chaque LED. Le modulo % fait tourner la tête en boucle.
Exécution
Flasher le MicroPython « RP2350 » via BOOTSEL (.uf2), puis copier le script sur le lecteur. La broche de la LED utilisateur varie selon le fabricant : vérifier la documentation de la carte.
Variantes
Utiliser plusieurs objets NeoPixel sur des broches différentes pour deux rubans, ou animer la couleur avec un gradient sinusoïdal.
neopixel.py
# Animation sur ruban NeoPixel/WS2812 avec le module machine.NeoPixel.
from machine import NeoPixel, Pin
import time
NB_LED = 12
ruban = NeoPixel(Pin(16), NB_LED) # data sur GP16
tete = 0
while True:
# Eteindre tout puis dessiner la scene.
for i in range(NB_LED):
ruban[i] = (0, 0, 0)
ruban[tete] = (255, 255, 255) # tete blanche
ruban[(tete - 1) % NB_LED] = (200, 0, 0) # comete rouge
ruban[(tete - 2) % NB_LED] = (80, 0, 0) # trainee
ruban.write() # une trame vers les LED
tete = (tete + 1) % NB_LED
time.sleep_ms(80)
# Attention a l'intensite : 12 LED a 255 blanc tirent plus de
# 700 mA. Alimenter le ruban par une source 5 V externe separee.