Titel 1

Titel 2

Titel 3

...in Kürze...

Source Code => HTML Test



#include <ESP8266WebServer.h>
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include <WiFiUdp.h>
// #include <ESP8266WiFi.h>

#define SEALEVELPRESSURE_HPA (1013.25)

/* BME280 Sensor Objekt definieren */
Adafruit_BME280 bme;
float temperature, humidity, pressure, altitude;  // BME280 Werte

/*Put your SSID & Password*/
const char* ssid = "**********";                  // Enter SSID here
const char* password = "****************";        // Enter Password here

ESP8266WebServer server(80);                      // ESP Webserver Objekt definieren
String clientIP;                                  // Remote / ClientIP 
unsigned long countServerConnects = 0;            // Server Aufrufe zählen


/* ################################### */
/* NTP Libraries, constans and globals */
/* ################################### */

WiFiUDP UDP;                                      // WiFi UDP Objekt definieren

IPAddress NTPServerIP;                            // IP Adresse für den Zeitserver
String NTPServerStr;                              // String für NTPServerIP
const char* NTPServerName = "time.nist.gov";      // time.nist.gov als Zeitserver verwenden

const int NTP_PACKET_SIZE = 48;                    // Zeitcode befindet sich in den ersten 48 Bytes
byte NTPBuffer[NTP_PACKET_SIZE];                  // Puffer für NTP Packete

unsigned long intervalNTP = 60000;                // request NTP time every minute
unsigned long prevNTP = 0;                        // Zeit vorheriger NTP Abfrage
unsigned long lastNTPResponse = millis();         // letzte NTP Zeitabfrage
unsigned long prevActualTime = 0;                 //
unsigned long timeCET;

uint32_t timeUNIX = 0;

/* ################################### */



/* ########## */
/* VOID SETUP */
/* ########## */
void setup() {
  
  Serial.begin(115200);
  delay(100);

  bme.begin(0x76);                                // Sensor Adress (Jumper / Lötbrücken)

  Serial.println("Connecting to ");
  Serial.println(ssid);

  //connect to your local wi-fi network
  WiFi.begin(ssid, password);
  // WiFi.printDiag(Serial);
  
  //check wi-fi is connected to wi-fi network
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");
  }
  
  Serial.println("");
  Serial.println("WiFi connected..!");
  Serial.print("Got IP: ");  Serial.println(WiFi.localIP());

  server.on("/", handle_OnConnect);
  server.onNotFound(handle_NotFound);

  server.begin();
  Serial.println("HTTP server started");

  /* NTP */

  startUDP();

  if (!WiFi.hostByName(NTPServerName, NTPServerIP)) {
    Serial.println("DNS lookup failed!");
    Serial.flush();
    ESP.reset();
  }

  Serial.print("Time server IP:\t");
  Serial.println(NTPServerIP);
  NTPServerStr = NTPServerIP.toString();          //IP Adresse als String speichern

  Serial.println("\r\nSending NTP request ...");
  sendNTPpacket(NTPServerIP);
}


/* ######### */
/* VOID LOOP */
/* ######### */
void loop() {
  server.handleClient();                          // auf Client Anfragen warten

  /* NTP Loop */
  unsigned long currentMillis = millis();

  if (currentMillis - prevNTP > intervalNTP) {
    prevNTP = currentMillis;
    Serial.println("\r\nSending NTP request ...");
    sendNTPpacket(NTPServerIP);
  }

  uint32_t time = getTime();                      // Check if an NTP response has arrived and get the (UNIX) time
  if (time) {                                      // If a new timestamp has been received
    timeUNIX = time;
    Serial.print("NTP response:\t");
    Serial.println(timeUNIX);
    lastNTPResponse = currentMillis;
  } else if ((currentMillis - lastNTPResponse) > 3600000) {
    Serial.println("More than 1 hour since last NTP response. Rebooting.");
    Serial.flush();
    ESP.reset();
  }

  uint32_t actualTime = timeUNIX + (currentMillis - lastNTPResponse)/1000;
  if (actualTime != prevActualTime && timeUNIX != 0) {
                                                  // If a second has passed since last print
    prevActualTime = actualTime;
    timeCET = actualTime + 7200;
    Serial.printf("\rUTC time:\t%02d:%02d:%02d   ", getHours(actualTime), getMinutes(actualTime), getSeconds(actualTime),"\t");
    // Serial.println();
    Serial.printf("\rCET time:\t%02d:%02d:%02d   ", getHours(timeCET), getMinutes(timeCET), getSeconds(timeCET));
    Serial.println();
  }  

/* ######## */
/* END LOOP */
/* ######## */
}

