Guten Tag zusammen,
Nur kurz das Projekt überrissen:
Endziel:
async Webserver mit Temperatur und Luftfeuchtigkeitsanzeige (am besten mit Graph der letzten 24h) bei dem man die Ziel Luftfeuchte und Temperatur einstellen können soll), unabhängig davon soll ein Relaismodul eingeschaltet werden je nachdem ob Geheizt oder die Luftfeuchte erhöht werden soll.
Aktueller Stand:
DHT22 Sensoren sind in einem Array angelegt und lesen Temperatur und Luftfeuchte aus
Webserver läuft und zeigt die aktuellen Werte (bei Aktualisierung) an.
Probleme:
- Wie kann ich am effizientesten alle 1-2 Minuten die aktuellen Werte auslesen und entscheiden ob geheizt/Befeuchtet werden soll ohne das ich die Website jedes mal neu laden muss.
- Direkte Frage hierzu: kann ich in meinen loop auch einfach die Routine (Funktion) zum auslesen der Daten und abspeichern reinschreiben oder kann dies zu Problemen mit server.handleClient(); kommen?
Die DHT Sensoren zeigen eine deutlich zu hohe Temperatur an (2-3 Grad) wie kann ich diese am besten kalibrieren oder soll ich nur einen Offset von den 2-3 Grad einprogrammieren?
Anbei der Absolut schlechte Code von mir (viel zusammenkopiert).
#include <DHT.h>;
#include <WiFiClient.h>
#include <WebServer.h>
#define DHTPIN1 26
#define DHTPIN2 25
#define DHTPIN3 27
#define DHTPIN4 14
DHT dht[] = {
{DHTPIN1, DHT22},
{DHTPIN2, DHT22},
{DHTPIN3, DHT22},
{DHTPIN4, DHT22},
};
// Replace with your network credentials
const char* ssid = "--------------";
const char* password = "-----------";
WebServer server(80);
String header;
float humidity[4];
float temperature[4];
const char INDEX_HTML_Start[] =
"<!DOCTYPE HTML>"
"<html>"
"<head>"
"<meta name = \"viewport\" content = \"width = device-width, initial-scale = 1.0, maximum-scale = 1.0, user-scalable=0\">"
"<title>Pflanzenvitrine</title>"
"<style>"
"\"body { background-color: #000000; font-family: Arial, Helvetica, Sans-Serif; Color: #FFFFFF; }\""
"</style>"
"</head>"
"<body>"
;
const char INDEX_HTML_End[] =
"</body>"
"</html>";
void handleRoot() {
String test = String(INDEX_HTML_Start) + "<br>"
+ String("<h1>Temperatur:</h1>") + "<br>"
+ String("Temperatur1: ") + String(temperature[0]) + "<br>"
+ String("Temperatur2: ") + String(temperature[1]) + "<br>"
+ String("Temperatur3: ") + String(temperature[2]) + "<br>"
+ String("Temperatur4: ") + String(temperature[3]) + "<br>"
+ String("<h1>Luftfeuchte:</h1>") + "<br>"
+ String("Luftfeuchtigkeit1: ") + String(humidity[0]) + "<br>"
+ String("Luftfeuchtigkeit2: ") + String(humidity[1]) + "<br>"
+ String("Luftfeuchtigkeit3: ") + String(humidity[2]) + "<br>"
+ String("Luftfeuchtigkeit4: ") + String(humidity[3]) + "<br>"
+ String(INDEX_HTML_End);
server.send(200, "text/html", test);
}
void sensorRead() {
for (int i = 0; i < 4; i++) {
temperature[i] = dht[i].readTemperature();
humidity[i] = dht[i].readHumidity();
}
}
void setup()
{
Serial.begin(115200);
// Per WLAN mit dem Netzwerk verbinden
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(3000);
Serial.print(".");
}
// Sensor Begin für DHT22 Sensoren
for (auto& sensor : dht) {
sensor.begin();
}
// Die IP vom Webserver auf dem seriellen Monitor ausgeben
Serial.println("");
Serial.println("WLAN verbunden.");
Serial.println("IP Adresse: ");
Serial.println(WiFi.localIP());
server.begin();
server.on("/", handleRoot);
}
void loop()
{
server.handleClient();
// sensorRead();
// for (int i = 0; i < 4; i++) {
// Serial.print(F("Temperature "));
// Serial.print(i);
// Serial.print(" ");
// Serial.println(temperature[i]);
// Serial.print(F("Humidity "));
// Serial.print(i);
// Serial.print(" ");
// Serial.println(humidity[i]);
}
Vielen Dank für eure Hilfe!