ESPHome 2026.4.0-dev
Loading...
Searching...
No Matches
internal_temperature_esp32.cpp
Go to the documentation of this file.
1#ifdef USE_ESP32
2
3#include "esphome/core/log.h"
5
6#if defined(USE_ESP32_VARIANT_ESP32)
7// there is no official API available on the original ESP32
8extern "C" {
10}
11#elif defined(USE_ESP32_VARIANT_ESP32C2) || defined(USE_ESP32_VARIANT_ESP32C3) || \
12 defined(USE_ESP32_VARIANT_ESP32C5) || defined(USE_ESP32_VARIANT_ESP32C6) || defined(USE_ESP32_VARIANT_ESP32C61) || \
13 defined(USE_ESP32_VARIANT_ESP32H2) || defined(USE_ESP32_VARIANT_ESP32P4) || defined(USE_ESP32_VARIANT_ESP32S2) || \
14 defined(USE_ESP32_VARIANT_ESP32S3)
15#include "driver/temperature_sensor.h"
16#endif // USE_ESP32_VARIANT
17
19
20static const char *const TAG = "internal_temperature.esp32";
21
22#if defined(USE_ESP32_VARIANT_ESP32C2) || defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32C5) || \
23 defined(USE_ESP32_VARIANT_ESP32C6) || defined(USE_ESP32_VARIANT_ESP32C61) || defined(USE_ESP32_VARIANT_ESP32H2) || \
24 defined(USE_ESP32_VARIANT_ESP32P4) || defined(USE_ESP32_VARIANT_ESP32S2) || defined(USE_ESP32_VARIANT_ESP32S3)
25static temperature_sensor_handle_t tsensNew = NULL;
26#endif // USE_ESP32_VARIANT
27
29 float temperature = NAN;
30 bool success = false;
31#if defined(USE_ESP32_VARIANT_ESP32)
32 uint8_t raw = temprature_sens_read();
33 ESP_LOGV(TAG, "Raw temperature value: %d", raw);
34 temperature = (raw - 32) / 1.8f;
35 success = (raw != 128);
36#elif defined(USE_ESP32_VARIANT_ESP32C2) || defined(USE_ESP32_VARIANT_ESP32C3) || \
37 defined(USE_ESP32_VARIANT_ESP32C5) || defined(USE_ESP32_VARIANT_ESP32C6) || defined(USE_ESP32_VARIANT_ESP32C61) || \
38 defined(USE_ESP32_VARIANT_ESP32H2) || defined(USE_ESP32_VARIANT_ESP32P4) || defined(USE_ESP32_VARIANT_ESP32S2) || \
39 defined(USE_ESP32_VARIANT_ESP32S3)
40 esp_err_t result = temperature_sensor_get_celsius(tsensNew, &temperature);
41 success = (result == ESP_OK);
42 if (!success) {
43 ESP_LOGE(TAG, "Reading failed (%d)", result);
44 }
45#endif // USE_ESP32_VARIANT
46
47 if (success && std::isfinite(temperature)) {
48 this->publish_state(temperature);
49 } else {
50 ESP_LOGD(TAG, "Ignoring invalid temperature (success=%d, value=%.1f)", success, temperature);
51 if (!this->has_state()) {
52 this->publish_state(NAN);
53 }
54 }
55}
56
58#if defined(USE_ESP32_VARIANT_ESP32C2) || defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32C5) || \
59 defined(USE_ESP32_VARIANT_ESP32C6) || defined(USE_ESP32_VARIANT_ESP32C61) || defined(USE_ESP32_VARIANT_ESP32H2) || \
60 defined(USE_ESP32_VARIANT_ESP32P4) || defined(USE_ESP32_VARIANT_ESP32S2) || defined(USE_ESP32_VARIANT_ESP32S3)
61 temperature_sensor_config_t tsens_config = TEMPERATURE_SENSOR_CONFIG_DEFAULT(-10, 80);
62
63 esp_err_t result = temperature_sensor_install(&tsens_config, &tsensNew);
64 if (result != ESP_OK) {
65 ESP_LOGE(TAG, "Install failed (%d)", result);
66 this->mark_failed();
67 return;
68 }
69
70 result = temperature_sensor_enable(tsensNew);
71 if (result != ESP_OK) {
72 ESP_LOGE(TAG, "Enabling failed (%d)", result);
73 this->mark_failed();
74 return;
75 }
76#endif // USE_ESP32_VARIANT
77}
78
79} // namespace esphome::internal_temperature
80
81#endif // USE_ESP32
uint8_t raw[35]
Definition bl0939.h:0
void mark_failed()
Mark this component as failed.
bool has_state() const
void publish_state(float state)
Publish a new state to the front-end.
Definition sensor.cpp:68
uint8_t temprature_sens_read()
uint16_t temperature
Definition sun_gtil2.cpp:12