#include "WiFi.h"
#include "time.h"
#include "Adafruit_AHTX0.h"
#include "DHT.h"
#include "Adafruit_BMP280.h"
char Router[] = "Router_SSID";
char Passwort[] = "xxxxxxxx";
// NTP-Server aus dem Pool
#define Zeitserver "de.pool.ntp.org"
/*
Liste der Zeitzonen
https://github.com/nayarsystems/posix_tz_db/blob/master/zones.csv
Zeitzone CET = Central European Time -1 -> 1 Stunde zurück
CEST = Central European Summer Time von
M3 = März, 5.0 = Sonntag 5. Woche, 02 = 2 Uhr
bis M10 = Oktober, 5.0 = Sonntag 5. Woche 03 = 3 Uhr
*/
#define Zeitzone "CET-1CEST,M3.5.0/02,M10.5.0/03"
// time_t enthält die Anzahl der Sekunden seit dem 1.1.1970 0 Uhr
time_t aktuelleZeit;
/*
Struktur tm
tm_hour -> Stunde: 0 bis 23
tm_min -> Minuten: 0 bis 59
tm_sec -> Sekunden 0 bis 59
tm_mday -> Tag 1 bis 31
tm_mon -> Monat: 0 (Januar) bis 11 (Dezember)
tm_year -> Jahre seit 1900
tm_yday -> vergangene Tage seit 1. Januar des Jahres
tm_isdst -> Wert > 0 = Sommerzeit (dst = daylight saving time)
*/
tm Zeit;
WiFiServer Server(80);
WiFiClient Client;
// Aktualisierungs-Intervall
unsigned long Intervall = 60000;
// Pin des DHT-Sensors
int SENSOR_DHT = 15;
// Sensortyp festlegen
// DHT22 oder DHT11
#define SensorTyp DHT22
// Sensor DHT einen Namen zuweisen
DHT dht(SENSOR_DHT, SensorTyp);
// Sensor AHT20 einen Namen zuweisen
Adafruit_AHTX0 aht;
// Sensor BMP280 einen Namen zuweisen
Adafruit_BMP280 bmp;
void setup()
{
Serial.begin(9600);
delay(1000);
// Sensor AHT20 starten
aht.begin();
// Sensor DHT starten
dht.begin();
// Sensor BMP280 starten
bmp.begin();
// WiFi starten
WiFi.begin(Router, Passwort);
// Verbindung herstellen
while (WiFi.status() != WL_CONNECTED)
{
delay(200);
Serial.print(".");
}
// Zeitzone: Parameter für die zu ermittelnde Zeit
configTzTime(Zeitzone, Zeitserver);
// Server starten
Server.begin();
// SSID des Routers anzeigen
Serial.println();
Serial.print("Verbunden mit ");
Serial.println(WiFi.SSID());
// IP anzeigen
Serial.println(WiFi.localIP());
}
void loop()
{
// Sensoren AHT20 definieren
sensors_event_t Luftfeuchtigkeit, Temperatur;
// Daten AHT lesen
aht.getEvent(&Luftfeuchtigkeit, &Temperatur);
String AnzeigeTemperaturAHT = String(Temperatur.temperature);
AnzeigeTemperaturAHT.replace(".", ",");
String AnzeigeLuftfeuchtigkeitAHT = String(Luftfeuchtigkeit.relative_humidity);
AnzeigeLuftfeuchtigkeitAHT.replace(".", ",");
// Daten DHT lesen
String AnzeigeTemperaturDHT = String(dht.readTemperature());
AnzeigeTemperaturDHT.replace(".", ",");
String AnzeigeLuftfeuchtigkeitDHT = String(dht.readHumidity());
AnzeigeLuftfeuchtigkeitDHT.replace(".", ",");
// Daten BMP280 lesen
String AnzeigeTemperaturBMP = String(bmp.readTemperature());
AnzeigeTemperaturBMP.replace(".", ",");
String Luftdruck = String(bmp.readPressure() / 100);
Luftdruck.replace(".", ",");
// Name des verfügbaren Servers
Client = Server.available();
if (Client)
{
// Seite aufbauen wenn SeiteAufbauen true ist
boolean SeiteAufbauen = true;
// solange der Client verbunden ist ...
while (Client.connected())
{
if (Client.available())
{
// Anforderung vom Clienten lesen ...
char Zeichen = Client.read();
// return (\n) gesendet
if (Zeichen == '\n')
{
// wenn SeiteAufbauen den Wert true hat
if (SeiteAufbauen)
{
/*
HTML-Seite aufbauen
die folgenden Anweisungen müssen
mit print oder println gesendet werden
println "verschönert" den Quelltext
(erzeugt einen Zeilenumbruch im Quelltext)
*/
// HTML-Seite aufbauen
Client.println("HTTP/1.1 200 OK");
Client.println("Content-type:text/html");
// Leerzeile zwingend erforderlich
Client.println();
Client.println("<!doctype html>");
Client.println("<html>");
Client.println("<body>");
// alle 60 Sekunden aktualisieren mit meta-Tag
Client.println("<meta http-equiv=\"refresh\" content=\"60\">");
// <h2> Überschrift H2
Client.println("<h2>Temperatur, Luftfeuchtigkeit und Luftdruck anzeigen</h2>");
// <hr> horizontale Linie
Client.println("<hr>");
// aktuelle Zeit holen
time(&aktuelleZeit);
// localtime_r -> Zeit in die lokale Zeitzone setzen
localtime_r(&aktuelleZeit, &Zeit);
Client.print("<b>Datum: </b>");
// Tag: führende 0 ergänzen
if (Zeit.tm_mday < 10) Client.print("0");
Client.print(Zeit.tm_mday);
Client.print(".");
// Monat: führende 0 ergänzen
if (Zeit.tm_mon < 10) Client.print("0");
Client.print(Zeit.tm_mon + 1);
Client.print(".");
// Anzahl Jahre seit 1900
Client.print(Zeit.tm_year + 1900);
Client.print(" ");
Client.print("<b>Zeit: </b>");
// Stunde: wenn Stunde < 10 -> 0 davor setzen
if (Zeit.tm_hour < 10) Client.print("0");
Client.print(Zeit.tm_hour);
Client.print(":");
// Minuten
if (Zeit.tm_min < 10) Client.print("0");
Client.print(Zeit.tm_min);
Client.print(":");
// Sekunden
if (Zeit.tm_sec < 10) Client.print("0");
Client.println(Zeit.tm_sec);
Client.print(" Uhr");
Client.println("<hr>");
// Daten anzeigen
// AHT
Client.println("<b>Temperatur AHT20: </b>");
Client.println("<blockquote>" + AnzeigeTemperaturAHT + " °C</blockquote>");
Client.println("<b>Luftfeuchtigkeit AHT20: </b>");
Client.println("<blockquote>" + AnzeigeLuftfeuchtigkeitAHT + " %</blockquote>");
// DHT
Client.println("<b>Temperatur DHT: </b>");
Client.println("<blockquote>" + AnzeigeTemperaturDHT + " °C</blockquote>");
Client.println("<b>Luftfeuchtigkeit DHT: </b>");
Client.println("<blockquote>" + AnzeigeLuftfeuchtigkeitDHT + " %</blockquote>");
// BMP280
Client.println("<b>Temperatur BMP280: </b>");
Client.println("<blockquote>" + AnzeigeTemperaturBMP + " °C</blockquote>");
Client.println("<b>Luftdruck BMP280 </b><blockquote>" + Luftdruck + " hPa</blockquote>");
Client.println("<hr>");
// Button formatieren
Client.print("<input style=\"font-size:16pt; font-weight:bold;");
Client.print("background-color:#F5FAC9;box-shadow: 2px 2px grey;");
Client.print("display:inline-block; border-radius:10px; cursor:pointer;\"type=\"button\"");
Client.println("onClick=\"location.href='WiFi.localIP()'\" value=\"aktualisieren\">");
Client.println("<hr>");
// IPs anzeigen
Client.print("Eigene IP (Server): ");
Client.println(Client.remoteIP());
// <br> break = neue Zeile
Client.println("<br>IP Adresse Klient DHCP ");
Client.println(WiFi.localIP());
// Seite schließen
Client.println("</body>");
Client.println("</html>");
// HTTP-Antwort endet mit neuer Zeile
Client.println();
// Seite vollständig geladen -> loop verlassen
break;
}
// wenn new line (\n) gesendet wurde -> Seite aufbauen
if (Zeichen == '\n') SeiteAufbauen = true;
else if (Zeichen != '\r') SeiteAufbauen = false;
delay(1);
Client.stop();
}
}
}
}
}
Letzte Aktualisierung: