neopixel.py

RP2350 (générique / cartes basées sur le RP2350) · 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 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.

← Retour à la fiche