#include <ESP8266WiFi.h>

// Changer vos SSID et Password
const char* ssid = "XXXX";  
const char* password = "YYYY";  

WiFiServer serveur(80);                    

// pour l'ip fixe si vous assigné des ip fixe par votre box vous pouvez supprimer ces 3 lignes et le Wifi.config du setup
IPAddress ip(192, 168, 0, 80);            // IP address of the server
IPAddress gateway(192,168,0,254);         // gateway of your network
IPAddress subnet(255,255,255,0);          // subnet mask of your network

void setup() {
  Serial.begin(115200);                    // on ouvre la com serie
  WiFi.config(ip, gateway, subnet);        // on contruit l'ip fixe
  WiFi.begin(ssid, password);              // on se connecte au réseau WiFi
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(500);
  }
  serveur.begin();                        // on démarre le serveur
  Serial.print("Connected to ");          // on affiche les infos de connexion
  Serial.print("SSID: "); 
  Serial.println(WiFi.SSID());  
  Serial.print("IP: ");     
  Serial.println(WiFi.localIP());  
  pinMode(LED_BUILTIN, OUTPUT);          // on met le gpio de la LED interne en sortie 
  digitalWrite(LED_BUILTIN, HIGH);       // on éteint la LED (logic inversé pour cette led)
}

void loop () {
  WiFiClient client = serveur.available();    // quand le serveur est opérationel
  if (client) {                              // 
    if (client.connected()) {                // si un client se connecte
      Serial.println(".");
      String demande = client.readStringUntil('\r');    // on récuppère le message du client jusqu'a \r
      Serial.print("From client: ");                    // on affiche le message
      Serial.println(demande);      
      client.flush();                                   // une fois tout récupéré on vide le buffer
      if (demande == "LOW") {                           // si demande est le mot LOW
        digitalWrite(LED_BUILTIN, HIGH);                // on éteint la LED (logic inverse pour cette led)
      } 
      if (demande == "HIGH") {                          // si demande est le mot HIGH
        digitalWrite(LED_BUILTIN, LOW);                 // on allume la LED (logic inverse pour cette led) 
      } 
      client.print(demande);                            // on renvoi cette instruction au client
      client.println("\r");                             // on y ajoute l'instruction de fin de message
    }
    client.stop();                                      // on ferme la connexion ave le client
  }
}