neopixel_arcenciel.py
Le voyant d’ambiance universel : une roue des couleurs calculée par phase (aucune table) balaie rouge-vert-bleu sur le NeoPixel embarqué. Base visuelle de tout projet — l’heure, la température ou l’état réseau deviennent une couleur.
Matériel requis
Une Adafruit Feather nRF52840 Express (SoC nRF52840 Cortex-M4F, BLE 5 / 802.15.4) avec NeoPixel embarqué, LED rouge, 2 Mo de flash QSPI pour le système de fichiers CircuitPython et connecteur batterie LiPo. La Feather seule. Pour un ruban : passer le nombre de pixels à N et câbler DATA sur une broche alimentée en 5 V avec masse commune.
Câblage
Aucun pour le pixel embarqué. Ruban externe : DATA→D5 via résistance 330 Ω, VCC sur VOUT (USB), GND commun, condensateur 1000 µF sur l’alimentation du ruban.
Fonctionnement
La fonction couleur découpe la phase 0-1 en trois segments et interpole les canaux RVB ; la boucle avance la phase de 0,01 toutes les 30 ms, soit un cycle complet de ~3 secondes.
Exécution
CircuitPython (build feather_nrf52840_express) installé via le bootloader UF2 (double reset) ; éditer code.py sur le lecteur CIRCUITPY, console dans Mu/Thonny.
Variantes
Mapper une grandeur (température → bleu-rouge), animer N pixels en décalé pour un chaland, ou synchroniser la couleur avec une notification BLE.
neopixel_arcenciel.py
# Arc-en-ciel tournant sur le NeoPixel embarqué.
# Roue des couleurs : (r, v, b) calculée par phase, sans table.
import time
import board
import neopixel
pixel = neopixel.NeoPixel(board.NEOPIXEL, 1, brightness=0.3)
def couleur(phase):
# phase 0.0 -> 1.0 : rouge -> vert -> bleu -> rouge
p = phase % 1.0
if p < 1/3:
return (int(765 * p * 3), int(765 * (1 - p * 3)), 0)
if p < 2/3:
q = (p - 1/3) * 3
return (0, int(765 * (1 - q)), int(765 * q))
r = (p - 2/3) * 3
return (int(765 * r), 0, int(765 * (1 - r)))
phase = 0.0
while True:
phase += 0.01
# neopixel attend 0-255 par canal : on divise 0-765 par 3
r, v, b = couleur(phase)
pixel[0] = (r // 3, v // 3, b // 3)
time.sleep(0.03)