neoled-rgb.ino
La Nano ESP32 intègre une LED RGB WS2812 sur la broche 48 : ce arc-en-ciel la fait respirer sans composant externe. Les néopixels exigent une trame de timing stricte à 800 kHz, générée ici par le périphérique RMT de l'ESP32.
Matériel requis
Un Arduino Nano ESP32 (ESP32-S3 double cœur, Wi-Fi 2,4 GHz + Bluetooth Low Energy, brochage physique compatible Nano, USB natif, broches 3,3 V uniquement). Nano ESP32 seule — la LED est embarquée ; pour une bande externe, broche libre + alim dédiée.
Câblage
Rien pour la LED intégrée. Bande WS2812 externe : DATA→broche GPIO, commun→GND, VCC alimenté séparément si > 20 LED.
Fonctionnement
Adafruit_NeoPixel compose la trame GRB et show() la balance via le périphérique RMT (timing matériel). La roue chromatique avance de 1/768 e à chaque tour de boucle.
Exécution
Installez le package Arduino ESP32 Boards (ou le guide Nano ESP32 officiel), sélectionnez Arduino Nano ESP32, téléversez. Les broches sont en 3,3 V : n'envoyez jamais 5 V sur une entrée. Le moniteur série utilise l'USB natif.
Variantes
Utilisez la classe neopixel du core esp32 (neopixelWrite) pour un one-liner, ou pilotez un ruban pour un indicateur de niveau sonore.
neoled-rgb.ino
// La Nano ESP32 embarque une LED RGB adressable (WS2812, broche 48).
// Pilotee ici sans library lourde, via le driver RMT du coeur esp32.
#include <Adafruit_NeoPixel.h> // ou le driver neopixelClass du core
Adafruit_NeoPixel rgb(1, 48, NEO_GRB + NEO_KHZ800);
unsigned long dernier = 0;
int phase = 0;
void setup() {
Serial.begin(115200);
rgb.begin();
rgb.setBrightness(40); // attention : une WS2812 a fond tire ~50 mA
}
void loop() {
if (millis() - dernier < 30) return;
dernier = millis();
phase = (phase + 1) % 768;
// roue chromatique en trois tiers de 256 pas
uint8_t r = 0, v = 0, b = 0;
if (phase < 256) { r = 255 - phase; v = phase; }
else if (phase < 512) { v = 511 - phase; b = phase - 255; }
else { b = 767 - phase; r = phase - 511; }
rgb.setPixelColor(0, rgb.Color(r, v, b));
rgb.show(); // impulsion RMT : trame 800 kHz
}