From f8c279edb007d751d96a6267f088a1ae6ac473c8 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Thu, 14 Nov 2024 17:15:17 +0100 Subject: [PATCH 1/2] fix input pullup and counter on gpio 25/26, #2201 --- src/analogsensor.cpp | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/analogsensor.cpp b/src/analogsensor.cpp index 1a0e6f39c..daa1562ca 100644 --- a/src/analogsensor.cpp +++ b/src/analogsensor.cpp @@ -138,14 +138,10 @@ void AnalogSensor::reload(bool get_nvs) { continue; // skip this loop pass } - if (sensor.type() == AnalogType::ADC) { - LOG_DEBUG("ADC Sensor on GPIO %02d", sensor.gpio()); - // analogSetPinAttenuation does not work with analogReadMilliVolts - sensor.analog_ = 0; // initialize - sensor.last_reading_ = 0; - } else if (sensor.type() == AnalogType::COUNTER) { - LOG_DEBUG("I/O Counter on GPIO %02d", sensor.gpio()); - pinMode(sensor.gpio(), INPUT_PULLUP); + if ((sensor.gpio() == 25 || sensor.gpio() == 26) + && (sensor.type() == AnalogType::COUNTER || sensor.type() == AnalogType::DIGITAL_IN || sensor.type() == AnalogType::RATE + || sensor.type() == AnalogType::TIMER)) { + // pullup is mapped to DAC, so set to 3.3V #if CONFIG_IDF_TARGET_ESP32 if (sensor.gpio() == 25 || sensor.gpio() == 26) { dacWrite(sensor.gpio(), 255); @@ -155,6 +151,15 @@ void AnalogSensor::reload(bool get_nvs) { dacWrite(sensor.gpio(), 255); } #endif + } + if (sensor.type() == AnalogType::ADC) { + LOG_DEBUG("ADC Sensor on GPIO %02d", sensor.gpio()); + // analogSetPinAttenuation does not work with analogReadMilliVolts + sensor.analog_ = 0; // initialize + sensor.last_reading_ = 0; + } else if (sensor.type() == AnalogType::COUNTER) { + LOG_DEBUG("I/O Counter on GPIO %02d", sensor.gpio()); + pinMode(sensor.gpio(), INPUT_PULLUP); sensor.polltime_ = 0; sensor.poll_ = digitalRead(sensor.gpio()); if (double_t val = EMSESP::nvs_.getDouble(sensor.name().c_str(), 0)) { From e15f9dec5a65a6b8fd0b0a64b1e6bdbb94ba4e4e Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Thu, 14 Nov 2024 18:38:27 +0100 Subject: [PATCH 2/2] show dac output on dashboard/sensors, fix dac pins for esp32s2 --- CHANGELOG_LATEST.md | 1 + interface/src/app/main/Sensors.tsx | 3 ++- src/analogsensor.cpp | 6 +++--- src/version.h | 2 +- src/web/WebDataService.cpp | 11 ++++++++++- 5 files changed, 17 insertions(+), 6 deletions(-) diff --git a/CHANGELOG_LATEST.md b/CHANGELOG_LATEST.md index 442112259..c0c2c852e 100644 --- a/CHANGELOG_LATEST.md +++ b/CHANGELOG_LATEST.md @@ -23,5 +23,6 @@ For more details go to [www.emsesp.org](https://www.emsesp.org/). - lastCode character check [#2189](https://github.com/emsesp/EMS-ESP32/issues/2189) - reading too many telegram parts - heatpump cost UOMs [#2188](https://github.com/emsesp/EMS-ESP32/issues/2188) +- analog dac output and inputs on dac pins [#2201](https://github.com/emsesp/EMS-ESP32/discussions/2201) ## Changed diff --git a/interface/src/app/main/Sensors.tsx b/interface/src/app/main/Sensors.tsx index 876499770..f063a3343 100644 --- a/interface/src/app/main/Sensors.tsx +++ b/interface/src/app/main/Sensors.tsx @@ -438,7 +438,8 @@ const Sensors = () => { {a.g} {a.n} {AnalogTypeNames[a.t]} - {a.t === AnalogType.DIGITAL_OUT || a.t === AnalogType.DIGITAL_IN ? ( + {(a.t === AnalogType.DIGITAL_OUT && a.g !== 25 && a.g !== 26) || + a.t === AnalogType.DIGITAL_IN ? ( {a.v ? LL.ON() : LL.OFF()} ) : ( {a.t ? formatValue(a.v, a.u) : ''} diff --git a/src/analogsensor.cpp b/src/analogsensor.cpp index daa1562ca..54807e7cb 100644 --- a/src/analogsensor.cpp +++ b/src/analogsensor.cpp @@ -147,7 +147,7 @@ void AnalogSensor::reload(bool get_nvs) { dacWrite(sensor.gpio(), 255); } #elif CONFIG_IDF_TARGET_ESP32S2 - if (sensor.gpio() == 23 || sensor.gpio() == 24) { + if (sensor.gpio() == 17 || sensor.gpio() == 18) { dacWrite(sensor.gpio(), 255); } #endif @@ -197,7 +197,7 @@ void AnalogSensor::reload(bool get_nvs) { sensor.set_value(sensor.offset()); } else #elif CONFIG_IDF_TARGET_ESP32S2 - if (sensor.gpio() == 23 || sensor.gpio() == 24) { + if (sensor.gpio() == 17 || sensor.gpio() == 18) { if (sensor.offset() > 255) { sensor.set_offset(255); } else if (sensor.offset() < 0) { @@ -750,7 +750,7 @@ bool AnalogSensor::command_setvalue(const char * value, const int8_t gpio) { dacWrite(sensor.gpio(), sensor.offset()); } else #elif CONFIG_IDF_TARGET_ESP32S2 - if ((sensor.gpio() == 23 || sensor.gpio() == 24) && v <= 255) { + if ((sensor.gpio() == 17 || sensor.gpio() == 18) && v <= 255) { sensor.set_offset(v); sensor.set_value(v); pinMode(sensor.gpio(), OUTPUT); diff --git a/src/version.h b/src/version.h index 9e1b03802..77e31278c 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define EMSESP_APP_VERSION "3.7.1-dev.6" \ No newline at end of file +#define EMSESP_APP_VERSION "3.7.1-dev.7" \ No newline at end of file diff --git a/src/web/WebDataService.cpp b/src/web/WebDataService.cpp index 7a17c5698..4b97c9737 100644 --- a/src/web/WebDataService.cpp +++ b/src/web/WebDataService.cpp @@ -415,7 +415,16 @@ void WebDataService::dashboard_data(AsyncWebServerRequest * request) { JsonObject dv = node["dv"].to(); dv["id"] = "00" + sensor.name(); - if (sensor.type() == AnalogSensor::AnalogType::DIGITAL_OUT || sensor.type() == AnalogSensor::AnalogType::DIGITAL_IN) { +#if CONFIG_IDF_TARGET_ESP32 + if (sensor.type() == AnalogSensor::AnalogType::DIGITAL_OUT && (sensor.gpio() == 25 || sensor.gpio() == 26)) { + obj["v"] = Helpers::transformNumFloat(sensor.value(), 0); + } else +#elif CONFIG_IDF_TARGET_ESP32S2 + if (sensor.type() == AnalogSensor::AnalogType::DIGITAL_OUT && (sensor.gpio() == 17 || sensor.gpio() == 18)) { + obj["v"] = Helpers::transformNumFloat(sensor.value(), 0); + } else +#endif + if (sensor.type() == AnalogSensor::AnalogType::DIGITAL_OUT || sensor.type() == AnalogSensor::AnalogType::DIGITAL_IN) { char s[12]; dv["v"] = Helpers::render_boolean(s, sensor.value() != 0, true); JsonArray l = dv["l"].to();