respiration.ino
Le PWM matériel (LEDC) génère la porteuse tout seul : analogWrite applique un rapport cyclique 0-255 et la LED respire sans consommer de temps CPU. La fréquence choisie évite le sifflement des pilotes PWM.
Matériel requis
Une carte ESP32 classique (module ESP32-WROOM-32, double cœur Xtensa 240 MHz, Wi-Fi + Bluetooth) type DevKitC / DOIT V1, alimentée par micro-USB. 1 LED + résistance 330 Ω (ou LED RGB commune + anode sur la broche).
Branchement
LED sur 2 via 330 Ω vers GND. Sur les broches aussi reliées au flash, préférez un autre GPIO.
Fonctionnement
analogWrite/analogWriteFrequency configurent un canal LEDC ; la boucle ne fait que monter et redescendre le rapport cyclique entre 0 et 255, le signal est généré par le périphérique. Dans l'Arduino IDE, installez le paquet « esp32 » (Gestionnaire de cartes), choisissez « Dev Module », le port, puis Téléverser (maintenez BOOT si la détection échoue). GPIO34-39 sont entrées seules ; évitez GPIO6-11 et GPIO12.
Pour aller plus loin
Trois canaux LEDC déphasés pour une LED RGB, ou sortie vers un petit MOSFET pour piloter une bandeau de puissance.
respiration.ino
// Respiration LED par le contrôleur LEDC (PWM matériel du SoC).
const int LED = 2;
const int FREQ = 5000; // 5 kHz : inaudible, pas de sifflement
const int RESOLUTION = 8; // 256 niveaux
int niveau = 0;
int sens = 4; // pas par étape
void setup() {
analogWriteResolution(RESOLUTION);
analogWriteFrequency(FREQ);
analogWrite(LED, 0);
}
void loop() {
niveau += sens;
if (niveau >= 255 || niveau <= 0) sens = -sens;
analogWrite(LED, niveau);
delay(8); // 255/4*8 ms ≈ 0,5 s par rampe
}