respiration.ino

ESP32-S3 · Fichier : respiration.ino · Langage : Arduino · Usage : Effet respiration sur LED avec le PWM LEDC

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-S3 (double cœur Xtensa avec instructions vectorielles, Wi-Fi + BLE 5, USB natif) type DevKitC-1, XIAO ou T-Display-S3, alimentée par USB. 1 LED + résistance 330 Ω (ou LED RGB commune + anode sur la broche).

Branchement

LED sur 48 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 (paquet esp32), choisissez « ESP32S3 Dev Module », activez « USB CDC On Boot », puis Téléverser. Beaucoup de cartes placent un WS2812 sur GPIO48.

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 = 48;
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
}

← Retour à la fiche