respiration.ino
El PWM hardware (LEDC) genera la portadora solo: analogWrite aplica un ciclo de trabajo 0-255 y el LED respira sin gastar CPU. La frecuencia elegida evita el silbido del driver PWM.
Hardware necesario
Una placa ESP32-C3 (RISC-V a 160 MHz, Wi-Fi + BLE 5) tipo DevKitM-1 o SuperMini, alimentada por USB (nativo en el C3). 1 LED + resistencia de 330 Ω (o LED RGB común + ánodo en el pin).
Cableado
LED en 8 por 330 Ω a GND. En pines también ligados a la flash, elija otro GPIO.
Funcionamiento
analogWrite/analogWriteFrequency configuran un canal LEDC; el bucle solo sube y baja el ciclo de trabajo 0-255 mientras el periférico genera la señal. En el Arduino IDE (paquete esp32), elija « ESP32C3 Dev Module », active « USB CDC On Boot » si hace falta y suba. GPIO9 suele ser el botón BOOT; deje GPIO8 libre en el arranque.
Para ir más lejos
Tres canales LEDC desfasados para un LED RGB, o un MOSFET pequeño para pilotar una tira de potencia.
respiration.ino
// Respiration LED par le contrôleur LEDC (PWM matériel du SoC).
const int LED = 8;
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
}