Medición de las capacidades del ESP32 con el sensor de temperatura incorporado
Medición de las capacidades del ESP32 con el sensor de temperatura interno. Características de seguridad, depuración y pruebas de las capacidades del ESP32 sin sobrecalentamiento.
El microcontrolador ESP32 ha surgido como una plataforma poderosa y versátil para una amplia gama de proyectos. Entre sus muchas características integradas, el sensor de temperatura incorporado es un activo valioso. Este sensor permite medir la temperatura sin necesidad de componentes externos, simplificando la monitorización de la temperatura del chip.
En esta publicación del blog, exploraremos el sensor de temperatura incorporado del ESP32 y sus aplicaciones. Comenzaremos identificando las placas ESP32 que vienen equipadas con esta característica, para que puedas tomar una decisión más fácil al seleccionar la placa ESP32 para tu proyecto.
Además, profundizaremos en las aplicaciones del mundo real del sensor de temperatura incorporado del ESP32 junto con ejemplos de código para tu marco de trabajo preferido ESP-IDF o Arduino.
Placas ESP32 con Sensor de Temperatura Incorporado #
Las placas ESP32 vienen en una variedad de configuraciones, cada una adaptada para satisfacer los requisitos específicos del proyecto. Sin embargo, no todas las placas ESP32 están equipadas con los mismos periféricos, por lo tanto, es esencial elegir un modelo de placa ESP32 que ofrezca las características y sensores ESP32 necesarios para tu proyecto, incluido el sensor de temperatura incorporado.
Según la documentación de ESP-IDF, los objetivos compatibles con los controladores de sensores de temperatura son:
- ESP32-C2
- ESP32-C3
- ESP32-C6
- ESP32-H2
- ESP32-S2
- ESP32-S3
Al observar la lista, podemos ver que todas las versiones más nuevas de ESP32 tienen sensores de temperatura integrados. Sin embargo, si tienes uno de los modelos más antiguos, como el ESP32 original, ESP32-WROOM o la serie de chips ESP32-WROVER, no podrás aprovechar el sensor de temperatura incorporado, ya que estos modelos no tienen el sensor de temperatura integrado.
Nota que, aunque la documentación oficial de ESP-IDF no dice explícitamente que el ESP32-WROVER tiene el sensor de temperatura incorporado, algunos modelos antiguos podrían tenerlo, mientras que las versiones más nuevas del ESP32-WROVER lo han deprecado.
Si no estás seguro de qué chip está basado tu placa de desarrollo, revisa el texto en tu chip ESP32. En caso de que tengas una placa con USB-C, revisa las placas de desarrollo ESP32 con tipo USB-C.
Entendiendo el Sensor de Temperatura Incorporado del ESP32 #
El sensor de temperatura incorporado en el ESP32 es un sensor digital que opera basado en el principio de voltaje dependiente de la temperatura, es uno de los sensores ESP32 incorporados en el chip. Mide el voltaje generado a través de una unión formada por dos materiales diferentes con coeficientes de temperatura conocidos. Al medir con precisión este voltaje, el sensor puede determinar la temperatura ambiente.
Es importante recordar que el sensor está diseñado principalmente para medir la temperatura interna del chip y no la temperatura ambiente.
Especificaciones Técnicas y Características:
- El módulo de sensor de temperatura utiliza un ADC de 8 bits y un DAC para realizar ajustes en el desplazamiento de la temperatura.
- Rango de Medición: El sensor de temperatura del ESP32 puede medir un rango de temperaturas de -40 a 125 grados Celsius.
- Precisión: La precisión del sensor de temperatura incorporado varía entre +/- 1 a +/- 3 grados Celsius, dependiendo del rango preferido seleccionado (siendo el más preciso de -10 a 80 grados Celsius).
- Resolución: El sensor ofrece mediciones de temperatura de alta resolución, lo que le permite
Manejo de la Conversión de Temperatura:
El sensor proporciona datos de temperatura en forma de un valor bruto del convertidor analógico a digital (ADC). Para obtener la temperatura en grados Celsius, este valor bruto debe someterse a un proceso de conversión utilizando datos de calibración y cálculos matemáticos. Afortunadamente, esta conversión es manejada por el hardware del ESP32, lo que simplifica la implementación del software.
Es importante notar que la precisión y el rendimiento del sensor de temperatura pueden verse afectados por factores como las fluctuaciones de voltaje, el ruido y las fuentes de calor cercanas. Como con cualquier sensor, es esencial considerar estos factores ambientales durante el diseño e implementación del proyecto.
Aplicaciones Prácticas del Sensor de Temperatura Integrado del ESP32 #
Como se mencionó anteriormente, el sensor de temperatura del ESP32 está diseñado para medir la temperatura dentro del chip ESP32 y no la temperatura ambiente.
La temperatura interna del chip puede proporcionar información valiosa sobre el rendimiento del ESP32, la carga de la CPU y la frecuencia del reloj, ya que la temperatura aumentará naturalmente con la mayor potencia de procesamiento requerida.
Aquí hay algunas aplicaciones prácticas clave del sensor de temperatura del ESP32:
- Comprobación del rendimiento del chip: Al monitorear la temperatura interna del chip, puedes evaluar el rendimiento del ESP32 en diversas condiciones. Al verificar las diferencias de temperatura del chip ESP32, puedes identificar cuellos de botella, asegurando que el microcontrolador opere dentro de los límites de temperatura seguros, lo cual es esencial para optimizar el código para el rendimiento.
- Protección de dispositivos electrónicos: En los dispositivos electrónicos, la gestión de la temperatura es crucial para asegurar su longevidad y rendimiento. El sensor de temperatura incorporado del ESP32 se puede emplear para monitorear la temperatura de operación de los componentes y sistemas electrónicos. Al establecer umbrales de temperatura, el sistema puede activar mecanismos de enfriamiento o protocolos de seguridad para evitar el sobrecalentamiento y proteger la electrónica sensible de daños.
- Monitoreo y conservación de energía: La temperatura juega un papel significativo en el consumo de energía. Al utilizar el sensor de temperatura en proyectos de monitoreo de energía, los usuarios pueden obtener información sobre cómo la temperatura afecta el uso de energía. Este conocimiento se puede aprovechar para optimizar el consumo de energía y promover prácticas sostenibles.
Aunque a primera vista, la temperatura interna del chip puede no parecer una estadística muy útil de conocer, puede ayudar a asegurar la fiabilidad del dispositivo, optimizar la eficiencia energética o ajustar el rendimiento.
Uso del Sensor de Temperatura Interno del ESP32 con Arduino IDE #
El Arduino IDE (Entorno de Desarrollo Integrado) es una opción popular para programar y prototipar proyectos ESP32 debido a su interfaz fácil de usar y su amplio soporte de bibliotecas. Integrar el sensor de temperatura incorporado del ESP32 en tus proyectos Arduino es sencillo con la ayuda de bibliotecas disponibles. A continuación, puedes encontrar los pasos para configurar tu Arduino IDE y leer datos de temperatura del sensor incorporado del ESP32.
El controlador del sensor de temperatura interno, que se utilizaba para los primeros modelos de ESP32, fue deprecado en el Core de Arduino para los modelos más nuevos de ESP32, aunque estos sí tienen el sensor. Aún podemos usar el sensor de temperatura en modelos más nuevos utilizando el controlador heredado del sensor de temperatura ESP32 y configurando el sensor manualmente como se muestra a continuación.
#include "driver/temp_sensor.h"
void initTempSensor(){
temp_sensor_config_t temp_sensor = TSENS_CONFIG_DEFAULT();
temp_sensor.dac_offset = TSENS_DAC_L2; // TSENS_DAC_L2 is default; L4(-40°C ~ 20°C), L2(-10°C ~ 80°C), L1(20°C ~ 100°C), L0(50°C ~ 125°C)
temp_sensor_set_config(temp_sensor);
temp_sensor_start();
}
void setup() {
Serial.begin(115200);
initTempSensor();
}
void loop() {
Serial.print("Temperature: ");
float result = 0;
temp_sensor_read_celsius(&result);
Serial.print(result);
Serial.println(" °C");
delay(5000);
}
¡Eso es todo! Hemos configurado con éxito el sensor de temperatura incorporado del ESP32 con el Arduino IDE. El monitor serial ahora debería mostrar la temperatura ambiente en grados Celsius, actualizándose cada cinco segundos.
Uso del Sensor de Temperatura Interno del ESP32 con el Marco de Trabajo ESP-IDF #
El ESP-IDF (Espressif IoT Development Framework) es el marco de trabajo de desarrollo oficial para el microcontrolador ESP32. Ofrece un enfoque más detallado y flexible para programar el ESP32, lo que permite a los desarrolladores aprovechar al máximo sus características, incluido el sensor de temperatura incorporado. Si prefieres usar el marco de trabajo ESP-IDF, a continuación puedes encontrar los pasos para configurar el entorno ESP-IDF y leer los datos de temperatura del sensor incorporado del ESP32.
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_log.h"
#include "driver/temperature_sensor.h"
static const char *LOG_TAG = "ESP32";
void app_main(void)
{
ESP_LOGI(LOG_TAG, "Setup the internal temperature sensor, set min/max values to -10 ~ 80 °C");
temperature_sensor_handle_t temp_handle = NULL;
temperature_sensor_config_t temp_sensor = {
.range_min = -10,
.range_max = 80,
};
ESP_ERROR_CHECK(temperature_sensor_install(&temp_sensor, &temp_handle));
ESP_ERROR_CHECK(temperature_sensor_enable(temp_sensor));
float tsens_out;
ESP_LOGI(LOG_TAG, "Get converted data from internal temperature sensor");
ESP_ERROR_CHECK(temperature_sensor_get_celsius(temp_handle, &tsens_out));
ESP_LOGI(LOG_TAG, "Temperature value %.02f °C", tsens_value);
ESP_LOGI(LOG_TAG, "Disabling internal temperature sensor to save power");
ESP_ERROR_CHECK(temperature_sensor_disable(temp_handle));
}
Con el marco de trabajo ESP-IDF, tienes más control sobre el hardware del ESP32 y puedes optimizar su rendimiento para aplicaciones específicas. Con este ejemplo de código, puedes utilizar fácilmente el sensor de temperatura incorporado del ESP32 en tus proyectos ESP-IDF.
Pruebas del Sensor de Temperatura Interno #
Como se mencionó anteriormente, deberíamos ver que la temperatura interna cambia con diferentes cargas de CPU del ESP32, la frecuencia del reloj de la CPU o la temperatura del entorno. Debido a que nuestro programa es muy simple, la carga de la CPU no cambiará mucho cuando el ESP32 esté funcionando. Podríamos probar el sensor de temperatura, asumiendo que la temperatura del entorno cambiará, pero necesitaríamos estimular el cambio de temperatura, lo que requeriría herramientas adicionales. Por lo tanto, la prueba más fácil en nuestro caso será cambiar la frecuencia del reloj.
Antes de comenzar, necesitarás:
- Placa ESP32, que tenga el sensor de temperatura interno (Estamos usando el DFRobot Beetle ESP32-C3 para este ejemplo).
- Arduino IDE con placas ESP32 listas para usar
- Para esta prueba, usaremos el ejemplo de Arduino Core proporcionado arriba.
Paso 1: Copia el código de ejemplo en tu Arduino IDE Ve al ejemplo de Arduino Core arriba y cópialo en tu Arduino IDE.
Paso 2: Selecciona la placa ESP32 En Arduino IDE, selecciona "Tools->Board->ESP32 Arduino->{Tu Placa ESP32}" para seleccionar la placa ESP32 que estás usando.
Estamos usando el DFRobot Beetle ESP32-C3 para este ejemplo.
*Si no puedes encontrar el menú "ESP32 Arduino" en Arduino IDE, asegúrate de haber instalado el soporte para Arduino-ESP32.
Paso 3: Selecciona la Frecuencia de la CPU En Arduino IDE, selecciona "Tools->CPU Frequency->{Frecuencia Máxima de CPU Disponible}".
En nuestro caso, ya que estamos usando el DFRobot Beetle ESP32-C3, la opción máxima disponible es "160 MHz (WiFi)".
Paso 4: Sube el código En Arduino IDE, haz clic en "Sketch->Upload", o el atajo en la esquina superior izquierda para subir el código.
Paso 5: Abre el Monitor Serial Después de subir exitosamente el código a tu placa ESP32, abre el Monitor Serial dentro de Arduino IDE. Espera un tiempo y deberías empezar a ver los registros impresos en el Monitor Serial, mostrando la temperatura interna del chip ESP32. Si todo está bien, deberías ver temperaturas más o menos estables en cada nueva línea. Esto probablemente esté bien y sea la temperatura de funcionamiento normal del ESP32.
Paso 6: Reduce la Frecuencia de la CPU Siguiendo los mismos pasos que en el "Paso 3", reduce la frecuencia de la CPU del ESP32 a la opción más baja disponible. En nuestro caso, es "10 MHz".
Paso 7: Sube el código Siguiendo los mismos pasos que en el "Paso 4", sube el código a tu placa ESP32.
Paso 8: Verifica el Monitor Serial Si no cerraste el Monitor Serial, poco después de subir el código, deberías comenzar a ver los registros impresos nuevamente. Esta es ahora la temperatura interna del chip ESP32 con la frecuencia de la CPU del ESP32 reducida.
Resultados de la prueba
Como puedes ver en las capturas de pantalla arriba, en el Paso 5 con el DFRobot Beetle ESP32-C3 funcionando a una frecuencia máxima de CPU de 240 MHz, la temperatura de trabajo es de alrededor de 31.10 °C. Después de reducir la frecuencia de la CPU del ESP32 a la opción más baja de 10 MHz, vemos que la temperatura de trabajo es de alrededor de 28.47 °C. Eso es una diferencia de alrededor de 2.63 °C. Como se esperaba, la temperatura de trabajo interna del ESP32 bajó al funcionar a una frecuencia de CPU más baja, lo que confirma que el sensor de temperatura interno del ESP32 está funcionando correctamente.
Solución de Problemas #
¿Por qué la temperatura mostrada siempre es la misma?
Como el sensor de temperatura incorporado mide la temperatura interna del chip, si la carga y la velocidad de la CPU no están cambiando, la temperatura se mantendrá igual. La temperatura de trabajo depende del modelo del chip utilizado, pero normalmente debería estar alrededor de los 53 grados Celsius.
El sensor de temperatura no está presente. A veces, el ESP-IDF y Arduino Core no detectan que el sensor de temperatura no está presente en el chip y se compilan sin errores. Sin embargo, si la temperatura se mantiene igual sin importar la frecuencia o la carga de la CPU, probablemente el chip no tenga un sensor de temperatura.
- ¿Por qué obtengo el error "128, function not present" durante la compilación?
- Si ESP-IDF o Arduino Core detecta que el sensor de temperatura no está presente en tu chip ESP32 seleccionado, mostrará este error durante la compilación. Utiliza otra placa ESP32 o selecciona el modelo de placa apropiado antes de compilar el programa. Revisa las Placas ESP32 con Sensor de Temperatura Incorporado.
- Estoy obteniendo un error
fatal error: driver/temp_sensor.h: No such file or directory
.- La placa no tiene el sensor de temperatura interno, por lo tanto, el controlador para él (driver/temp_sensor.h) no está proporcionado para la placa seleccionada. Selecciona otra placa en "Tools->Board".
internal_temp_arduino:1:10: fatal error: driver/temp_sensor.h: No such file or directory
#include "driver/temp_sensor.h"
^~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
exit status 1
driver/temp_sensor.h: No such file or directory
Conclusión: #
En conclusión, el sensor de temperatura interno del ESP32 proporciona una forma conveniente y confiable de medir la temperatura del chip. Monitorear la temperatura interna del chip puede ser útil para propósitos de seguridad, depuración del código, medir las capacidades del chip y más. Ya sea usando Arduino Core o ESP-IDF, acceder y utilizar el sensor de temperatura interno es sencillo.
Con un monitoreo constante de la temperatura, el ESP32 puede implementar estrategias de gestión térmica para evitar el sobrecalentamiento, asegurando la seguridad y longevidad del dispositivo. Además, los desarrolladores obtienen información valiosa sobre el comportamiento del chip en diferentes condiciones, optimizando el código y mejorando el rendimiento general.