Bonjour,
Merci beaucoup Microquettas et merci beaucoup J-M-L.
maintenant ça fonctionne sans bug même sous Chrome qui demande une favicon. ![]()
Grace à vous 2 j'ai beaucoup appris en quelques jours et c'est le but entre autres
Microquettas, j'ai fait les modifs que vous m'aviez suggérées
remplacer mes println par des print là où le retour à la ligne était déjà dans la phrase...
déplacer mon accolade fermante du else qui était effectivement mal placée
ajouter la condition
if (client.connected())
{ /* Le client est encore connecté */
client.close(); /* On peut le virer sans crainte */
}
sauf que j'ai remplacé "client.close" par "client.stop" car close n'était pas dans la bibli (messe d'erreur)
j'ai remplacé le delay(1) par un yield();
Au passage merci à J-M-L qui m'avait dit d'enlever TOUS mes delay() mais j'en avais oublié un...
j'ai lu sur le net "Un delay de plus de 20us peut mener à des pertes de connexion."
Ca bugait encore, j'ai rajouté un yield() avant la réponse à la requête et depuis ça roule...
vous me parliez des tutos qu'il faut que je lise, je suis d'accord et je le fais déjà : je suis même en train d'essayer de retranscrire le tuto de J-M-L sur le shield ethernet pour moi pour l'adapter à l'esp8266 mais j'avoue que je n'y comprend rien.
en règle générale les tutos s'adressent aux utilisateurs ayant déjà une connaissance de base et je m'arrache la tête sur chaque ligne... alors ma technique est de prendre des exemples existant et de le modifier, souvent ça marche (et là je ne viens pas vous embêter) et parfois ça plante, comme aujourd'hui.
Dans d'espoir que ça puisse aider un autre débutant, je poste mon code modifié (je l'ai relativement documenté)
////////////////////////////////////////////////////////////////
// Programme simple de webserver
////////////////////////////////////////////////////////////////
#include <ESP8266WiFi.h>
const char* ssid = "ma freebox";
const char* password = "mon pass";
int ledPin = 13;
int value = LOW;
byte heureMonte=0;
// ATTENTION GPIO13 correspond à la PIN 07
WiFiServer server(80);
void setup() {
Serial.begin(9600);// je l'ai supprimé pour tester si c'est lui qui rame mais non donc je l'ai remis
delay(10);
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);
// Connect to WiFi network
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
// Start the server
server.begin();
Serial.println("Server started");
// Print the IP address
Serial.print("Use this URL to connect: ");
Serial.print("http://");
Serial.println(WiFi.localIP());
}
void loop() {
// Controle de la connection client
WiFiClient client = server.available();
if (!client) {
return;
}
// Attente de l'envoi de quelque chose du client
Serial.println("new client");
while(!client.available()){
//delay(1); supprimé "Un delay de plus de 20us peut mener à des pertes de connexion."
}
// Première ligne de la requête
String request = client.readStringUntil('\r');
Serial.println(request);
while (client.available()) client.read();// suggestion J-M-L au lieu de //client.flush();
// Lecture-préparation réponse de la requête
// int value = LOW; //je l'ai déplacé dans les déclarations en tete
if (request.indexOf("/LED=ON") != -1) {
digitalWrite(ledPin, HIGH);
value = HIGH;
}
else if (request.indexOf("/LED=OFF") != -1) {
digitalWrite(ledPin, LOW);
value = LOW;
}
else if (request.indexOf("/heureMonte=+") != -1) {
heureMonte +=1; if (heureMonte==24){ heureMonte=0;}
Serial.println("augmenter heureMonte");
}
yield();
//delay(5);//ajouté par moi puis supprime
// Réponse à la requête
// ajout microquettas****************************************
if (request.indexOf("/favicon.ico")!= -1){
client.print("HTTP/1.1 200 OK\r\n");
client.print("Content-Type: image/x-icon\r\n");
client.print("Content-Length: 0\r\n\r\n");
}//fin d'ajout microquettas
else {
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 WIFI SERVEUR</h1>
");
client.print("Led pin is now: ");
if(value == HIGH) {
client.print("On");
}
else if (value==LOW)
{
client.print("Off");
}
client.println("
");
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>
");
client.println("
");
client.print("heureMonte = ");
client.println(heureMonte);
client.println("
");
client.println("<a href=\"/heureMonte=+\"\"><button style=\"height: 50px; width: 100px\"> heureMonte+1 </button></a>
");
// deplacé 2 lignes plus bas } // fin du else lié au favicon ou non
client.println("</body>");
client.println("</html>");
} // fin du else lié au favicon ou non
yield();//delay(1);
if (client.connected())
{ /* Le client est encore connecté */
// client.close(); /* On peut le virer sans crainte */ DEBUG 'class WiFiClient' has no member named 'close'
client.stop(); // termine la connexion
Serial.println("Client déconnecté par client.stop");
}
//Serial.println("Client déconnecté");
Serial.println("");
}