neopixel.py

RP2040 (carte / puce générique) · Fichier : neopixel.py · Langage : Python · Usage : Animation de type « tête qui avance » sur ruban NeoPixel

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 RP2040 (double Cortex-M0+) 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 MicroPython via BOOTSEL (fichier .uf2), puis copier le script sur le lecteur de la carte. Vérifier la broche de la LED utilisateur de votre carte (souvent GP25) et l'adapter si besoin.

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.

← Retour à la fiche