sketch_46_LEDschalten_ESPsoftAP   (ESP8266 NodeMCU)

sketch_46_LEDschalten_ESPsoftAP
  /*Die auf dem ESP befindliche LED (auch verbunden mit GPIO 16 bzw. D0) wird von einem Computer ein/ausgeschaltet. 
    Diese Schalthandlung wird in einem Webbrowser ausgefuehrt, mit den Buttons "Schalte LED Ein" und "Schalte LED Aus".
    Der ESP arbeitet im AP-Mode (Access Point).
    Das heisst, der ESP erzeugt ein eigenes WLAN-Netz("softAP" da ohne Verbindung zum Internet).
    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.
    Der Computer waehlt sich in das WLAN-Netz des ESP ein.
    Im Webbrowser des Computers muss die IP-Adresse des ESP aufgerufen werden: http://192.168.4.1 wenn nicht mit WiFiConfig()geaendert wurde
    Dann erscheint die Webseite mit den zwei Buttons "Schalte LED Ein" und "Schalte LED Aus" und auch eine Statusanzeige zum Schaltzustand.
    Achtung: Bei Neustart (auch Reset)des ESP muss der ESPsoftAP geloescht (nicht speichern) und neu angeklickt werden !
  */
  #include <ESP8266WiFi.h>                      //Das Bibliotheksprogramm wird in diesen Sketch eingebunden
  
  
  const char* ssid = "ESPsoftAP";               //SSID 
  const char* password = "password55";          //Passwort 
  #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() 
  { 
   delay (2000);                                //Bis Programmstart 2 Sek warten, damit Anzeige im Serial Monitor sichtbar ist
   Serial.println(); 
   Serial.begin(115200); 
   delay(15); 
   WiFi.softAP(ssid, password);                 //Der ESP erzeugt ein WLAN Netz (wird zum Access Point AP)
   pinMode(LED, OUTPUT);
   digitalWrite(LED, HIGH);                      //Initial LED Aus
   /* Verbinde zum WLAN Netzwerk (connect to WiFi network)*/ 
   Serial.println(); 
   Serial.print("Server IP address: ");                                    
   Serial.println(WiFi.softAPIP());             //Der Serial Monitor zeigt die IP-Adresse des ESP an 
   /*Im Gegensatz zu Sketch 47 braucht nicht gewartet werden, bis eine WLAN-Verbindung aufgebaut ist, denn der ESP erzeugt das WLAN selbst.*/ 
   server.begin(); 
    Serial.println("Server wurde gestartet"); 
  } 
    
  void loop() 
  { 
   /*Pruefung, ob sich ein Client verbunden hat*/ 
   WiFiClient client = server.available(); 
   if (!client) 
    { 
    return; 
    }
   Serial.println("Client"); 
   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 = HIGH;                              //Initiale Anzeige auf Webseite: LED Status Aus
   
   /*Vom Client (Computer, Smartphone) hatte der ESP einen String eingelesen, der String hat den Namen: request.
     indexOf ermittelt jetzt, ob innerhalb dieses Strings die Zeichenfolge "/LED=ON" enthalten ist und liefert einen Rueckgabewert 
     ungleich von -1, wenn dies der Fall ist. Die if-Funktion prueft nun, ob ein Wert ungleich -1 rueckgegeben worden ist. Wenn ja, 
     wurde /LED=ON vom Client gesendet und der ESP schaltet die LED ein.*/
   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 Deiner Auswahl und gebe die Antwort zurueck(Return the response*/
   
   client.println("HTTP/1.1 200 OK"); 
   /*Die Antwort- oder Statuscodes von HTTP bestimmen direkt die Bedeutung der Antwort auf eine HTTP-Anfrage.
     Sie werden stets in der ersten Zeile der Response (Server-Antwort) in der Form HTTP/1.1 Statuscode uebermittelt.
     Statuscode "200 OK" heisst: Die Anfrage war erfolgreich. Die Antwort enthaelt die angeforderten Daten. 
     Weiteres siehe https://wiki.selfhtml.org/wiki/HTTP/Statuscodes */
     
   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); 
  }