65 lines
2.2 KiB
C++
65 lines
2.2 KiB
C++
/**
|
|
* @file temperature.cpp
|
|
* @brief ESP32-S3 internal temperature sensor driver
|
|
*
|
|
* Uses the built-in TEMPSENSOR peripheral to measure chip die temperature.
|
|
* No external wiring needed. The chip temperature is typically 10-20°C
|
|
* above ambient due to self-heating, but is useful for relative monitoring.
|
|
*
|
|
* API reference: driver/temperature_sensor.h
|
|
*/
|
|
|
|
#include "temperature.h"
|
|
|
|
#include <stdio.h>
|
|
#include "esp_log.h"
|
|
#include "driver/temperature_sensor.h"
|
|
|
|
static const char *TAG = "TEMP";
|
|
|
|
// ─── State ──────────────────────────────────────────────────────────────────
|
|
|
|
static temperature_sensor_handle_t s_temp_handle = NULL;
|
|
static bool s_sensor_ready = false;
|
|
|
|
// ─── Public API ─────────────────────────────────────────────────────────────
|
|
|
|
bool temperature_init(void)
|
|
{
|
|
ESP_LOGI(TAG, "Initializing ESP32-S3 internal temperature sensor...");
|
|
|
|
// Configure range for typical operation (0°C to 80°C covers rack temps)
|
|
temperature_sensor_config_t config = TEMPERATURE_SENSOR_CONFIG_DEFAULT(0, 80);
|
|
|
|
esp_err_t ret = temperature_sensor_install(&config, &s_temp_handle);
|
|
if (ret != ESP_OK) {
|
|
ESP_LOGW(TAG, "Temperature sensor install failed: %s", esp_err_to_name(ret));
|
|
return false;
|
|
}
|
|
|
|
ret = temperature_sensor_enable(s_temp_handle);
|
|
if (ret != ESP_OK) {
|
|
ESP_LOGW(TAG, "Temperature sensor enable failed: %s", esp_err_to_name(ret));
|
|
temperature_sensor_uninstall(s_temp_handle);
|
|
s_temp_handle = NULL;
|
|
return false;
|
|
}
|
|
|
|
s_sensor_ready = true;
|
|
ESP_LOGI(TAG, "Internal temperature sensor ready");
|
|
return true;
|
|
}
|
|
|
|
float temperature_read(void)
|
|
{
|
|
if (!s_sensor_ready || !s_temp_handle) return -273.0f;
|
|
|
|
float celsius = -273.0f;
|
|
esp_err_t ret = temperature_sensor_get_celsius(s_temp_handle, &celsius);
|
|
if (ret != ESP_OK) {
|
|
ESP_LOGW(TAG, "Temperature read failed: %s", esp_err_to_name(ret));
|
|
return -273.0f;
|
|
}
|
|
|
|
return celsius;
|
|
}
|