Co-authored-by: Bl00d-B0b <Bl00d-B0b@users.noreply.github.com> Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Co-authored-by: J. Nick Koston <nick@home-assistant.io>
25 lines
693 B
C++
25 lines
693 B
C++
#ifdef USE_LN882X
|
|
|
|
#include "internal_temperature.h"
|
|
|
|
extern "C" {
|
|
uint16_t hal_adc_get_data(uint32_t adc_base, uint32_t ch);
|
|
}
|
|
|
|
namespace esphome::internal_temperature {
|
|
|
|
void InternalTemperatureSensor::update() {
|
|
static constexpr uint32_t ADC_BASE = 0x40000800U;
|
|
static constexpr uint32_t ADC_CH0 = 1U;
|
|
static constexpr uint16_t ADC_MASK = 0xFFF;
|
|
static constexpr float ADC_TEMP_SCALE = 2.54f;
|
|
static constexpr float ADC_TEMP_OFFSET = 278.15f;
|
|
uint16_t raw = hal_adc_get_data(ADC_BASE, ADC_CH0);
|
|
float temperature = (raw & ADC_MASK) / ADC_TEMP_SCALE - ADC_TEMP_OFFSET;
|
|
this->publish_state(temperature);
|
|
}
|
|
|
|
} // namespace esphome::internal_temperature
|
|
|
|
#endif // USE_LN882X
|