From 7f1bf05af206f30c29cc410de15ddac098104fa4 Mon Sep 17 00:00:00 2001 From: Lukas Heiligenbrunner Date: Wed, 30 Sep 2020 23:27:26 +0200 Subject: [PATCH 1/8] new fan pin, and testing on off times --- src/main.cpp | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 532b16c..0b12269 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -10,9 +10,10 @@ bool allow; bool error = false; /** pin config */ -static const uint8_t WasserSensorPin = 14; -static const uint8_t DruckSensorPin = 12; -static const uint8_t SchuetzPin = 13; +static const uint8_t WasserSensorPin = D5; // GPIO 14 +static const uint8_t DruckSensorPin = D6; // GPIO 12 +static const uint8_t SchuetzPin = D2; // GPIO 4 +static const uint8_t LuefterPin = D3; // GPIO 0 /** time config */ static const int maxpumpdauer = 600; //sek @@ -132,12 +133,22 @@ ICACHE_RAM_ATTR void WasserSensorInt() { } void setup() { - digitalWrite(SchuetzPin, LOW); //pumpe anfangs sofort abschalten pinMode(SchuetzPin, OUTPUT); - pinMode(LED_BUILTIN, OUTPUT); - digitalWrite(LED_BUILTIN, LOW); + pinMode(LuefterPin, OUTPUT); + digitalWrite(LED_BUILTIN, LOW); + digitalWrite(SchuetzPin, LOW); //pumpe anfangs sofort abschalten + digitalWrite(LuefterPin, LOW); + + delay(5000); + digitalWrite(LuefterPin, HIGH); + digitalWrite(SchuetzPin, HIGH); + delay(2000); + digitalWrite(LuefterPin, LOW); + digitalWrite(SchuetzPin, LOW); + + delay(9999999); pinMode(WasserSensorPin, INPUT); pinMode(DruckSensorPin, INPUT); From 7496b273dbe385e715fd1db68b6fff92e625e21e Mon Sep 17 00:00:00 2001 From: Lukas Heiligenbrunner Date: Tue, 20 Oct 2020 21:15:18 +0200 Subject: [PATCH 2/8] correct pin for dht22 --- src/Temperature.h | 2 +- src/main.cpp | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/Temperature.h b/src/Temperature.h index 4c375d6..a657a87 100644 --- a/src/Temperature.h +++ b/src/Temperature.h @@ -9,7 +9,7 @@ class Temperature { public: - Temperature() : dht(4, DHT22){}; + Temperature() : dht(2, DHT22){}; /** * initialize the temperature sensor diff --git a/src/main.cpp b/src/main.cpp index 0b12269..5fc28f6 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -141,14 +141,14 @@ void setup() { digitalWrite(SchuetzPin, LOW); //pumpe anfangs sofort abschalten digitalWrite(LuefterPin, LOW); - delay(5000); - digitalWrite(LuefterPin, HIGH); - digitalWrite(SchuetzPin, HIGH); - delay(2000); - digitalWrite(LuefterPin, LOW); - digitalWrite(SchuetzPin, LOW); - - delay(9999999); +// delay(5000); +// digitalWrite(LuefterPin, HIGH); +// digitalWrite(SchuetzPin, HIGH); +// delay(2000); +// digitalWrite(LuefterPin, LOW); +// digitalWrite(SchuetzPin, LOW); +// +// delay(9999999); pinMode(WasserSensorPin, INPUT); pinMode(DruckSensorPin, INPUT); From 3aff2a69aaf3fd46831914f3083331e8bbf9b25c Mon Sep 17 00:00:00 2001 From: Lukas Heiligenbrunner Date: Wed, 21 Oct 2020 20:16:40 +0200 Subject: [PATCH 3/8] remove test code --- src/main.cpp | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 5fc28f6..743301d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -141,15 +141,6 @@ void setup() { digitalWrite(SchuetzPin, LOW); //pumpe anfangs sofort abschalten digitalWrite(LuefterPin, LOW); -// delay(5000); -// digitalWrite(LuefterPin, HIGH); -// digitalWrite(SchuetzPin, HIGH); -// delay(2000); -// digitalWrite(LuefterPin, LOW); -// digitalWrite(SchuetzPin, LOW); -// -// delay(9999999); - pinMode(WasserSensorPin, INPUT); pinMode(DruckSensorPin, INPUT); From e0a27bf15542459b94a60245b5cbd9475c42aa18 Mon Sep 17 00:00:00 2001 From: Lukas Heiligenbrunner Date: Tue, 10 Nov 2020 15:12:47 +0100 Subject: [PATCH 4/8] add new pins for heizung --- src/main.cpp | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 743301d..f66cc1a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -14,6 +14,7 @@ static const uint8_t WasserSensorPin = D5; // GPIO 14 static const uint8_t DruckSensorPin = D6; // GPIO 12 static const uint8_t SchuetzPin = D2; // GPIO 4 static const uint8_t LuefterPin = D3; // GPIO 0 +static const uint8_t HeizungPin = D1; /** time config */ static const int maxpumpdauer = 600; //sek @@ -24,6 +25,9 @@ Ticker status; //pumpendauer maximum ticker Ticker pumpendauer; +Ticker heizung; +Ticker luefter; + WifiManager mang; long turnontime = -1; @@ -133,18 +137,22 @@ ICACHE_RAM_ATTR void WasserSensorInt() { } void setup() { + // set pins as output pinMode(SchuetzPin, OUTPUT); pinMode(LED_BUILTIN, OUTPUT); pinMode(LuefterPin, OUTPUT); - - digitalWrite(LED_BUILTIN, LOW); - digitalWrite(SchuetzPin, LOW); //pumpe anfangs sofort abschalten - digitalWrite(LuefterPin, LOW); + pinMode(HeizungPin, OUTPUT); pinMode(WasserSensorPin, INPUT); pinMode(DruckSensorPin, INPUT); + // initialize pins + digitalWrite(LED_BUILTIN, LOW); + digitalWrite(SchuetzPin, LOW); //pumpe anfangs sofort abschalten + digitalWrite(LuefterPin, LOW); + digitalWrite(HeizungPin, LOW); + // initilize serial connection Serial.begin(9600); Serial.println("\n\n\n\nstartup of ESP"); Serial.print("Version: "); @@ -164,16 +172,17 @@ void setup() { DruckschalterInt(); + //anhängen der Pin-Interrupts attachInterrupt(digitalPinToInterrupt(DruckSensorPin), DruckschalterInt, CHANGE); attachInterrupt(digitalPinToInterrupt(WasserSensorPin), WasserSensorInt, CHANGE); + // initialize wifi + mang.init(); + Serial.println("startup sequence complete!\n"); digitalWrite(LED_BUILTIN, HIGH); - - - mang.init(); } From de792719eee9d7f1fcbeae8c8c10d35f4f3d2dea Mon Sep 17 00:00:00 2001 From: Lukas Heiligenbrunner Date: Tue, 10 Nov 2020 17:38:33 +0100 Subject: [PATCH 5/8] new class for managing heating --- src/Heating.cpp | 50 +++++++++++++++++++++++++++++++++++++++++++++ src/Heating.h | 18 ++++++++++++++++ src/Pins.h | 18 ++++++++++++++++ src/Temperature.h | 3 ++- src/WifiManager.cpp | 8 ++++++-- src/WifiManager.h | 4 +++- src/main.cpp | 22 +++++++++++--------- 7 files changed, 109 insertions(+), 14 deletions(-) create mode 100644 src/Heating.cpp create mode 100644 src/Heating.h create mode 100644 src/Pins.h diff --git a/src/Heating.cpp b/src/Heating.cpp new file mode 100644 index 0000000..051b6e2 --- /dev/null +++ b/src/Heating.cpp @@ -0,0 +1,50 @@ +// +// Created by lukas on 10.11.20. +// + +#include "Heating.h" +#include "Pins.h" + +void Heating::init(Temperature *tempsensor) { + mFanWaiting = false; + + mHeizungTicker.attach(10, [&tempsensor, this]() { + // shedule this function because tempread is blocking + schedule_function([this, &tempsensor](){ + // check temperature + Serial.println("checking humidity"); + const float hum = tempsensor->getHum(); + if (hum == -1) return; + + Serial.print("humidity read: "); + Serial.println(hum); + + if (hum > 65) { + // turn off active turnoff timers + mLuefterTicker.detach(); + + // turn on heating and fan + digitalWrite(LuefterPin, HIGH); + digitalWrite(HeizungPin, HIGH); + + // if fan waiting detach its ticker + if (mFanWaiting) { + mLuefterTicker.detach(); + mFanWaiting = false; + } + } else if (hum < 60) { + // if humidity too low turn off heating and fan after 60secs + digitalWrite(HeizungPin, LOW); + + if (!mFanWaiting) { + mFanWaiting = true; + mLuefterTicker.once(60, []() { + // turn off fan + digitalWrite(LuefterPin, LOW); + Serial.println("turning off fan"); + }); + } + } + }); + }); +} diff --git a/src/Heating.h b/src/Heating.h new file mode 100644 index 0000000..7bacbe8 --- /dev/null +++ b/src/Heating.h @@ -0,0 +1,18 @@ +// +// Created by lukas on 10.11.20. +// + +#pragma once + +#include +#include "Temperature.h" + +class Heating { +public: + void init(Temperature* tempsensor); +private: + Ticker mHeizungTicker; + Ticker mLuefterTicker; + + bool mFanWaiting; +}; diff --git a/src/Pins.h b/src/Pins.h new file mode 100644 index 0000000..9dd3fe8 --- /dev/null +++ b/src/Pins.h @@ -0,0 +1,18 @@ +// +// Created by lukas on 10.11.20. +// + +#ifndef PUMPENSTEUERUNG_PINS_H +#define PUMPENSTEUERUNG_PINS_H + +#include + +/** pin config */ +#define WasserSensorPin D5 // GPIO 14 +#define DruckSensorPin D6 // GPIO 12 +#define SchuetzPin D2 // GPIO 4 +#define LuefterPin D3 // GPIO 0 +#define HeizungPin D1 +#define TempSensorPin D4 + +#endif //PUMPENSTEUERUNG_PINS_H diff --git a/src/Temperature.h b/src/Temperature.h index a657a87..9c1bfc2 100644 --- a/src/Temperature.h +++ b/src/Temperature.h @@ -6,10 +6,11 @@ #include #include +#include "Pins.h" class Temperature { public: - Temperature() : dht(2, DHT22){}; + Temperature() : dht(TempSensorPin, DHT22){}; /** * initialize the temperature sensor diff --git a/src/WifiManager.cpp b/src/WifiManager.cpp index c9e8ec7..7173347 100644 --- a/src/WifiManager.cpp +++ b/src/WifiManager.cpp @@ -5,7 +5,7 @@ #include #include "WifiManager.h" -void WifiManager::init() { +void WifiManager::init(Temperature* tempsensor) { Serial.print("Setting up Access Point"); // start softap const bool result = WiFi.softAP("PumpenSteuerung-Heiligenbrunner", "1qayxsw2"); @@ -32,7 +32,7 @@ void WifiManager::init() { } // init temperature sensor - temp.init(); + temp = *tempsensor; } WifiManager::WifiManager() : server(80), lastPumpTime(0), lastWaterOutage(0), lastPumpDuration(0) {} @@ -170,3 +170,7 @@ void WifiManager::setlastWaterOutage(unsigned long lastWaterOutage) { void WifiManager::setPumpDuration(unsigned long lastPumpDuration) { this->lastPumpDuration = lastPumpDuration; } + +Temperature *WifiManager::getTemperatureSensor() { + return &temp; +} diff --git a/src/WifiManager.h b/src/WifiManager.h index 2201d24..f5127af 100644 --- a/src/WifiManager.h +++ b/src/WifiManager.h @@ -16,7 +16,7 @@ public: /** * initialize the webserver */ - void init(); + void init(Temperature* tempsensor); /** * handles new web requests and holds the webserver alive @@ -48,6 +48,8 @@ public: */ void setPumpDuration(unsigned long lastPumpDuration); + Temperature* getTemperatureSensor(); + private: // todo more dynamic static const uint8_t WasserSensorPin = 14; diff --git a/src/main.cpp b/src/main.cpp index f66cc1a..a6e799f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3,18 +3,17 @@ #include #include "WifiManager.h" +#include "Heating.h" + +#include "Pins.h" +#include "Temperature.h" #define VERSION "v1.1" bool allow; bool error = false; -/** pin config */ -static const uint8_t WasserSensorPin = D5; // GPIO 14 -static const uint8_t DruckSensorPin = D6; // GPIO 12 -static const uint8_t SchuetzPin = D2; // GPIO 4 -static const uint8_t LuefterPin = D3; // GPIO 0 -static const uint8_t HeizungPin = D1; + /** time config */ static const int maxpumpdauer = 600; //sek @@ -25,10 +24,9 @@ Ticker status; //pumpendauer maximum ticker Ticker pumpendauer; -Ticker heizung; -Ticker luefter; - WifiManager mang; +Heating mHeat; +Temperature temp; long turnontime = -1; @@ -179,7 +177,11 @@ void setup() { // initialize wifi - mang.init(); + temp.init(); + + mang.init(&temp); + + mHeat.init(&temp); Serial.println("startup sequence complete!\n"); digitalWrite(LED_BUILTIN, HIGH); From 337c65daf33be7b7a5cf7d382fb7c82314255903 Mon Sep 17 00:00:00 2001 From: Lukas Heiligenbrunner Date: Tue, 10 Nov 2020 17:39:40 +0100 Subject: [PATCH 6/8] define pins dynamically --- src/WifiManager.cpp | 1 + src/WifiManager.h | 3 --- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/WifiManager.cpp b/src/WifiManager.cpp index 7173347..0dfd7b6 100644 --- a/src/WifiManager.cpp +++ b/src/WifiManager.cpp @@ -4,6 +4,7 @@ #include #include "WifiManager.h" +#include "Pins.h" void WifiManager::init(Temperature* tempsensor) { Serial.print("Setting up Access Point"); diff --git a/src/WifiManager.h b/src/WifiManager.h index f5127af..92aa825 100644 --- a/src/WifiManager.h +++ b/src/WifiManager.h @@ -51,9 +51,6 @@ public: Temperature* getTemperatureSensor(); private: - // todo more dynamic - static const uint8_t WasserSensorPin = 14; - static const uint8_t DruckSensorPin = 12; ESP8266WebServer server; Temperature temp; From 92e7089aef2a268e929dcafddce044b3ba38a422 Mon Sep 17 00:00:00 2001 From: Lukas Heiligenbrunner Date: Sat, 14 Nov 2020 21:21:22 +0100 Subject: [PATCH 7/8] add some debug logs --- src/Heating.cpp | 8 ++++---- src/main.cpp | 8 ++++++++ 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/Heating.cpp b/src/Heating.cpp index 051b6e2..febaec2 100644 --- a/src/Heating.cpp +++ b/src/Heating.cpp @@ -19,10 +19,10 @@ void Heating::init(Temperature *tempsensor) { Serial.print("humidity read: "); Serial.println(hum); - if (hum > 65) { + if (hum > 65.0) { // turn off active turnoff timers mLuefterTicker.detach(); - + Serial.println("heating should run now!"); // turn on heating and fan digitalWrite(LuefterPin, HIGH); digitalWrite(HeizungPin, HIGH); @@ -32,10 +32,10 @@ void Heating::init(Temperature *tempsensor) { mLuefterTicker.detach(); mFanWaiting = false; } - } else if (hum < 60) { + } else if (hum < 60.0) { // if humidity too low turn off heating and fan after 60secs digitalWrite(HeizungPin, LOW); - + Serial.println("heating should NOT run now!"); if (!mFanWaiting) { mFanWaiting = true; mLuefterTicker.once(60, []() { diff --git a/src/main.cpp b/src/main.cpp index a6e799f..964ca6a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -149,6 +149,9 @@ void setup() { digitalWrite(SchuetzPin, LOW); //pumpe anfangs sofort abschalten digitalWrite(LuefterPin, LOW); digitalWrite(HeizungPin, LOW); +// +// digitalWrite(HeizungPin, HIGH); +// delay(1000000); // initilize serial connection Serial.begin(9600); @@ -177,10 +180,15 @@ void setup() { // initialize wifi + Serial.println("initializing temperature sensor!"); temp.init(); + Serial.print("initial read temperature: "); + Serial.println(temp.getTemp()); + Serial.println("Initializing wifi"); mang.init(&temp); + Serial.println("initializing heating service"); mHeat.init(&temp); Serial.println("startup sequence complete!\n"); From 4a7a929dbc5c22f7dd77cac55eb97f308d969f24 Mon Sep 17 00:00:00 2001 From: Lukas Heiligenbrunner Date: Tue, 17 Nov 2020 15:26:17 +0100 Subject: [PATCH 8/8] two modes if no humidity sensor available --- src/Heating.cpp | 110 ++++++++++++++++++++++++++++++++---------------- src/Heating.h | 5 ++- src/main.cpp | 2 +- 3 files changed, 78 insertions(+), 39 deletions(-) diff --git a/src/Heating.cpp b/src/Heating.cpp index febaec2..d8082d6 100644 --- a/src/Heating.cpp +++ b/src/Heating.cpp @@ -5,46 +5,82 @@ #include "Heating.h" #include "Pins.h" -void Heating::init(Temperature *tempsensor) { - mFanWaiting = false; +void Heating::init(Temperature *tempsensor, unsigned mode) { + switch (mode) { + case TIME: { + const unsigned percentOn = 20; + const unsigned refreshperiod = 60; - mHeizungTicker.attach(10, [&tempsensor, this]() { - // shedule this function because tempread is blocking - schedule_function([this, &tempsensor](){ - // check temperature - Serial.println("checking humidity"); - const float hum = tempsensor->getHum(); - if (hum == -1) return; - - Serial.print("humidity read: "); - Serial.println(hum); - - if (hum > 65.0) { - // turn off active turnoff timers + const auto func = [this]() { mLuefterTicker.detach(); - Serial.println("heating should run now!"); - // turn on heating and fan + + // every minute turn on the heating digitalWrite(LuefterPin, HIGH); digitalWrite(HeizungPin, HIGH); - // if fan waiting detach its ticker - if (mFanWaiting) { - mLuefterTicker.detach(); - mFanWaiting = false; - } - } else if (hum < 60.0) { - // if humidity too low turn off heating and fan after 60secs - digitalWrite(HeizungPin, LOW); - Serial.println("heating should NOT run now!"); - if (!mFanWaiting) { - mFanWaiting = true; - mLuefterTicker.once(60, []() { - // turn off fan - digitalWrite(LuefterPin, LOW); - Serial.println("turning off fan"); - }); - } - } - }); - }); + Serial.println("Turning on heating"); + + mTurnOffTicker.once(refreshperiod * percentOn / 100, []() { + digitalWrite(HeizungPin, LOW); + + Serial.println("Turned off heating!"); + }); + + mLuefterTicker.once((refreshperiod * percentOn / 100) + 30, []() { + digitalWrite(LuefterPin, LOW); + + Serial.println("Turned off fan!"); + }); + }; + + func(); + mHeizungTicker.attach(60, func); + break; + } + case HUMIDITY: + mFanWaiting = false; + + mHeizungTicker.attach(10, [&tempsensor, this]() { + // shedule this function because tempread is blocking + schedule_function([this, &tempsensor]() { + // check temperature + Serial.println("checking humidity"); + const float hum = tempsensor->getHum(); + if (hum == -1) return; + + Serial.print("humidity read: "); + Serial.println(hum); + + if (hum > 65.0) { + // turn off active turnoff timers + mLuefterTicker.detach(); + Serial.println("heating should run now!"); + // turn on heating and fan + digitalWrite(LuefterPin, HIGH); + digitalWrite(HeizungPin, HIGH); + + // if fan waiting detach its ticker + if (mFanWaiting) { + mLuefterTicker.detach(); + mFanWaiting = false; + } + } else if (hum < 60.0) { + // if humidity too low turn off heating and fan after 60secs + digitalWrite(HeizungPin, LOW); + Serial.println("heating should NOT run now!"); + if (!mFanWaiting) { + mFanWaiting = true; + mLuefterTicker.once(60, []() { + // turn off fan + digitalWrite(LuefterPin, LOW); + Serial.println("turning off fan"); + }); + } + } + }); + }); + break; + default: + break; + } } diff --git a/src/Heating.h b/src/Heating.h index 7bacbe8..42befbc 100644 --- a/src/Heating.h +++ b/src/Heating.h @@ -9,10 +9,13 @@ class Heating { public: - void init(Temperature* tempsensor); + void init(Temperature* tempsensor, unsigned mode); + + enum MODES {TIME, HUMIDITY}; private: Ticker mHeizungTicker; Ticker mLuefterTicker; + Ticker mTurnOffTicker; bool mFanWaiting; }; diff --git a/src/main.cpp b/src/main.cpp index 964ca6a..37f9b9a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -189,7 +189,7 @@ void setup() { mang.init(&temp); Serial.println("initializing heating service"); - mHeat.init(&temp); + mHeat.init(&temp, Heating::TIME); Serial.println("startup sequence complete!\n"); digitalWrite(LED_BUILTIN, HIGH);