neopixel.py

Raspberry Pi Pico 2 · 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 Raspberry Pi Pico 2 (RP2350 double Cortex-M33 @ 150 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 le MicroPython « Pico 2 » (maintenir BOOTSEL, brancher l'USB, déposer le .uf2), puis copier le script via Thonny. Démarrage automatique avec le nom 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.

← Retour à la fiche