Merci à tous pour votre aide.
Pour accéder à internet de l'extérieur, j'ai suivi les instructions de jpbbricole et ça fonctionne (j'ai une IP publique).
Par contre j'ai des coupures qui peuvent intervenir au bout de 5 comme 40 minutes. Le programme que j'ai modifié en suivant ce fil de discussion fonctionne mieux que mon code initial :
https://forum.arduino.cc/t/serveur-sur-esp8266-qui-plante/504217/19
Voici mon code :
#include <ESP8266WiFi.h>
const char* ssid = "yyy";
const char* password = "xxxxxx";
WiFiServer server(aa);
int ledPin = 13;
// ATTENTION GPIO13 correspond à la PIN 07
void setup() {
Serial.begin(115200);
//delay(10);
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);
// Connect to WiFi network
Serial.println();
Serial.println();
Serial.print("Connexion à ");
Serial.println(ssid);
//WiFi.mode(WIFI_STA); // Configure ESP8266 en Mode STA
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println("");
Serial.println("WiFi connecte a : ");
Serial.println(WiFi.SSID());
// Start the server
server.begin();
Serial.println("demarrage du serveur");
// Print the IP address
Serial.print("Utilisez cette URL pour vous connecter : ");
Serial.print("http://");
Serial.println(WiFi.localIP());
}
void loop() {
// Control de la connection client
WiFiClient client = server.available();
if (!client) {
return;
}
// Attente de l'envoi de quelque chose du client
Serial.println("nouveau client");
//if(!client.available()){
while(!client.available()){
//delay(1);
}
// Première ligne de la requête
String request = client.readStringUntil('\r');
Serial.println(request);
while (client.available()) client.read();
//client.flush();
// Lecture-préparation réponse de la requête
int value = LOW;
if (request.indexOf("/LED=ON") != -1) {
digitalWrite(ledPin, HIGH);
value = HIGH;
}
if (request.indexOf("/LED=OFF") != -1) {
digitalWrite(ledPin, LOW);
value = LOW;
}
if (request.indexOf("/favicon.ico")!= -1){
client.println("HTTP/1.1 200 OK\r\n");
client.println("Content-Type: image/x-icon\r\n");
client.println("Content-Length: 0\r\n\r\n");
}
else {
// Réponse à la requête
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("");
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("<head>");
client.println("</head>");
client.println("<body>");
client.println("<div style=\"text-align:center\">");
client.println("<h1>TEST DU SERVEUR WIFI DE PHILIPPE</h1><br><br>");
client.print("La Lampe est maintenent : ");
if(value == HIGH) {
client.print("Allumee");
} else {
client.print("Eteinte");
}
client.println("<br><br>");
client.println("<a href=\"/LED=ON\"\"><button style=\"height: 50px; width: 100px\"> ON </button></a>");
client.println("<a href=\"/LED=OFF\"\"><button style=\"height: 50px; width: 100px\"> OFF </button></a><br />");
client.println("</body>");
client.println("</html>");
} // fin du else lié au favicon ou non
delay(1);
//client.stop();
if (client.connected())
{ /* Le client est encore connecté */
client.stop(); // termine la connexion
Serial.println("Client déconnecté par client.stop");
}
Serial.println("Client deconnecte");
Serial.println("");
}
Pourtant lorsque mon site devient inaccessible, si je fais un ping sur l'ip privée de ma WeMos, la réponse est bonne.
Merci.