Gewächshaus Temperaturüberwachen mit ESP8266 Heute möchte ich euch nach längerer Zeit ein neues Projekt vorstellen.Ich wollte die Temperatur in meinem Gewächshaus messen und mit ein Push Mail schicken lassen wenn die Temperatur zu hoch oder zu niedrig ist. Den wenn die Temperatur zu hoch im Gewächshaus ist, gehen die Pflanzen kaputt und ist die Temperatur zu niedrig ist das auch nicht gut. Des Weiteren kann die Temperatur über eine Webseite angezeigt werden.
Der Aufbau
Der Aufbau ist recht einfach, ich habe einen Wemos D1 mini pro v2.0 genommen und diese mit einem Temperatursensor SHT30 (auch von Wemos) verbunden. Die Bauteile haben eine praktische I2C Schnittstelle die mit einem Kabel einfach verbunden werden kann. Man braucht nichts zu loten oder Ähnliches. Das ganze wird dann noch mit einer Batterie und einer kleinen Solarzelle angeschlossen. Als Batterie habe ist erstmal ein18650 genommen, diese werde ich noch durch eine andere ersetzen. Der Stecker für die Batterie ist ein PH-2.
Alternative zum Wemos D1 mini Pro v2.0
Alternative kann der Wemos D1 mini Pro v1.0 genommen werden. Dieser kann dann in einer Sandwich Bauweise übereinander gesteckt werden.
Funktion
Der Wemos D1 mini Pro v2.0 macht alle 10 Minuten eine Messung, dann geht er in den DeepSleep um den Akku zu sparen. Die Messergebnise werden in einer MySQL Datenbank gespeichert. Diese können dann über eine Internetseite abgerufen werden. PHP Daten können hier runtergeladen werden.
Wenn dieTemperatur unter 20 Grad fällt oder über 35 Grad steigt, wird mir ein Email geschickt. Das Postfach muss auf Push Benachrichtigung eingestellt sein, damit man die Mail auch direkt bekommt.
Struktur der Datenbank
Der Programmcode
Um den Deepsleep bei Wemos D1 mini pro v2.0 zu aktivieren gibt es auf der Rückseite ein Lötpad was man nur verbinden muss.(siehe Bild) Beim Wemos D1 mini pro v1.0 muss man den D0 mit dem RST verbinden.
#include <esp8266wifi.h> #include <wemos_sht3x.h> #include <eeprom.h> SHT3X sht30(0x45); const char* ssid = "WLAN-NAME"; // SSID of local network const char* password = "WLAN-PASSWORT"; // Password on network const char* host = "WEBSEITE"; //Webserver WiFiClient client; char servername[] = "WEBSEITE"; // remote server we will connect to String result; float temp; float feucht; int temp1; int temphigh; const int sleepSeconds = 600; void setup() { Serial.begin(115200); Serial.println("Connecting"); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(100); } Serial.println("Connected"); delay(1000); } void loop() { EEPROM.begin(512); temp1 = EEPROM.read(1); temphigh = EEPROM.read(2); // EEPROM wird geprüft ob Daten vorhanden sind die nicht 1 oder 0 sind! // Ist das der Fall wird tempghigh auf 1 gesetzt. if (!(temphigh == 0 || temphigh == 1)) { temphigh = 1; EEPROM.write(2, temphigh); } // Daten aus dem Sensor lesen. if (sht30.get() == 0) { temp = sht30.cTemp; feucht = sht30.humidity; temp1 = temp; EEPROM.write(1, temp1); } String tempString = String(temp, 1); String feuchtString = String(feucht, 1); Serial.println("\nStarting connection to server..."); //Ausgabe ueber serielle Verbindung WiFiClient client; // Temperaturdaten werden über URL Link an die Datenbank übergeben. if (client.connect(host, 80)) { Serial.println("connected to server"); String url = "/ghaus/wm_t1.php"; url += "?t1="; url += temp; client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n"); client.println(); //Verbindungs mit Server aufbauen und HTTP Anfrage senden } // Luftfeuchtigkeitsdaten werden über URL Link an die Datenbank übergeben. if (client.connect(host, 80)) { Serial.println("connected to server"); String url = "/ghaus/wm_f1.php"; url += "?f1="; url += feucht; client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n"); client.println(); //Verbindungs mit Server aufbauen und HTTP Anfrage senden } client.stop(); //Beenden der Verbindung //prüfen ob die Temperatur unter 20 Grad ist und Mail senden. if (temp1 < 20 && temphigh == 1) { temphigh = 0; EEPROM.write(2, temphigh); sendAMail(tempString, feuchtString); } //prüfen ob die Temperatur über 35 Grad ist und Mail senden. if (temp1 > 35 && temphigh == 0) { temphigh = 1; EEPROM.write(2, temphigh); sendAMail(tempString, feuchtString); } EEPROM.commit(); EEPROM.end(); ESP.deepSleep(sleepSeconds * 1000000); } void sendAMail(String temp, String feucht) { if (client.connect(servername, 80)) { //starts client connection, checks for connection Serial.println("connected"); client.println("GET /send_email.php?temperature=" + temp + "&humidity=" + feucht + " HTTP/1.1"); //Send data client.println("Host: bau-es-selbst.info"); client.println("Connection: close"); //close 1.1 persistent connection client.println(); //end of get request } else { Serial.println("connection failed"); //error message if no client connect Serial.println(); } while (client.connected() && !client.available()) delay(1); //waits for data while (client.connected() || client.available()) { //connected or data available char c = client.read(); //gets byte from ethernet buffer result = result + c; } client.stop(); //stop client Serial.println(result); }
Folgende Bauteile wurden verwendet:
1x Wemos I2C Kabel 10cm für LOLIN (WEMOS) SH1.0 4p https://arduino-projekte.info/produkt/wemos-i2c-kabel-10cm/1x Wemos SHT30 Shield Temperatur Feuchtigkeit Sensor https://ap-url.de/wemossht30
1x D1 mini Pro v1.1.0 16MB ESP8266 https://ap-url.de/d1minipro
1x Wemos Lolin D1 mini Pro V2.0 https://ap-url.de/d1miniprov2