use a non blocking dht22 library
This commit is contained in:
parent
5943ffc97b
commit
f2138d2378
@ -10,7 +10,7 @@ set(CMAKE_SYSTEM_NAME Generic)
|
|||||||
set(CMAKE_C_COMPILER_WORKS 1)
|
set(CMAKE_C_COMPILER_WORKS 1)
|
||||||
set(CMAKE_CXX_COMPILER_WORKS 1)
|
set(CMAKE_CXX_COMPILER_WORKS 1)
|
||||||
|
|
||||||
project("PumpenSteuerung" C CXX)
|
project("pumpensteuerung" C CXX)
|
||||||
|
|
||||||
include(CMakeListsPrivate.txt)
|
include(CMakeListsPrivate.txt)
|
||||||
|
|
||||||
|
@ -12,8 +12,7 @@
|
|||||||
platform = espressif8266
|
platform = espressif8266
|
||||||
board = esp07
|
board = esp07
|
||||||
framework = arduino
|
framework = arduino
|
||||||
|
|
||||||
lib_deps =
|
lib_deps =
|
||||||
SPI
|
SPI
|
||||||
Wire
|
Wire
|
||||||
DHT sensor library
|
bertmelis/DHT@1.0.1
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
#include "Heating.h"
|
#include "Heating.h"
|
||||||
#include "Pins.h"
|
#include "Pins.h"
|
||||||
|
|
||||||
void Heating::init(Temperature *tempsensor, unsigned mode) {
|
void Heating::init(unsigned mode) {
|
||||||
switch (mode) {
|
switch (mode) {
|
||||||
case TIME: {
|
case TIME: {
|
||||||
const unsigned percentOn = 20;
|
const unsigned percentOn = 20;
|
||||||
@ -40,18 +40,17 @@ void Heating::init(Temperature *tempsensor, unsigned mode) {
|
|||||||
case HUMIDITY:
|
case HUMIDITY:
|
||||||
mHeatingStatus = false;
|
mHeatingStatus = false;
|
||||||
|
|
||||||
mHeizungTicker.attach(10, [&tempsensor, this]() {
|
sensor.setPin(TempSensorPin);
|
||||||
// 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: ");
|
sensor.onData([this](float hum, float temp) {
|
||||||
Serial.println(hum);
|
schedule_function([hum, temp, this]() {
|
||||||
|
Serial.printf("Temp: %gdegC\n", temp);
|
||||||
|
Serial.printf("Humid: %g%%\n", hum);
|
||||||
|
|
||||||
if (hum > 65.0) {
|
this->lasttemp = temp;
|
||||||
|
this->lasthum = hum;
|
||||||
|
|
||||||
|
if (hum > 70.0) {
|
||||||
// turn off active turnoff timers
|
// turn off active turnoff timers
|
||||||
mLuefterTicker.detach();
|
mLuefterTicker.detach();
|
||||||
Serial.println("heating should run now!");
|
Serial.println("heating should run now!");
|
||||||
@ -59,7 +58,7 @@ void Heating::init(Temperature *tempsensor, unsigned mode) {
|
|||||||
digitalWrite(LuefterPin, HIGH);
|
digitalWrite(LuefterPin, HIGH);
|
||||||
digitalWrite(HeizungPin, HIGH);
|
digitalWrite(HeizungPin, HIGH);
|
||||||
mHeatingStatus = true;
|
mHeatingStatus = true;
|
||||||
} else if (hum < 60.0) {
|
} else if (hum < 65.0) {
|
||||||
// if humidity too low turn off heating and fan after 60secs
|
// if humidity too low turn off heating and fan after 60secs
|
||||||
digitalWrite(HeizungPin, LOW);
|
digitalWrite(HeizungPin, LOW);
|
||||||
Serial.println("heating should NOT run now!");
|
Serial.println("heating should NOT run now!");
|
||||||
@ -69,15 +68,47 @@ void Heating::init(Temperature *tempsensor, unsigned mode) {
|
|||||||
mLuefterTicker.once(60, []() {
|
mLuefterTicker.once(60, []() {
|
||||||
// turn off fan
|
// turn off fan
|
||||||
digitalWrite(LuefterPin, LOW);
|
digitalWrite(LuefterPin, LOW);
|
||||||
|
schedule_function([]() {
|
||||||
Serial.println("turning off fan");
|
Serial.println("turning off fan");
|
||||||
});
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
mHeatingStatus = false;
|
mHeatingStatus = false;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
sensor.onError([this](uint8_t e) {
|
||||||
|
this->lasttemp = -1.0;
|
||||||
|
this->lasthum = -1.0;
|
||||||
|
|
||||||
|
schedule_function([e]() {
|
||||||
|
Serial.printf("Error: %d\n", e);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
mHeizungTicker.attach(10, [this]() {
|
||||||
|
sensor.read();
|
||||||
|
});
|
||||||
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
float *Heating::getLastTemp() {
|
||||||
|
return &lasttemp;
|
||||||
|
}
|
||||||
|
|
||||||
|
float *Heating::getLastHum() {
|
||||||
|
return &lasthum;
|
||||||
|
}
|
||||||
|
|
||||||
|
Heating::Heating() : mHeizungTicker(),
|
||||||
|
mLuefterTicker(),
|
||||||
|
mTurnOffTicker(),
|
||||||
|
mHeatingStatus(),
|
||||||
|
lasttemp(0),
|
||||||
|
lasthum(0),
|
||||||
|
sensor() {}
|
||||||
|
@ -5,11 +5,17 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <Ticker.h>
|
#include <Ticker.h>
|
||||||
#include "Temperature.h"
|
#include <DHT.h>
|
||||||
|
#include "Pins.h"
|
||||||
|
|
||||||
class Heating {
|
class Heating {
|
||||||
public:
|
public:
|
||||||
void init(Temperature* tempsensor, unsigned mode);
|
Heating();
|
||||||
|
|
||||||
|
void init(unsigned mode);
|
||||||
|
|
||||||
|
float* getLastHum();
|
||||||
|
float* getLastTemp();
|
||||||
|
|
||||||
enum MODES {TIME, HUMIDITY};
|
enum MODES {TIME, HUMIDITY};
|
||||||
private:
|
private:
|
||||||
@ -18,4 +24,9 @@ private:
|
|||||||
Ticker mTurnOffTicker;
|
Ticker mTurnOffTicker;
|
||||||
|
|
||||||
bool mHeatingStatus;
|
bool mHeatingStatus;
|
||||||
|
|
||||||
|
float lasttemp;
|
||||||
|
float lasthum;
|
||||||
|
|
||||||
|
DHT22 sensor;
|
||||||
};
|
};
|
||||||
|
@ -1,29 +0,0 @@
|
|||||||
//
|
|
||||||
// Created by lukas on 22.08.20.
|
|
||||||
//
|
|
||||||
|
|
||||||
#include "Temperature.h"
|
|
||||||
|
|
||||||
void Temperature::init() {
|
|
||||||
dht.begin();
|
|
||||||
}
|
|
||||||
|
|
||||||
float Temperature::getTemp() {
|
|
||||||
float temp = dht.readTemperature();
|
|
||||||
Serial.println("read temp is: " + String(temp));
|
|
||||||
if (isnan(temp)) {
|
|
||||||
return -1;
|
|
||||||
} else {
|
|
||||||
return temp;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
float Temperature::getHum() {
|
|
||||||
float hum = dht.readHumidity();
|
|
||||||
Serial.println("read hum is: " + String(hum));
|
|
||||||
if (isnan(hum)) {
|
|
||||||
return -1;
|
|
||||||
} else {
|
|
||||||
return hum;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,34 +0,0 @@
|
|||||||
//
|
|
||||||
// Created by lukas on 22.08.20.
|
|
||||||
//
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <Adafruit_Sensor.h>
|
|
||||||
#include <DHT.h>
|
|
||||||
#include "Pins.h"
|
|
||||||
|
|
||||||
class Temperature {
|
|
||||||
public:
|
|
||||||
Temperature() : dht(TempSensorPin, DHT22){};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* initialize the temperature sensor
|
|
||||||
*/
|
|
||||||
void init();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* read the temperature value in C
|
|
||||||
* @return float value of temperature
|
|
||||||
*/
|
|
||||||
float getTemp();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* read current humidity value in %
|
|
||||||
* @return float value of humidity
|
|
||||||
*/
|
|
||||||
float getHum();
|
|
||||||
|
|
||||||
private:
|
|
||||||
DHT dht;
|
|
||||||
};
|
|
@ -6,7 +6,10 @@
|
|||||||
#include "WifiManager.h"
|
#include "WifiManager.h"
|
||||||
#include "Pins.h"
|
#include "Pins.h"
|
||||||
|
|
||||||
void WifiManager::init(Temperature* tempsensor) {
|
void WifiManager::init(float* hum, float* temp) {
|
||||||
|
this->hum = hum;
|
||||||
|
this->temp = temp;
|
||||||
|
|
||||||
Serial.print("Setting up Access Point");
|
Serial.print("Setting up Access Point");
|
||||||
// start softap
|
// start softap
|
||||||
const bool result = WiFi.softAP("PumpenSteuerung-Heiligenbrunner", "1qayxsw2");
|
const bool result = WiFi.softAP("PumpenSteuerung-Heiligenbrunner", "1qayxsw2");
|
||||||
@ -31,9 +34,6 @@ void WifiManager::init(Temperature* tempsensor) {
|
|||||||
} else {
|
} else {
|
||||||
Serial.println("Wifi Setup failed!");
|
Serial.println("Wifi Setup failed!");
|
||||||
}
|
}
|
||||||
|
|
||||||
// init temperature sensor
|
|
||||||
temp = *tempsensor;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
WifiManager::WifiManager() : server(80), lastPumpTime(0), lastWaterOutage(0), lastPumpDuration(0) {}
|
WifiManager::WifiManager() : server(80), lastPumpTime(0), lastWaterOutage(0), lastPumpDuration(0) {}
|
||||||
@ -108,8 +108,8 @@ void WifiManager::handleRoot() {
|
|||||||
index_html += "<div>Drucksensor: " + String((digitalRead(DruckSensorPin) ? "EIN" : "AUS")) + "</div>";
|
index_html += "<div>Drucksensor: " + String((digitalRead(DruckSensorPin) ? "EIN" : "AUS")) + "</div>";
|
||||||
index_html += "<div>Wassersensor: " + String((digitalRead(WasserSensorPin) ? "EIN" : "AUS")) + "</div>";
|
index_html += "<div>Wassersensor: " + String((digitalRead(WasserSensorPin) ? "EIN" : "AUS")) + "</div>";
|
||||||
|
|
||||||
index_html += "</br><div>Temperatur: " + String(this->temp.getTemp()) + "C</div>";
|
index_html += "</br><div>Temperatur: " + String(*temp) + "C</div>";
|
||||||
index_html += "<div>Relative Luftfeuchtigkeit: " + String(this->temp.getHum()) + "%</div>";
|
index_html += "<div>Relative Luftfeuchtigkeit: " + String(*hum) + "%</div>";
|
||||||
|
|
||||||
index_html += "</body></html>";
|
index_html += "</body></html>";
|
||||||
|
|
||||||
@ -171,7 +171,3 @@ void WifiManager::setlastWaterOutage(unsigned long lastWaterOutage) {
|
|||||||
void WifiManager::setPumpDuration(unsigned long lastPumpDuration) {
|
void WifiManager::setPumpDuration(unsigned long lastPumpDuration) {
|
||||||
this->lastPumpDuration = lastPumpDuration;
|
this->lastPumpDuration = lastPumpDuration;
|
||||||
}
|
}
|
||||||
|
|
||||||
Temperature *WifiManager::getTemperatureSensor() {
|
|
||||||
return &temp;
|
|
||||||
}
|
|
||||||
|
@ -7,7 +7,6 @@
|
|||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include <ESP8266WiFi.h>
|
#include <ESP8266WiFi.h>
|
||||||
#include <ESP8266WebServer.h>
|
#include <ESP8266WebServer.h>
|
||||||
#include "Temperature.h"
|
|
||||||
|
|
||||||
class WifiManager {
|
class WifiManager {
|
||||||
public:
|
public:
|
||||||
@ -16,7 +15,7 @@ public:
|
|||||||
/**
|
/**
|
||||||
* initialize the webserver
|
* initialize the webserver
|
||||||
*/
|
*/
|
||||||
void init(Temperature* tempsensor);
|
void init(float* hum, float* temp);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* handles new web requests and holds the webserver alive
|
* handles new web requests and holds the webserver alive
|
||||||
@ -48,12 +47,9 @@ public:
|
|||||||
*/
|
*/
|
||||||
void setPumpDuration(unsigned long lastPumpDuration);
|
void setPumpDuration(unsigned long lastPumpDuration);
|
||||||
|
|
||||||
Temperature* getTemperatureSensor();
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
ESP8266WebServer server;
|
ESP8266WebServer server;
|
||||||
Temperature temp;
|
|
||||||
|
|
||||||
void handleRoot();
|
void handleRoot();
|
||||||
|
|
||||||
@ -62,4 +58,7 @@ private:
|
|||||||
void handleGet();
|
void handleGet();
|
||||||
|
|
||||||
unsigned long lastPumpTime, lastWaterOutage, lastPumpDuration;
|
unsigned long lastPumpTime, lastWaterOutage, lastPumpDuration;
|
||||||
|
|
||||||
|
float* hum;
|
||||||
|
float* temp;
|
||||||
};
|
};
|
||||||
|
20
src/main.cpp
20
src/main.cpp
@ -1,12 +1,10 @@
|
|||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include <Ticker.h>
|
#include <Ticker.h>
|
||||||
#include <EEPROM.h>
|
|
||||||
|
|
||||||
#include "WifiManager.h"
|
#include "WifiManager.h"
|
||||||
#include "Heating.h"
|
#include "Heating.h"
|
||||||
|
|
||||||
#include "Pins.h"
|
#include "Pins.h"
|
||||||
#include "Temperature.h"
|
|
||||||
|
|
||||||
#define VERSION "v1.1.1"
|
#define VERSION "v1.1.1"
|
||||||
|
|
||||||
@ -26,7 +24,6 @@ Ticker pumpendauer;
|
|||||||
|
|
||||||
WifiManager mang;
|
WifiManager mang;
|
||||||
Heating mHeat;
|
Heating mHeat;
|
||||||
Temperature temp;
|
|
||||||
|
|
||||||
long turnontime = -1;
|
long turnontime = -1;
|
||||||
|
|
||||||
@ -151,7 +148,7 @@ void setup() {
|
|||||||
digitalWrite(HeizungPin, LOW);
|
digitalWrite(HeizungPin, LOW);
|
||||||
|
|
||||||
// initilize serial connection
|
// initilize serial connection
|
||||||
Serial.begin(9600);
|
Serial.begin(115200);
|
||||||
Serial.println("\n\n\n\nstartup of ESP");
|
Serial.println("\n\n\n\nstartup of ESP");
|
||||||
Serial.print("Version: ");
|
Serial.print("Version: ");
|
||||||
Serial.println(VERSION);
|
Serial.println(VERSION);
|
||||||
@ -176,18 +173,13 @@ void setup() {
|
|||||||
attachInterrupt(digitalPinToInterrupt(WasserSensorPin), WasserSensorInt, CHANGE);
|
attachInterrupt(digitalPinToInterrupt(WasserSensorPin), WasserSensorInt, CHANGE);
|
||||||
|
|
||||||
|
|
||||||
// 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);
|
|
||||||
|
|
||||||
// initialize heating control
|
// initialize heating control
|
||||||
Serial.println("initializing heating service");
|
Serial.println("initializing heating service");
|
||||||
mHeat.init(&temp, Heating::HUMIDITY);
|
mHeat.init(Heating::HUMIDITY);
|
||||||
|
|
||||||
|
// initialize wifi
|
||||||
|
Serial.println("Initializing wifi");
|
||||||
|
mang.init(mHeat.getLastHum(), mHeat.getLastTemp());
|
||||||
|
|
||||||
Serial.println("startup sequence complete!\n");
|
Serial.println("startup sequence complete!\n");
|
||||||
digitalWrite(LED_BUILTIN, HIGH);
|
digitalWrite(LED_BUILTIN, HIGH);
|
||||||
|
Loading…
Reference in New Issue
Block a user