From ca1a2033230b089390a8346f8c1ec026ba14ecbc Mon Sep 17 00:00:00 2001 From: weidi Date: Wed, 20 Aug 2025 21:05:34 +0200 Subject: [PATCH 1/3] add analogReadResolution(10) for esp32 --- components/volume_sensor/volume_sensor.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/components/volume_sensor/volume_sensor.cpp b/components/volume_sensor/volume_sensor.cpp index ea6971e..3139537 100644 --- a/components/volume_sensor/volume_sensor.cpp +++ b/components/volume_sensor/volume_sensor.cpp @@ -34,6 +34,10 @@ void VolumeSensor::dump_config() { } void VolumeSensor::update() { + // Set ADC resolution to 10 bits (0-1023) on ESP32 + #if defined(ESP32) + analogReadResolution(10); + #endif uint16_t signal_max = 0; uint16_t signal_min = 1023; unsigned long start_time = millis(); @@ -108,4 +112,4 @@ void VolumeSensor::update() { } } // namespace volume_sensor -} // namespace esphome \ No newline at end of file +} // namespace esphome From 841803d2feb634c45c0510e3aedbbff1bfa862d5 Mon Sep 17 00:00:00 2001 From: weidi Date: Wed, 20 Aug 2025 22:32:20 +0200 Subject: [PATCH 2/3] create setup method and move attenuation Saves time during update() as setting resolution and attenuation is only needed once --- components/volume_sensor/volume_sensor.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/components/volume_sensor/volume_sensor.cpp b/components/volume_sensor/volume_sensor.cpp index 3139537..21a4ca7 100644 --- a/components/volume_sensor/volume_sensor.cpp +++ b/components/volume_sensor/volume_sensor.cpp @@ -13,6 +13,15 @@ float VolumeSensor::map_value_float(float x, float in_min, float in_max, return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; } +void VolumeSensor::setup() { + #if defined(ESP32) + // Set attenuation to 0db to be as close to esp8266 as possible + analogSetPinAttenuation(this->pin_, ADC_0db); + // Set ADC resolution to 10 bits (0-1023) on ESP32 + analogReadResolution(10); + #endif +} + void VolumeSensor::dump_config() { LOG_SENSOR("", "Volume Sensor", this); ESP_LOGCONFIG(TAG, " Pin: %u", this->pin_); @@ -34,10 +43,6 @@ void VolumeSensor::dump_config() { } void VolumeSensor::update() { - // Set ADC resolution to 10 bits (0-1023) on ESP32 - #if defined(ESP32) - analogReadResolution(10); - #endif uint16_t signal_max = 0; uint16_t signal_min = 1023; unsigned long start_time = millis(); From bdb0534e62b0060992364c8bfac2ab991c443199 Mon Sep 17 00:00:00 2001 From: weidi Date: Wed, 20 Aug 2025 22:41:10 +0200 Subject: [PATCH 3/3] add setup to header --- components/volume_sensor/volume_sensor.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/components/volume_sensor/volume_sensor.h b/components/volume_sensor/volume_sensor.h index d106e82..3342042 100644 --- a/components/volume_sensor/volume_sensor.h +++ b/components/volume_sensor/volume_sensor.h @@ -19,6 +19,7 @@ class VolumeSensor : public sensor::Sensor, public PollingComponent { void set_percentage_sensor(sensor::Sensor *sensor) { this->percentage_sensor_ = sensor; } void update() override; + void setup() override; void dump_config() override; protected: @@ -45,4 +46,4 @@ class VolumeSensor : public sensor::Sensor, public PollingComponent { }; } // namespace volume_sensor -} // namespace esphome \ No newline at end of file +} // namespace esphome