From b63a061aebec7659b5a6451bb09fc46ad3e7fb47 Mon Sep 17 00:00:00 2001 From: Eduardo Spremolla Date: Sun, 15 Oct 2023 06:57:13 -0300 Subject: [PATCH] Update xsns_02_analog.ino for calibrated values on ESP32 (#19732) ESP32 ADC has variables errors, but calibrations values are put in eFuses at factory test. analogReadMilliVolts() from api correct the ADC reading with tata values. Since now the value are mV and not ADC numbers, the fast solution is to revert it back to ADC numbers: divide by Vcc => ANALOG_V33*1000 and multiply by ANALOG_RANGE Other way is to modify all sensor cases to account for the different unit. --- tasmota/tasmota_xsns_sensor/xsns_02_analog.ino | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tasmota/tasmota_xsns_sensor/xsns_02_analog.ino b/tasmota/tasmota_xsns_sensor/xsns_02_analog.ino index 0be99724e..07d28a566 100644 --- a/tasmota/tasmota_xsns_sensor/xsns_02_analog.ino +++ b/tasmota/tasmota_xsns_sensor/xsns_02_analog.ino @@ -335,10 +335,17 @@ uint16_t AdcRead(uint32_t pin, uint32_t factor) { uint32_t samples = 1 << factor; uint32_t analog = 0; for (uint32_t i = 0; i < samples; i++) { +#ifdef ESP32 + analog += analogReadMilliVolts(pin); // get the value corrected by calibrated values from the eFuses +#else analog += analogRead(pin); +#endif delay(1); } analog >>= factor; +#ifdef ESP32 + analog = analog/(ANALOG_V33*1000) * ANALOG_RANGE; // go back from mV to ADC +#endif return analog; }