#include <Wire.h>        // Laden der notwendigen libraries
#include <SPI.h>
#include <Ethernet.h>
 #include <LiquidCrystal_I2C.h> // Vorher hinzugefügte LiquidCrystal_I2C Bibliothek hochladen
LiquidCrystal_I2C lcd(0x27, 20, 4);  //Hier wird das Display benannt (Adresse/Zeichen pro Zeile/Anzahl Zeilen). In unserem Fall „lcd“. Die Adresse des I²C Displays kann je nach Modul variieren.

#include "cactus_io_BME280_I2C.h"
// erzeugt BME280 object 
BME280_I2C bme; // I2C using address 0x77 
int p = 0;
int h = 0;
int t = 0;

//SERVERDATEN
byte mac[] = {
 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };  // MAC Adresse des Arduino Boards  !WICHTIG! MAC Adresse darf nur einmal im Heimnetz vorkommen

byte ip[] = {
 192, 168, 178, 90 };      // IP Adresse des Arduino Boards  !WICHTIG!  
                           // Die IP Adresse muss manuell im Netzwerk vergeben werden, http://192.168.178.90
byte gateway[] = {
 192, 168,178, 1 };       // Gateway Fritzbox !WICHTIG! Auszulesen über Start -> "cmd" -> "ipconfig" -> Standardgateway
byte subnet[] = {
 255, 255, 255, 0 };      // Subnet Maske (optional)


EthernetServer server(80);    // Port Einstellung (Standard für HTML : 80)

void setup() {
// LCD ANFANG
  lcd.init(); //Im Setup wird der LCD gestartet
lcd.backlight(); //Hintergrundbeleuchtung einschalten (0 schaltet die Beleuchtung aus).
 // LCD ENDE
   Serial.begin(28800);
  Serial.println("Bosch BME280 Pressure - Humidity - Temp Sensor | cactus.io");
if (!bme.begin()) {
Serial.println("Could not find a valid BME280 sensor, check wiring!");
while (1);
}
bme.setTempCal(-1);// Temp was reading high so subtract 1 degree 

Serial.println("Pressure\tHumdity\t\tTemp\ttTemp");
  
    Wire.begin();       // I2C als Master-BUS
    Ethernet.begin(mac, ip);    // Ethernet initialisieren
    server.begin();     // Auf Clients warten
}


void loop() {
 float p = bme.getPressure_MB(); //Luftdruck auslesen
 float h = bme.getHumidity();     //Luftfeuchte auslesen
 float t = bme.getTemperature_C();  //Temperatur auslesen 
   //Sensor
bme.readSensor();

Serial.print(bme.getPressure_MB()); Serial.print(" mb\t"); // Luftdruckin millibar
Serial.print(bme.getHumidity()); Serial.print(" %\t\t");
Serial.print(bme.getTemperature_C()); Serial.print(" *C\t");
Serial.print(bme.getTemperature_F()); Serial.println(" *F");

 //anfang LCD
lcd.setCursor(0,0); //Text soll beim ersten Zeichen in der ersten Reihe beginnen..
lcd.print("   ");
lcd.print("UMWELTDATEN");//Luftdruck Anzeige
lcd.print("   ");

lcd.setCursor(0,1); //Genauso geht es bei den weiteren drei Zeilen weiter
lcd.print("Luftdruck");//Luftfeuchte Anzeige
lcd.print(" ");
lcd.print(p);
lcd.print("");
lcd.print("hPa");

lcd.setCursor(0,2);
lcd.print("Luftfeuchte");//Temperatur Anzeige
lcd.print("  ");
lcd.print(h);
lcd.print(" ");
lcd.print("%");


lcd.setCursor(0,3);
lcd.print("Temperatur");//Luftqualität
lcd.print(" ");
lcd.print(t);
lcd.print(" ");
lcd.print("*C");

//ende LCD
// Add a 2 second delay. 
delay(2000); //just here to slow down the output. 
   
   EthernetClient client = server.available(); //Prüfen, ob Client Seite aufruft                                             
      if (client){
      
     // Seitenaufruf durch User                                                                      
// Ausgabe String


// Ausgabe in HTML
server.print("HTTP/1.0 200 OK\r\nServer: arduino\r\nContent-Type: text/html\r\n\r\n");
server.print("<HTML><HEAD><TITLE>");
server.print("Wetterstation");
server.print("</TITLE>");
server.print("</HEAD><BODY>");
server.print("<center><font size=7><b>Wetter in Linz</b></font>");
server.print("<center><font size=5><b>Luftdruck &nbsp; &nbsp;  </font>");
server.print(bme.getPressure_MB());           // Ausgabe der Luftdruck                                                          
server.print("<font size=5> &nbsp;  hPa. </font");
server.print("<br>");
server.print("<center><font size=5><b>Luffeuchte &nbsp;  &nbsp;  &nbsp; </font>");
server.print(bme.getHumidity());           // Ausgabe der Luftfeuchte                                                          
server.print("<font size=5>  &nbsp; % </font");
server.print("<br>");
server.print("<center><font size=5><b>Temperatur  &nbsp; &nbsp; </font>");
server.print(bme.getTemperature_C());   
server.print("<font size=5> &nbsp;  *C</font");  
       delay(500);      // Kurzer Delay, um Daten zu senden                                                                             
       client.stop();              // Verbindung mit dem Client trennen                                                         
 }

}