¿Quieres aprender a utilizar la función PWM de tu ESP32 con Arduino IDE para crear salidas analógicas? ¡Has llegado al lugar indicado! En este artículo te explicaremos paso a paso cómo configurar y utilizar esta herramienta para lograr resultados increíbles en tus proyectos. ¡No te lo pierdas!
Aprenda a generar señales PWM con ESP32 y Arduino IDE. Te explicamos dos métodos diferentes: escritura analogica y usando el API LEDC. Como ejemplo, construyamos un circuito simple para atenuar un LED.
Actualizado el 11 de junio de 2024
Antes de continuar con este tutorial, debes tener el complemento ESP32 instalado en tu IDE de Arduino. Siga el siguiente tutorial para instalar ESP32 en el IDE de Arduino si aún no lo ha hecho.
- Instalación de la placa ESP32 en Arduino IDE 2 (Windows, Mac OS X, Linux)
Este tutorial es compatible con el complemento de la placa ESP32 desde la versión 3.X; obtenga más información en nuestra guía de migración.
Tabla de contenido
- Controlador ESP32 PWM
- Atenuar un LED con el ESP32
- Ejemplo de ESP32 PWM con código de escritura analógica
- Ejemplo de ESP32 PWM con el código API LEDC
Piezas requeridas
Para seguir este tutorial necesitarás estas piezas:
- Placa ESP32 DOIT DEVKIT V1 – leer mejores placas de desarrollo ESP32
- 3 LED de 5 mm
- 3 resistencias de 330 ohmios (o valores similares)
- tablero de circuitos
- Cables de puente
Puedes utilizar los enlaces anteriores o ir directamente MakerAdvisor.com/tools ¡Para encontrar todas las piezas para tus proyectos al mejor precio!
Controlador ESP32 LED PWM
El ESP32 cuenta con un controlador LED PWM con 6 a 16 canales independientes (dependiendo del modelo de ESP32), que se puede configurar para generar señales PWM con diferentes características.
Hay varias funciones que puede utilizar para generar señales PWM y lograr los mismos resultados. Puedes usar escritura analogica (como en las placas Arduino) o puedes usar funciones LEDC.
escritura analogica
La función más básica es escritura analogica La herramienta acepta como argumentos el GPIO donde se desea generar la señal PWM y el valor del ciclo de trabajo (que va de 0 a 255).
void analogWrite(uint8_t pin, int value);
Por ejemplo:
void analogWrite(2, 180);
Configuración de la frecuencia y la resolución
Puede ajustar la resolución y la frecuencia de la señal PWM en un pin seleccionado resolución de escritura analógica Y frecuencia de escritura analógica Características.
Cómo configurar la resolución:
void analogWriteResolution(uint8_t pin, uint8_t resolution);
Cómo configurar la frecuencia:
void analogWriteFrequency(uint8_t pin, uint32_t freq);
Funciones LEDC
Alternativamente, puede utilizar la API LEDC Arduino-ESP32. Primero necesitas configurar un pin LEDC. Usted puede hacer eso ledcAgregar o ledcAttachChannel Características.
ledcAgregar
El ledcAgregar La función configura un pin LEDC con una frecuencia y resolución específicas. El canal LEDC se selecciona automáticamente.
bool ledcAttach(uint8_t pin, uint32_t freq, uint8_t resolution);
Esta función devuelve VERDADERO si la configuración es exitosa. Si INCORRECTO se devuelve, se produce un error y el canal LEDC no está configurado.
ledcAttachChannel
Si prefiere configurar el canal LEDC manualmente, puede hacerlo usando el ledcAttachChannel funcionar en su lugar.
bool ledcAttachChannel(uint8_t pin, uint32_t freq, uint8_t resolution, uint8_t channel);
Esta función devuelve VERDADERO si la configuración es exitosa. Si INCORRECTO se devuelve, se produce un error y el canal LEDC no está configurado.
ledcEscribir
Después de configurar el pin LEDC con una de las dos funciones anteriores, use el ledcEscribir Función para ajustar el ciclo de trabajo de la señal PWM.
void ledcWrite(uint8_t pin, uint32_t duty);
Esta función devuelve VERDADERO si la configuración del ciclo de trabajo fue exitosa. Si INCORRECTO se devuelve, se produce un error y no se establece el ciclo de trabajo.
Puede encontrar más información y todas las funciones del controlador LEDC PWM aquí Consulta la documentación oficial..
Atenuar un LED con el ESP32
Para mostrarle cómo generar señales PWM con el ESP32, creemos dos ejemplos simples que atenúan el brillo de un LED (aumentan y disminuyen el brillo con el tiempo). Mostramos un ejemplo con escritura analogica y otro utilizando las funciones LEDC.
Esquema
Conecte un LED a su ESP32 como se muestra en el diagrama de cableado a continuación. El LED debe estar conectado a GPIO 16.
(Este esquema utiliza la versión del módulo ESP32 DEVKIT V1 con 30 GPIO; si está utilizando un modelo diferente, verifique la distribución de pines de la placa que está utilizando).
Nota: Puede utilizar cualquier pin siempre que pueda actuar como salida. Todos los pines que pueden actuar como salidas se pueden utilizar como pines PWM. Para obtener más información sobre los GPIO de ESP32, consulte: Referencia de distribución de pines de ESP32: ¿Qué pines GPIO debería utilizar?
Ejemplo de ESP32 PWM con código de escritura analógica
Abra su IDE de Arduino y copie el siguiente código. En este ejemplo, el brillo del LED aumenta y disminuye con el tiempo. Esta voluntad escritura analogica Función.
/*
Rui Santos & Sara Santos - Random Nerd Tutorials
Complete project details at https://RandomNerdTutorials.com/esp32-pwm-arduino-ide/
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files.
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*/
// the number of the LED pin
const int ledPin = 16; // 16 corresponds to GPIO 16
void setup() {
// set the LED as an output
pinMode(ledPin, OUTPUT);
}
void loop(){
// increase the LED brightness
for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){
// changing the LED brightness with PWM
analogWrite(ledPin, dutyCycle);
delay(15);
}
// decrease the LED brightness
for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){
// changing the LED brightness with PWM
analogWrite(ledPin, dutyCycle);
delay(15);
}
}
Se empieza definiendo el pin al que está conectado el LED. En este ejemplo, el LED está conectado a GPIO 16.
const int ledPin = 16; // 16 corresponds to GPIO 16
En el configuración()necesita configurar el LED como salida mediante modo pin() Función.
pinMode(ledPin, OUTPUT);
En el Cinta()varíe el ciclo de trabajo entre 0 y 255 para aumentar el brillo del LED.
// increase the LED brightness
for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){
// changing the LED brightness with PWM
analogWrite(ledPin, dutyCycle);
delay(15);
}
Tenga en cuenta el uso de la escritura analógica() Función de configuración del ciclo de trabajo. Solo necesita pasar el pin del LED y el ciclo de trabajo como argumentos.
analogWrite(ledPin, dutyCycle);
Finalmente, variamos el ciclo de trabajo entre 255 y 0 para reducir el brillo.
// decrease the LED brightness
for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){
// changing the LED brightness with PWM
analogWrite(ledPin, dutyCycle);
delay(15);
}
Probando el ejemplo
Sube el código a tu ESP32. Asegúrese de haber seleccionado la placa y el puerto COM correctos. Mira tu circuito. Debería tener un LED más tenue que aumente y disminuya su brillo con el tiempo.
Ejemplo de ESP32 PWM con el código API LEDC
Abra su IDE de Arduino y copie el siguiente código. Este ejemplo aumenta y disminuye el brillo del LED con el tiempo utilizando las funciones LEDC ESP32.
/*
Rui Santos & Sara Santos - Random Nerd Tutorials
Complete project details at https://RandomNerdTutorials.com/esp32-pwm-arduino-ide/
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files.
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*/
// the number of the LED pin
const int ledPin = 16; // 16 corresponds to GPIO16
// setting PWM properties
const int freq = 5000;
const int resolution = 8;
void setup(){
// configure LED PWM
ledcAttach(ledPin, freq, resolution);
// if you want to attach a specific channel, use the following instead
//ledcAttachChannel(ledPin, freq, resolution, 0);
}
void loop(){
// increase the LED brightness
for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){
// changing the LED brightness with PWM
ledcWrite(ledPin, dutyCycle);
delay(15);
}
// decrease the LED brightness
for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){
// changing the LED brightness with PWM
ledcWrite(ledPin, dutyCycle);
delay(15);
}
}
Se empieza definiendo el pin al que está conectado el LED. En este ejemplo, el LED está conectado a GPIO 16.
const int ledPin = 16;
Establece las características de PWM: frecuencia y resolución.
// setting PWM properties
const int freq = 5000;
const int resolution = 8;
Como utilizamos una resolución de 8 bits, el ciclo de trabajo se controla con un valor de 0 a 255.
En el configuración()configure el pin LEDC – use el ledcAgregar Funciona de la siguiente manera.
ledcAttach(ledPin, freq, resolution);
Esto configurará el pin LEDC con la frecuencia y resolución previamente definidas en un canal PWM estándar.
Si desea configurar el canal PWM usted mismo, utilice ledcAttachChannel en cambio. El último argumento de esta función es el número del canal PWM.
ledcAttachChannel(ledPin, freq, resolution, 0);
Finalmente en Cinta()aumentar y disminuir el brillo del LED con el tiempo.
Las siguientes líneas aumentan el brillo del LED.
// increase the LED brightness
for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){
// changing the LED brightness with PWM
ledcWrite(ledPin, dutyCycle);
delay(15);
}
Tenga en cuenta el uso de la escritura analógica() Función de configuración del ciclo de trabajo. Solo necesita pasar el pin del LED y el ciclo de trabajo como argumentos.
analogWrite(ledPin, dutyCycle);
Finalmente, variamos el ciclo de trabajo entre 255 y 0 para reducir el brillo.
// decrease the LED brightness
for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){
// changing the LED brightness with PWM
ledcWrite(ledPin, dutyCycle);
delay(15);
}
Probando el ejemplo
Sube el código a tu ESP32. Asegúrese de haber seleccionado la placa y el puerto COM correctos. Mira tu circuito. Debería tener un LED más tenue que aumente y disminuya su brillo con el tiempo, como en el ejemplo anterior.
Envolver
En resumen, en este artículo ha aprendido cómo utilizar el controlador LED PWM del ESP32 con el IDE de Arduino para atenuar un LED. Los conceptos aprendidos se pueden utilizar para controlar otras salidas con PWM configurando las características correctas de la señal.
Tenemos otros recursos de ESP32 que te pueden gustar:
- Comenzando con el módulo de desarrollo ESP32
- Referencia de distribución de pines de ESP32: ¿Qué pines GPIO debería utilizar?
- Entradas y salidas digitales de ESP32 (Arduino IDE)
- ESP32 ADC: lea valores analógicos con Arduino IDE
- ESP32 con sensor de movimiento PIR mediante interrupciones y temporizadores
- Más tutoriales y proyectos de ESP32
Este es un extracto de nuestro curso: Aprendiendo ESP32 con Arduino IDE. Si te gusta ESP32 y quieres aprender más sobre él, te recomendamos apuntarte al curso Aprende ESP32 con Arduino IDE.
Generación de señales PWM con ESP32 utilizando Arduino IDE
Aprende a generar señales PWM con el ESP32 utilizando Arduino IDE. Explicaremos dos métodos diferentes: utilizando analogWrite y utilizando la API LEDC. Como ejemplo, construiremos un circuito simple para atenuar un LED.
Tabla de Contenidos
Controlador PWM del ESP32
El ESP32 tiene un controlador LED PWM con 6 a 16 canales independientes (dependiendo del modelo ESP32) que se pueden configurar para generar señales PWM con diferentes propiedades. Hay diferentes funciones que se pueden utilizar para generar señales PWM y lograr los mismos resultados. Puedes utilizar analogWrite (como en placas Arduino) o puedes utilizar funciones LEDC.
analogWrite
La función más básica es analogWrite, que acepta como argumentos el GPIO donde deseas generar la señal PWM y el valor del ciclo de trabajo (que va de 0 a 255).
Función analogWrite: void analogWrite(uint8_t pin, int value).
Ejemplo: void analogWrite(2, 180).
Puedes configurar la resolución y frecuencia de la señal PWM en un pin seleccionado utilizando las funciones analogWriteResolution y analogWriteFrequency.
- Configurar resolución: void analogWriteResolution(uint8_t pin, uint8_t resolution).
- Configurar frecuencia: void analogWriteFrequency(uint8_t pin, uint32_t freq).
Funciones LEDC
De manera alternativa, puedes utilizar la API LEDC de Arduino-ESP32. Primero, necesitas configurar un pin LEDC. Puedes utilizar las funciones ledcAttach o ledcAttachChannel.
Función ledcAttach: bool ledcAttach(uint8_t pin, uint32_t freq, uint8_t resolution).
Función ledcAttachChannel: bool ledcAttachChannel(uint8_t pin, uint32_t freq, uint8_t resolution, uint8_t channel).
Finalmente, después de configurar el pin LEDC utilizando una de las dos funciones anteriores, utiliza la función ledcWrite para configurar el ciclo de trabajo de la señal PWM.
Función ledcWrite: void ledcWrite(uint8_t pin, uint32_t duty).
Atenuar un LED con el ESP32
Para mostrarte cómo generar señales PWM con el ESP32, crearemos dos ejemplos simples que atenúan el brillo de un LED (aumentan y disminuyen el brillo con el tiempo). Proporcionaremos un ejemplo utilizando analogWrite y otro utilizando las funciones LEDC.
Esquemático:
Conecta un LED a tu ESP32 como se muestra en el siguiente diagrama esquemático. El LED debe estar conectado al GPIO 16.
(Este esquema utiliza el módulo ESP32 DEVKIT V1 con 30 GPIOs. Si estás utilizando otro modelo, verifica el pinout para la placa que estés utilizando).
Ejemplo PWM de ESP32 utilizando analogWrite – Código
Abre tu Arduino IDE y copia el siguiente código. Este ejemplo aumenta y disminuye el brillo del LED con el tiempo utilizando la función analogWrite.
- Definir el pin al que está conectado el LED.
- Configurar el LED como salida en el setup().
- Variar el ciclo de trabajo para aumentar y disminuir el brillo en el loop().
Código disponible en el enlace: https://RandomNerdTutorials.com/esp32-pwm-arduino-ide/.
Ejemplo PWM de ESP32 utilizando la API LEDC – Código
Abre tu Arduino IDE y copia el siguiente código. Este ejemplo aumenta y disminuye el brillo del LED con el tiempo utilizando las funciones LEDC de ESP32.
- Definir el pin al que está conectado el LED.
- Configurar las propiedades PWM (frecuencia y resolución).
- Configurar el pin LEDC en el setup().
- Variar el ciclo de trabajo para aumentar y disminuir el brillo en el loop().
Código disponible en el enlace: https://RandomNerdTutorials.com/esp32-pwm-arduino-ide/.
Conclusión
En resumen, en este artículo has aprendido cómo utilizar el controlador LED PWM del ESP32 con Arduino IDE para atenuar un LED. Los conceptos aprendidos se pueden utilizar para controlar otras salidas con PWM configurando las propiedades correctas de la señal.
Para más información y recursos sobre el ESP32, te recomendamos visitar el enlace: https://RandomNerdTutorials.com/esp32-resources.
Me encantó este artículo, muy útil para aprender a utilizar la función PWM con Arduino IDE en el ESP32. ¡Gracias por compartir!
¡Excelente explicación de cómo utilizar la función PWM con el ESP32 en Arduino IDE! Me resultó muy fácil de seguir y ahora puedo utilizar salidas analógicas sin problemas. ¡Gracias por el aporte!