🛠 Bandeau NeoPixel piloté par le périphérique RMT
Objectifs
Passer du pixel unique au bandeau d'adressables en comprenant la couche matérielle : sur ESP32-S3, la bibliothèque Adafruit NeoPixel génère les trames WS2812 (800 kHz) avec le périphérique RMT (Remote Control), un générateur d'impulsions piloté par DMA. Vous écrirez un animographe « balayage » sur 8 pixels, vous dimensionnerez l'alimentation (un WS2812 blanc pur tire jusqu'à 60 mA) et vous éviterez les corruption de trame liées aux interruptions Wi-Fi.
Matériel
- 1 carte ESP32-S3 (GPIO48 libre de tout pixel embarqué, ou bandeau externe)
- 1 bandeau 8 pixels WS2812B (5 V)
- 1 résistance de 330 à 470 ohms pour la ligne DATA
- Alimentation 5 V dédiée ou port USB capable de fournir 500 mA
- Fils : DATA -> GPIO48 via résistance, VCC -> 5 V, GND -> GND commun
Code complet
// Bandeau 8x WS2812 sur GPIO48, trames generees par le peripherique RMT
#include <Adafruit_NeoPixel.h>
#define PIN 48
#define N 8
Adafruit_NeoPixel strip(N, PIN, NEO_GRB + NEO_KHZ800);
uint32_t couleur(uint8_t r, uint8_t g, uint8_t b) {
return strip.Color(r, g, b);
}
void setup {
strip.begin;
strip.setBrightness(60);
strip.show; // eteint tout au démarrage
}
void loop {
static uint8_t pos = 0;
static int8_t dir = 1;
strip.clear;
strip.setPixelColor(pos, couleur(255, 80, 0)); // tete
if (pos > 0) strip.setPixelColor(pos - 1, couleur(90, 30, 0));
if (pos < N - 1) strip.setPixelColor(pos + 1, couleur(90, 30, 0));
strip.show;
if (pos == 0) dir = 1; else if (pos == N - 1) dir = -1;
pos += dir;
delay(60);
}
Vérification attendue
Un point orange balaie le bandeau en aller-retour avec une traîne atténuée. Les 8 pixels répondent de façon homogène, sans pixel vert fou. En ouvrant le moniteur série, on peut afficher ESP.getFreeHeap pour vérifier que la RAM interne (512 Ko) reste confortable : la bibliothèque alloue une copie du tampon pixel et configure un canal RMT.
Erreurs fréquentes
- Alimentation insuffisante : alimenter 8 pixels en blanc fort via la seule broche 3,3 V de la carte fait plonger la tension et déclenche des reset ; utiliser le 5 V du bandeau et une masse commune.
- Oublier la résistance de série sur DATA : souvent « ça marche », mais les trames sont sensibles aux parasites en nappe longue ; la résistance 330-470 ohm est une assurance bon marché.
- Inverser DATA et le signal de sortie du bandeau : le connecteur d'entrée porte la flèche DATA IN, pas DATA OUT.
- Corruptions avec Wi-Fi actif : les interruptions radio peuvent décaler les impulsions RMT ; la bibliothèque utilise le DMA, mais en cas de flicker, baisser la luminosité et éviter les allocations en boucle.
- Mauvais ordre des couleurs : NEO_GRB est le câblage standard des WS2812B ; un bandeau SK6812 RGBW exige NEO_GRB + NEO_KHZ800 avec gestion W.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.inoArduinobouton-led.inoArduinorespiration.inoArduinodht22.inoArduinooled-i2c.inoArduinoserveur-web.inoArduino