sketch_49_LEDschalten_ueberWLANdesRouters   (ESP8266 NodeMCU)

sketch_49_LEDschalten_ueberWLANdesRouters
  /*Die auf dem ESP befindliche LED (auch verbunden mit GPIO 16 bzw. D0) wird von einem Computer ein/aus geschaltet. 
    Diese Schalthandlung wird in einem Webbrowser ausgefuehrt, mit den Buttons "Schalte LED Ein" und "Schalte LED Aus".
    Der ESP arbeitet jetzt nicht im Access-Mode, sondern im Station Mode.
    Der ESP fungiert als Server, der Computer als Client.   
    Der Client stellt mit der Betaetigung der zwei Buttons eine Anfrage (einen Request)an den Server.
    ESP als auch Computer sind mit dem WLAN-Netz des Routers verbunden, es erfolgt aber keine Verbindung ueber das Internet. 
    Anstelle eines Routers kann auch der Mobile HotSpot eines Smartphones verwendet werden (Smartphone erzeugt einen Access Point).   
    Dann erscheint die Webseite mit den zwei Buttons "Schalte LED Ein" und "Schalte LED Aus" sowie eine Statusanzeige zum Schaltzustand.

    Mit WiFi.config wird der Router jetzt dem ESP eine feste IP-Adresse zuordnen, die sich nicht aendert.
    Im Webbrowser muss die IP-Adresse des ESP aufgerufen werden, welcher der Router dem ESP zugewiesen hat.
    Zum Beispiel: http://192.168.0.101
    Diese Adresse wird im Serial Monitor angezeigt.
    Wenn man sie aber im Menue des Routers abfragt(Start / Gateway / LAN / Lan Benutzer), wird immer noch die urspruengliche 
    dynamische Adresse angezeigt.
    */
  #include <ESP8266WiFi.h>                      //Das Bibliotheksprogramm wird in diesen Sketch eingebunden
  const char* ssid = "AndroidAP....";           //SSID (Name) des Routers  (hier verwendet: Mobile HotSpot des Smartphones)  
  const char* password = "20c93d....";          //Passwort fuer den Zugriff auf den Router (pre-shared key des Routers) 
  #define LED D0                                //Dem Anschluss DO wird die Variable "LED" zugeordnet
  WiFiServer server(80);                        //Erzeugt einen Server an Port80, der dort auf eingehende Nachrichten wartet
                                                //80 ist ein uebliches Port fuer Server
  
  void setup() 
  { 
   Serial.begin(115200); 
   delay(15); 
   
   pinMode(LED, OUTPUT);
   digitalWrite(LED, LOW);
   /* Verbinde zum WLAN Netzwerk des Routers(connect to WiFi network)*/ 
   Serial.println(ssid); 
   WiFi.begin(ssid, password); 
   
    /*Feste IP-Adresse:*/
    IPAddress ip(192,168,0,101);                //Der Router ordnet dem ESP diese IP-Adresse zu
    IPAddress gateway(192,168,0,1);             //siehe auch https://www.youtube.com/watch?v=5KdEc4Dto9Y
    IPAddress subnet(255,255,255,0);   
    WiFi.config(ip, gateway, subnet); 
    
   /* Im folgenden wird gewartet, bis eine Verbindung aufgebaut ist*/ 
   while (WiFi.status() != WL_CONNECTED) 
    { 
    delay(400); 
    Serial.print(".");                          // aller 0,4s werden .... angezeigt, bis die Verbindung steht 
    } 
    Serial.println(""); 
    Serial.println("ESP ist verbunden mit dem WLAN-Netzwerk des Routers"); 
    server.begin(); 
    Serial.println("Server(ESP) wurde gestartet"); 
    /*Jetzt wird die IP-Adresse angezeigt*/
    Serial.print("Der Router hat dem ESP die IP-Adresse zugeordnet: "); 
    Serial.println(WiFi.localIP());             //IP-Adresse, die der Router dem ESP zuordnet, z.B.192.168.0.101
  } 
    
  void loop() 
  { 
   /*Pruefung, ob sich ein Client verbunden hat*/ 
   WiFiClient client = server.available(); 
   if (!client) 
    { 
    return; 
    }
   Serial.println("Client hat sich verbunden"); 
   while(!client.available())
    { 
    delay(1); 
    } 
   String request = client.readStringUntil('\r'); //Vom Client liest der ESP einen String ein bis Zeilenende (Carriage Return CR)
   Serial.println(request);                       //Anzeige im Serial Monitor: "GET /LED=ON HTTP/1.1" oder "GET /LED=OFF HTTP/1.1"
   client.flush(); 
   int value; 
   if(request.indexOf("/LED=ON")!=-1)
    { 
    digitalWrite(LED, LOW);                       //LED einschalten (Strom fliesst durch die LED wenn Ausgang D0 auf LOW)
    value = LOW;                                  //Vorbereitung fuer client.print "On" weiter unten(Browser zeigt an "On")
    } 
   if(request.indexOf("/LED=OFF")!=-1)
    { 
    digitalWrite(LED, HIGH); 
    value = HIGH;                                 //Vorbereitung fuer client.print "Aus" weiter unten(Browser zeigt an "Aus")
    } 
   // Setze LED gemaess der Auswahl und gebe die Antwort zurueck(Return the response)
   client.println("HTTP/1.1 200 OK"); 
   client.println("Content-Type: text/html"); 
   client.println(""); 
   client.println("<!DOCTYPE HTML>"); 
   client.println("<html>"); 
   client.print("LED STATUS: "); 
   if(value == LOW) 
    { 
    client.print("Ein");
    } 
   else 
    { 
    client.print("Aus"); 
    } 
   client.println("<br><br>"); 
   client.println("<a href=LED=ON><button>Schalte LED Ein</button></a>");           //LED=ON (LED=Ein funktioniert nicht)
   client.println("<a href=LED=OFF><button>Schalte LED aus</button></a><br/>");
   client.println("</html>"); 
   delay(1); 
  }