neopixel.py

micro:bit V2 (BBC micro:bit v2) · Fichier : neopixel.py · Langage : MicroPython · Usage : Animer un ruban NeoPixel depuis la micro:bit

Le module neopixel intégré pilote un ruban WS2812B sur pin16 : ici une rampe arc-en-ciel qui tourne, arrêtée par le bouton A. Chaque LED reçoit un tuple (R, V, B) et write() envoie la trame complète d'impulsions.

Matériel requis

Une BBC micro:bit V2 (nRF52833, matrice 5×5 LED, boutons A/B, accéléromètre + boussole, microphone et haut-parleur) alimentée par USB ou pile. 1 ruban ou anneau 12 NeoPixel WS2812B ; alimentation 5 V externe pour plus de 8 LED.

Câblage

Data (DIN) sur pin16 via résistance 330 Ω, VCC sur 5 V externe, GND relié à la micro:bit.

Fonctionnement

NeoPixel(pin16, NB) réserve la mémoire tampon ; ruban[i] = (r, g, b) la remplit ; write() produit le protocole WS2812 en une salve. Le modulo décale la rampe à chaque tour.

Exécution

Ouvrez python.microbit.org, collez le programme MicroPython et envoyez-le vers la carte (la micro:bit apparaît comme lecteur MICROBIT). Appuyez sur reset pour relancer.

Variantes

Affichez le niveau de lumière (read_light_level) en couleur de fond, ou faites défiler la couleur sur le ruban avec le geste shake.

neopixel.py

# Ruban NeoPixel/WS2812 sur pin16 avec le module neopixel integre.
import neopixel
from microbit import *

NB = 12
ruban = neopixel.NeoPixel(pin16, NB)

def arc_en_ciel(decalage):
    for i in range(NB):
        # Rampe rouge-vert-bleu deplacee par le decalage.
        p = (i * 3 + decalage) % 256
        if p < 85:
            ruban[i] = (255 - p * 3, p * 3, 0)
        elif p < 170:
            q = p - 85
            ruban[i] = (0, 255 - q * 3, q * 3)
        else:
            q = p - 170
            ruban[i] = (q * 3, 0, 255 - q * 3)

tete = 0
while True:
    arc_en_ciel(tete)
    ruban.write()
    tete = (tete + 8) % 256
    if button_a.was_pressed():
        for i in range(NB):
            ruban[i] = (0, 0, 0)
        ruban.write()
        display.show(Image.NO)
    sleep(60)

# 12 LED a pleine intensite > 700 mA : alimenter par source separee.

← Retour à la fiche