Gewächshaus Temperaturüberwachen mit ESP8266

Temperaturüberwachung

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 kann der Wemos D1 mini Pro v1.0 genommen werden. Dieser kann dann in einer Sandwich Bauweise übereinander gesteckt werden.

wemos_sht30

Funktion

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:

Letzte Aktualisierung am 24.10.2020 / Affiliate Links / Bilder von der Amazon Product Advertising API