C'est vrai que quand on travaille sous LINUX, les fins de lignes sont des '\n'. Sous Windows c'est souvent '\r' et '\n', et cela dépend de l'éditeur.
Mais comme je suppose du Windows pour ce projet ...
Il est fort probable que WiFi.begin n'apprécie pas un '\r' qui traîne en fin de ssid ou de password.
On va attendre confirmation.
Est ce qu'il existe en standard une fonction qui afficherait , pour un c_str() donné, la valeur (en hexa ou decimal) de chaque caractère, permettant de voir les charactères "invisibles" qui peuvent faire tourner en bourrique ?
du genre (non testé)
for (uint8_t iii = 0; iii < strlen(truc.c_str(); iii++){
Serial.println(truc.c_str()[iii], HEX);
}
wifiSSID.trim(); // enlève les espaces au début et fin de chaines
wifiPass.trim();
Dans les deux cas (ssid et password) la comparaison avec strcmp () me retourne 0 . Mon code précédent fonctionnait aussi mais trim est plus simple.
Après la bonne nouvelle la mauvaise . Pour obtenir une connexion wifi il faut que je neutralise la partie de mon code (voir ci-dessous) qui gère la carte sd et le traitement des données obtenues. Les identifiants de connexion sont alors soit écrits soit directement dans le Wifi.begin, soit à partir de const char *ssid2 = "Livebox-XXXX"; et const char *password2 = "YYYYYY"; déclarés en global avant le setup.
/*
Serial.print("Initializing SD card...");
// see if the card is present and can be initialized:
if (!SD.begin(chipSelect)) {
Serial.println("Card failed, or not present");
// don't do anything more:
return;
}
Serial.println("card initialized.");
// open the file. note that only one file can be open at a time,so you have to close this one before opening another.
File myFile = SD.open("wifi.txt");
// if the file is available, write to it:
if (myFile) {
while (myFile.available()) {
//Serial.write(myFile.read());
wifiSSID = myFile.readStringUntil('\n'); // copie la chaine jusqu'au retour chariot
wifiPass = myFile.readStringUntil('\n');
Serveur = myFile.readStringUntil('\n');
wifiSSID.trim(); // enlève les espaces au début et fin de chaines
wifiPass.trim();
ssid = wifiSSID.c_str();
password=wifiPass.c_str();
}
myFile.close();
}
int resultat = strcmp( ssid, ssid2 ) ;
Serial.println (resultat);
int resultat2 = strcmp( password, password2 ) ;
Serial.println (resultat2);
Serial.println("");
*/
En fait le wemos comme apparemment tout les ESP8266 reste connecté au wifi même plusieurs heures après avoir été débranché. Ce qui évidemment d'aide pas aux tests de connexion répétés .
J'ai donc ajouté un WiFi.disconnect(); ce qui permet de teste la connexion plusieurs fois de suite mais aussi de changer de réseau wifi quand plusieurs réseaux sont présents.
Merci à tous pour votre aide et en particulier à hbachetti
J'ai également réussi à faire fonctionner WiFiManager . Mon code ne compilait pas et les différents exemples de librairies "WifiManager" ne le faisait pas plus.
En fait le wemos comme apparemment tout les ESP8266 reste connecté au wifi même plusieurs heures après avoir été débranché. Ce qui évidemment d'aide pas aux tests de connexion répétés .
En fait l'ESP8266 conserve par défaut dans une mémoire non volatile les paramètres du dernier point d'accès auquel il s'est connecté avec succès. A défaut d'effacement de cette mémoire la conservation est illimitée.
Merci pour le lien vers le correctif à apporter à WiFiManager en attendant sa mise à jour
Entre parenthèses, ca fait deja un moment que je t ai dit d utiliser wifimanager... et effectivement le ssid password de la dernière connection effectuée sont stockés en spiff