ESPHome 2026.6.2
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
23 float temperature = NAN;
24 bool success = false;
25#if defined(USE_ESP32_VARIANT_ESP32)
26 uint8_t raw = temprature_sens_read();
27 ESP_LOGV(TAG, "Raw temperature value: %d", raw);
28 temperature = (raw - 32) / 1.8f;
29 success = (raw != 128);
30#elif defined(USE_ESP32_VARIANT_ESP32C2) || defined(USE_ESP32_VARIANT_ESP32C3) || \
31 defined(USE_ESP32_VARIANT_ESP32C5) || defined(USE_ESP32_VARIANT_ESP32C6) || defined(USE_ESP32_VARIANT_ESP32C61) || \
32 defined(USE_ESP32_VARIANT_ESP32H2) || defined(USE_ESP32_VARIANT_ESP32P4) || defined(USE_ESP32_VARIANT_ESP32S2) || \
33 defined(USE_ESP32_VARIANT_ESP32S3)
34 esp_err_t result = temperature_sensor_get_celsius(this->tsens_, &temperature);
35 success = (result == ESP_OK);
36 if (!success) {
37 ESP_LOGE(TAG, "Reading failed (%d)", result);
38 }
39#endif // USE_ESP32_VARIANT
40
41 if (success && std::isfinite(temperature)) {
42 this->publish_state(temperature);
43 } else {
44 ESP_LOGD(TAG, "Ignoring invalid temperature (success=%d, value=%.1f)", success, temperature);
45 if (!this->has_state()) {
46 this->publish_state(NAN);
47 }
48 }
49}
50
52#if defined(USE_ESP32_VARIANT_ESP32C2) || defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32C5) || \
53 defined(USE_ESP32_VARIANT_ESP32C6) || defined(USE_ESP32_VARIANT_ESP32C61) || defined(USE_ESP32_VARIANT_ESP32H2) || \
54 defined(USE_ESP32_VARIANT_ESP32P4) || defined(USE_ESP32_VARIANT_ESP32S2) || defined(USE_ESP32_VARIANT_ESP32S3)
55 temperature_sensor_config_t tsens_config = TEMPERATURE_SENSOR_CONFIG_DEFAULT(-10, 80);
56
57 esp_err_t result = temperature_sensor_install(&tsens_config, &this->tsens_);
58 if (result != ESP_OK) {
59 ESP_LOGE(TAG, "Install failed (%d)", result);
60 this->mark_failed();
61 return;
62 }
63
64 result = temperature_sensor_enable(this->tsens_);
65 if (result != ESP_OK) {
66 ESP_LOGE(TAG, "Enabling failed (%d)", result);
67 this->mark_failed();
68 return;
69 }
70#endif // USE_ESP32_VARIANT
71}
72
73} // namespace esphome::internal_temperature
74
75#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