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-S3 (doble núcleo Xtensa con instrucciones vectoriales, Wi-Fi + BLE 5, USB nativo) tipo DevKitC-1, XIAO o T-Display-S3, alimentada por USB. 1 LED + resistencia de 330 Ω (o LED RGB común + ánodo en el pin).
Cableado
LED en 48 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 « ESP32S3 Dev Module », active « USB CDC On Boot » y suba. Muchas placas ponen un WS2812 en GPIO48.
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 = 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
}