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-C6 (RISC-V 160 MHz, Wi-Fi 6 + BLE 5 + 802.15.4) type DevKitC-1, alimentée par USB. 1 LED + résistance 330 Ω (ou LED RGB commune + anode sur la broche).
Branchement
LED sur 7 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 récent), choisissez « ESP32C6 Dev Module » puis Téléverser ; pour Zigbee/Thread utilisez ESP-IDF (idf.py set-target esp32c6).
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 = 7;
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
}