Em muitos projetos e produtos, é necessário conhecer a temperatura interna do sistema (microcontrolador, caixa/case e etc). O monitoramento da temperatura interna, principalmente para superaquecimento, pode ajudar a evitar degradação e desgaste prematuro do sistema.
O ESP32-S2 contém um sensor de temperatura interno com uma boa faixa de medição e pequeno erro, sendo útil a praticamente qualquer projeto/produto que você faça, já que não há nenhuma adição extra de hardware, sendo puramente software.
Este sensor pode ser monitorado tanto pela CPU principal, quanto pelo ULP (FSM ou RISC-V), contando com um parâmetro de configuração (offset) que altera sua faixa de medição e, consequentemente, sua precisão.
| Offset | Faixa de medição (℃) | Erro na medição (℃) |
| -2 | 50 ~ 125 | < 3 |
| -1 | 20 ~ 100 | < 2 |
| 0 | -10 ~ 80 | < 1 |
| 1 | -30 ~ 50 | < 2 |
| 2 | -40 ~ 20 | < 3 |
Em contrapartida, o ESP32 “convencional” (primeiro modelo), foi lançado com sensor de temperatura interno mas foi descontinuado após um tempo devido a grandes problemas de instabilidade e imprecisão na medição.
Lendo o sensor de temperatura interno – ESP32-S2
O código para leitura do sensor é bem simples e foi feito na ESP-IDF (release/v4.3), porém, com alguns ajustes, pode ser possível executá-lo na Arduino IDE:
#include <stdio.h>
#include "sdkconfig.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "esp_log.h"
#include "driver/temp_sensor.h"
void app_main(void)
{
temp_sensor_config_t cfg = TSENS_CONFIG_DEFAULT();
cfg.dac_offset = TSENS_DAC_L2; //Offset=0 (-10℃ ~ 80℃)
temp_sensor_set_config(cfg); //Configura o sensor com os parametros
temp_sensor_start(); //Inicia o sensor
while (1)
{
float temp = 0;
temp_sensor_read_celsius(&temp); //Le o sensor de temperatura e retorna ℃
ESP_LOGI("Main", "Temperature: %f", temp);
vTaskDelay(pdMS_TO_TICKS(1000));
}
}
Funcionamento interno via registrador
Faremos um breve resumo sobre o funcionamento interno do sensor. Para mais detalhes, veja o datasheet.
Inicialização:
Após a inicialização do periférico, é necessário aplicar uma fórmula de conversão a partir do valor lido do registrador “SENS_TSENS_OUT”:
T(°C) = 0.4386 * VALUE – 27.88 * offset – 20.52
Saiba mais
Última novidade da Espressif: ESP32-S2-MINI
ESP32-S2 – Analisando o novo e melhor ADC








#include “driver/temp_sensor.h” deu erro na minha simulação de medidor de temperatura, o que eu faço?
Bom dia!
Onde eu encontro as bibliotecas usadas para download?