#include <ESP8266WiFi.h>

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

bool etatled = HIGH;                  // FLAG pour le changement d'etat de la led a chaque boucle

IPAddress server(192,168,0,80);       // l'adresse ip du serveur
WiFiClient client;

void setup() {
  Serial.begin(115200);                     // on ouvre la com serie
  WiFi.begin(ssid, password);                   // on se connecte au réseau WiFi
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(500);
  }
  Serial.print("Connected to ");
  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, etatled);       // on éteint la LED (logic inversé pour cette led)
}

void loop () {
  client.connect(server, 80);   // Connexion au serveur
  Serial.println(".");
  etatled = !etatled;           // on change le FLAG etatled
  if (etatled == LOW) {         // si l'état = 0
     client.println("LOW\r");   // on envoi le mot LOW au serveur
  }
  if (etatled == HIGH) {        // si l'état = 1
     client.println("HIGH\r");  // on envoi le mot HIGH au serveur
  }
  String reponse = client.readStringUntil('\r');   // on récupère le message du serveur jusqu'a \r
  Serial.println("from server: " + reponse);       // on affiche le message
  client.flush();                                  // une fois tout récupéré on vide le buffer 
  if (reponse == "LOW") {                          // si la reponse est le mot LOW 
    digitalWrite(LED_BUILTIN, HIGH);               // on éteint la LED (logic inverse pour cette led)    
  } 
  if (reponse == "HIGH") {                         // si la reponse est le mot HIGH
    digitalWrite(LED_BUILTIN, LOW);                // on allume la LED (logic inverse pour cette led) 
  }  
  delay(2000);                                   
}