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 Raspberry Pi Pico (RP2040 double Cortex-M0+ @ 133 MHz) avec MicroPython installé, alimentée par USB. 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
Installer MicroPython si besoin (maintenir BOOTSEL, brancher l'USB, déposer le fichier .uf2), puis copier le script sur le lecteur de la carte ou via Thonny. Le script démarre seul s'il s'appelle main.py.
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.