🛠 Fondu de LED avec le PWM LEDC
Objetivos
Controlar el brillo de un LED mediante el periférico LEDC del ESP32: la modulación PWM se genera mediante 8 canales independientes (frecuencia y resolución configurables), a diferencia de un simple digitalWrite. Aprenderás a configurar un canal, asignarlo a un pin y realizar un fundido (fade) ascendente y descendente.
Material
- 1 placa ESP32 DevKit v1
- 1 LED + 1 resistencia de 330 Ω
- Cables jumper (GPIO25 → resistencia → LED → GND)
Código completo
const uint8_t LED_PIN = 25; // eviter GPIO2, broche de strapping
const uint8_t CANAL = 0; // 0 a 7 sur ESP32
void setup {
ledcSetup(CANAL, 5000, 8); // 5 kHz, resolution 8 bits (0..255)
ledcAttachPin(LED_PIN, CANAL);
}
void loop {
for (int v = 0; v <= 255; v++) { ledcWrite(CANAL, v); delay(8); }
for (int v = 255; v >= 0; v--) { ledcWrite(CANAL, v); delay(8); }
}
Verificación esperada
El LED se enciende y se apaga progresivamente (fundido suave de aproximadamente 2 segundos por ciclo), sin escalones visibles. Con un osciloscopio en GPIO25, se observa una señal rectangular de 5 kHz cuyo ciclo de trabajo sigue la rampa.
Errores frecuentes
- analogWrite no existe en el core Arduino-ESP32 2.x: es necesario utilizar ledcSetup/ledcAttachPin/ledcWrite.
- LED conectado al GPIO2: es un pin de strapping (junto con GPIO0 y GPIO12); una carga conectada a él puede interferir con el arranque. Prefiera GPIO25, 26, 27…
- Olvidar la resistencia: el LED se quema o el pin entrega demasiada corriente.
- Cada canal LEDC es un recurso de hardware limitado a 8 en el ESP32: planifique sus canales PWM con antelación.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
clignotante.inoArduinobouton-led.inoArduinorespiration.inoArduinodht22.inoArduinooled-i2c.inoArduinoserveur-web.inoArduino