void loop() { String Auswertung = ""; // Variablen für Temperatur und Luftfeuchtigkeit float Temperatur; float Luftfeuchtigkeit; // auf Clienten warten ... EthernetClient Client = server.available(); // abgelaufene Zeit mit millis() ermitteln unsigned long VerstricheneZeit = millis(); // Zeit messen und Daten speichern, wenn das Zeitintervall erreicht ist if (VerstricheneZeit - StartZeit >= Intervall) { // StartZeit zurücksetzen StartZeit = VerstricheneZeit; // Temperatur, Luftfeuchtigkeit messen Temperatur = dht.readTemperature(); Luftfeuchtigkeit = dht.readHumidity(); // aktuelle Zeit ermitteln DateTime aktuell = rtc.now(); // in Datei speichern Messung = SD.open("Messung.txt", FILE_WRITE); if (Messung) { // Datum schreiben char Datum[] = "DD.MM.YYYY"; Messung.print(aktuell.toString(Datum)); // Zeit schreiben char Zeit[] = " Uhrzeit: hh:mm:ss"; Messung.println(aktuell.toString(Zeit)); // Messdaten schreiben Messung.print(F(" | ")); Messung.println(Temperatur); Messung.print(F(" °C | ")); Messung.println(Luftfeuchtigkeit); Messung.print(F("%")); Messung.println(F("
")); // Datei schließen Messung.close(); } } // neue Anfrage if (Client) { // solange der Client verbunden ist ... while (Client.connected()) { if (Client.available()) { char Zeichen = Client.read(); /* einegegebene Zeichen zum String zusammensetzen der String enthält eines der Zeichen (l, s, e) Beispiel lesen: GET /l HTTP/1.1 */ Auswertung += Zeichen; // \n =return: Seite vom Clienten vollständig geladen if (Zeichen == '\n') { // HTTP-Anforderung senden Client.println(F("HTTP/1.1 200 OK")); Client.println(F("Content-Type: text/html")); // Leerzeile zwingend erforderlich Client.println(); /* HTML-Seite aufbauen die folgenden Anweisungen müssen mit print oder println gesendet werden println "verschönert" den Quelltext (jede Anweisung in einer eigenen Zeile) */ Client.println(F("")); Client.println(F("")); Client.println(F("")); // String Auswertung lesen // indexOf -> Vorhandensein eines Zeichens prüfen // Daten speichern if (Auswertung.indexOf("s") > 0) { Temperatur = dht.readTemperature(); Luftfeuchtigkeit = dht.readHumidity(); DateTime aktuell = rtc.now(); Messung = SD.open("Messung.txt", FILE_WRITE); // wenn die Datei vorhanden ist if (Messung) { char Datum[] = "DD.MM.YYYY"; Messung.print(aktuell.toString(Datum)); // Zeit schreiben char Zeit[] = " Uhrzeit: hh:mm:ss"; Messung.println(aktuell.toString(Zeit)); Messung.print(F(" | ")); // Temperatur und Luftfeuchtigkeit schreiben Messung.println(Temperatur); Messung.print(F(" °C | ")); Messung.println(Luftfeuchtigkeit); Messung.print(F("%")); Messung.println(F("
")); // Datei schließen Messung.close(); } } // Datei lesen if (Auswertung.indexOf("l") > 0) { Messung = SD.open("Messung.txt"); if (Messung) { // solange sich Zeilen in der Datei befinden ... while (Messung.available()) { // ... werden sie gelesen und auf der Webseite ausgegeben Client.write(Messung.read()); } // Datei schließen Messung.close(); } } // Zeitintervall der Messungen anzeigen Client.println(F("
")); Client.println(F("Intervall: ")); Client.println(Minuten); Client.println(F("Minuten
")); Client.println(F("
")); // Button anzeigen Client.print(F("")); Client.print(F("")); Client.println(F("
")); // IPs anzeigen Client.print(F("Eigene IP: ")); Client.print(Client.remoteIP()); Client.print(F("
IP des Ethernet-Shields: ")); Client.print(Ethernet.localIP()); Client.println(F("")); Client.println(F("")); // Zeit, um die Antwort zu übertragen delay(1); // Verbindung beenden Client.stop(); } } } } }