void startUDP() {
  Serial.println("Starting UDP");
  UDP.begin(123);
  Serial.print("Local port:\t");
  Serial.println(UDP.localPort());
  Serial.println();
}

uint32_t getTime() {
  if (UDP.parsePacket() == 0) {                    // If there's no response (yet)
    return 0;
  }
  UDP.read(NTPBuffer, NTP_PACKET_SIZE);
  // read the packet into the buffer
  // Combine the 4 timestamp bytes into one 32-bit number
  uint32_t NTPTime = (NTPBuffer[40] << 24) | (NTPBuffer[41] << 16) | (NTPBuffer[42] << 8) | NTPBuffer[43];
  // Convert NTP time to a UNIX timestamp:
  // Unix time starts on Jan 1 1970. That's 2208988800 seconds in NTP time:
  const uint32_t seventyYears = 2208988800UL;
  // subtract seventy years:
  uint32_t UNIXTime = NTPTime - seventyYears;
  return UNIXTime;
}

void sendNTPpacket(IPAddress& address) {
  memset(NTPBuffer, 0, NTP_PACKET_SIZE);
  NTPBuffer[0] = 0b11100011;              //LI, Version, Mode
  UDP.beginPacket(address, 123);
  UDP.write(NTPBuffer, NTP_PACKET_SIZE);
  UDP.endPacket();
}

inline int getSeconds(uint32_t UNIXTime) {
  return UNIXTime % 60;
}

inline int getMinutes(uint32_t UNIXTime) {
  return UNIXTime / 60 % 60;
}

inline int getHours(uint32_t UNIXTime) {
  return UNIXTime / 3600 % 24;
}

void handle_OnConnect() {
  countServerConnects++;
  temperature = bme.readTemperature();
  humidity = bme.readHumidity();
  pressure = bme.readPressure() / 100.0F;
  altitude = bme.readAltitude(SEALEVELPRESSURE_HPA);
  clientIP = server.client().remoteIP().toString();
  server.send(200, "text/html", SendHTML(temperature, humidity, pressure, altitude));
  Serial.print("Temperatur ="); Serial.println(temperature);
  Serial.print("Feuchte ="); Serial.println(humidity);
  Serial.print("Druck ="); Serial.println(pressure);
  Serial.print("Serveraufrufe = ");Serial.println(countServerConnects);
}

void handle_NotFound() {
  server.send(404, "text/plain", "Not found");
}

String SendHTML(float temperature, float humidity, float pressure, float altitude) {
  String ptr = "<!DOCTYPE html> <html>\n";
  ptr += "<meta http-equiv=\"refresh\" content=\"30\">\n";
  ptr += "<head><title>ESP8266 BME280 webserver</title>\n";
  ptr += "<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: left;}\n";
  ptr += "body{margin-top: 50px;} h1 {color: #000000;margin: 50px auto 30px;}\n";
  ptr += "p {color: #000000;margin-bottom: 10px;}\n";
  ptr += "</style>\n";
  ptr += "</head>\n";
  ptr += "<body>\n";
  ptr += "<div id=\"webpage\">\n";
  ptr += "<h1>ESP8266 BME280 Werte</h1>\n";
  ptr += "<p>Client IP: ";
  ptr += clientIP;
  ptr += "<br>Serveraufrufe: ";
  ptr += countServerConnects;
  ptr += "</p>";
  ptr += "<p>CET time: ";
  if (getHours(timeCET) >= 10) {
    ptr += getHours(timeCET);
  } else {
    ptr +="0";
    ptr += getHours(timeCET);
  }
  ptr += ":";
  if (getMinutes(timeCET) >= 10) {
    ptr += getMinutes(timeCET);
  } else {
    ptr +="0";
    ptr += getMinutes(timeCET);
  }
  ptr += ":";
   if (getSeconds(timeCET) >= 10) {
    ptr += getSeconds(timeCET);
  } else {
    ptr +="0";
    ptr += getSeconds(timeCET);
  }
  ptr += "<br>NTP Server: ";
  ptr += NTPServerName;
  ptr += "<br>IP: ";
  ptr += NTPServerStr;
  ptr += "</p>";
  ptr += "<p>Temperatur: ";
  ptr += temperature;
  ptr += "°C</p>";
  ptr += "<p>rel. Luftfeutigkeit: ";
  ptr += humidity;
  ptr += "%</p>";
  ptr += "<p>Luftdruck: ";
  ptr += pressure;
  ptr += "hPa</p>";
  ptr += "<p>Höhe: ";
  ptr += altitude;
  ptr += "m</p>";
  ptr += "</div>\n";
  ptr += "</body>\n";
  ptr += "</html>\n";
  return ptr;
  
}

Source Code im iframe