From 5d47105951671be3040041655c85d96d6af077bb Mon Sep 17 00:00:00 2001 From: Gunnar Skjold Date: Fri, 28 Aug 2020 17:46:34 +0200 Subject: [PATCH] Added support for TMP236 analog temp sensor --- src/AmsToMqttBridge.ino | 1 + src/HwTools.cpp | 23 +++++++++++++++++++++-- src/HwTools.h | 4 +++- src/web/AmsWebServer.cpp | 1 + web/application.js | 3 ++- 5 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/AmsToMqttBridge.ino b/src/AmsToMqttBridge.ino index 23628c81..5662958f 100644 --- a/src/AmsToMqttBridge.ino +++ b/src/AmsToMqttBridge.ino @@ -126,6 +126,7 @@ void setup() { hw.setLed(config.getLedPin(), config.isLedInverted()); hw.setLedRgb(config.getLedPinRed(), config.getLedPinGreen(), config.getLedPinBlue(), config.isLedRgbInverted()); hw.setTempSensorPin(config.getTempSensorPin()); + hw.setTempAnalogSensorPin(config.getTempAnalogSensorPin()); hw.setVccPin(config.getVccPin()); hw.setVccMultiplier(config.getVccMultiplier()); hw.setVccOffset(config.getVccOffset()); diff --git a/src/HwTools.cpp b/src/HwTools.cpp index ff8bc68c..23678229 100644 --- a/src/HwTools.cpp +++ b/src/HwTools.cpp @@ -92,8 +92,8 @@ bool HwTools::updateTemperatures() { DeviceAddress addr; sensorApi->requestTemperatures(); int c = sensorApi->getDeviceCount(); - Serial.print("Sensors found: "); - Serial.println(c); + //Serial.print("Sensors found: "); + //Serial.println(c); for(int i = 0; i < c; i++) { bool found = false; sensorApi->getAddress(addr, i); @@ -150,6 +150,11 @@ bool HwTools::isSensorAddressEqual(uint8_t a[8], uint8_t b[8]) { double HwTools::getTemperature() { uint8_t c = 0; double ret = 0; + double analogTemp = getTemperatureAnalog(); + if(analogTemp != DEVICE_DISCONNECTED_C) { + ret += analogTemp; + c++; + } for(int x = 0; x < sensorCount; x++) { TempSensorData data = *tempSensors[x]; if(data.common && data.lastValidRead > -85) { @@ -159,6 +164,20 @@ double HwTools::getTemperature() { } return c == 0 ? DEVICE_DISCONNECTED_C : ret/c; } +double HwTools::getTemperatureAnalog() { + if(tempAnalogSensorPin != 0xFF) { + float adcCalibrationFactor = 1.06587; + int adcRead = analogRead(tempAnalogSensorPin); + int volts; + #if defined(ESP8266) + volts = (analogRead(vccPin) / 1024.0) * 3.3; + #elif defined(ESP32) + volts = (analogRead(vccPin) / 4095.0) * 3.3; + #endif + return ((volts * adcCalibrationFactor) - 0.4) / 0.0195; + } + return DEVICE_DISCONNECTED_C; +} int HwTools::getWifiRssi() { int rssi = WiFi.RSSI(); diff --git a/src/HwTools.h b/src/HwTools.h index 20bb7345..b97c2894 100644 --- a/src/HwTools.h +++ b/src/HwTools.h @@ -29,6 +29,7 @@ struct TempSensorData { class HwTools { public: void setTempSensorPin(int tempSensorPin); + void setTempAnalogSensorPin(int tempAnalogSensorPin); void setVccPin(int vccPin); void setVccOffset(double vccOffset); void setVccMultiplier(double vccMultiplier); @@ -38,6 +39,7 @@ public: TempSensorData* getTempSensorData(uint8_t i); bool updateTemperatures(); double getTemperature(); + double getTemperature(); double getTemperature(uint8_t address[8]); int getWifiRssi(); void setLed(uint8_t ledPin, bool ledInverted); @@ -48,7 +50,7 @@ public: HwTools() {}; private: - uint8_t tempSensorPin = -1; + uint8_t tempSensorPin = -1, tempAnalogSensorPin = -1; uint8_t vccPin = -1; uint8_t ledPin = -1, ledPinRed = -1, ledPinGreen = -1, ledPinBlue = -1; bool ledInverted, ledRgbInverted; diff --git a/src/web/AmsWebServer.cpp b/src/web/AmsWebServer.cpp index 2ab55b22..9d6a8816 100644 --- a/src/web/AmsWebServer.cpp +++ b/src/web/AmsWebServer.cpp @@ -929,6 +929,7 @@ void AmsWebServer::handleSave() { hw->setLed(config->getLedPin(), config->isLedInverted()); hw->setLedRgb(config->getLedPinRed(), config->getLedPinGreen(), config->getLedPinBlue(), config->isLedRgbInverted()); hw->setTempSensorPin(config->getTempSensorPin()); + hw->setTempAnalogSensorPin(config->getTempAnalogSensorPin()); hw->setVccPin(config->getVccPin()); hw->setVccOffset(config->getVccOffset()); hw->setVccMultiplier(config->getVccMultiplier()); diff --git a/web/application.js b/web/application.js index 0bac91be..0ddae242 100644 --- a/web/application.js +++ b/web/application.js @@ -217,8 +217,9 @@ var fetch = function() { for(var id in json) { var str = json[id]; - if(typeof str === "object") + if(typeof str === "object") { continue; + } if(isNaN(str)) { $('#'+id).html(str); } else {