src.nth.io/

summaryrefslogtreecommitdiff
path: root/main/chip_temp.c
diff options
context:
space:
mode:
Diffstat (limited to 'main/chip_temp.c')
-rw-r--r--main/chip_temp.c40
1 files changed, 40 insertions, 0 deletions
diff --git a/main/chip_temp.c b/main/chip_temp.c
new file mode 100644
index 0000000..1530fc5
--- /dev/null
+++ b/main/chip_temp.c
@@ -0,0 +1,40 @@
+#include "chip_temp.h"
+
+#include <math.h>
+
+#include "driver/temperature_sensor.h"
+#include "esp_log.h"
+
+static const char *TAG = "temp";
+
+static temperature_sensor_handle_t s_tsens;
+
+esp_err_t chip_temp_init(void)
+{
+ // 20-100°C range: best accuracy band for a device that idles warm
+ // (PoE + PSRAM at 200 MHz) and whose interesting failures are hot.
+ temperature_sensor_config_t cfg = TEMPERATURE_SENSOR_CONFIG_DEFAULT(20, 100);
+ esp_err_t err = temperature_sensor_install(&cfg, &s_tsens);
+ if (err != ESP_OK) {
+ ESP_LOGW(TAG, "install failed: %s", esp_err_to_name(err));
+ return err;
+ }
+ err = temperature_sensor_enable(s_tsens);
+ if (err != ESP_OK) {
+ ESP_LOGW(TAG, "enable failed: %s", esp_err_to_name(err));
+ temperature_sensor_uninstall(s_tsens);
+ s_tsens = NULL;
+ return err;
+ }
+ float t = chip_temp_read();
+ ESP_LOGI(TAG, "on-die sensor up, %.1f°C at boot", (double)t);
+ return ESP_OK;
+}
+
+float chip_temp_read(void)
+{
+ if (!s_tsens) return NAN;
+ float celsius = NAN;
+ if (temperature_sensor_get_celsius(s_tsens, &celsius) != ESP_OK) return NAN;
+ return celsius;
+}