Connexion à mon routeur ... suite

Bonjour à toutes et à tous,

Après avoir réussi à trouver mon routeur et avoir vérifier qu'avec les bons paramètres je l'ouvrais, j'ai enregistré ces paramètres dans un fichier.

      File file = LittleFS.open(FchWiFi, FILE_WRITE);  // Création du fichier de paramètre Routeur
      file.print(Ident+"\n");
      file.print(MdP+"\n");
      file.close();

Maintenant, je veux me connecter directement au routeur en utilisant les paramètres inscrits dans ce fichier :

String ssid = "Freebox-XXXXXX";                               // Nom de la box Wi-Fi;
String password = "super-mot-de-passe-complique";  // MDP de la box Wi-Fi;
...
  if (LittleFS.exists(FchWiFi)) { // Connexion en mode Station
    File file = LittleFS.open(FchWiFi, FILE_READ);
    ssid = file.readString();
    password = file.readString();
    file.close();
    Serial.println(ssid);
    Serial.println(password);
    WiFi.begin(ssid, password);
    Serial.println("\nConnecting");
    while (WiFi.status() != WL_CONNECTED) {
      Serial.print(".");
      delay(100);
    }
    Serial.println("\nConnected to the WiFi network");
    Serial.print("Local ESP32 IP: ");
    Serial.println(WiFi.localIP());
  } else { // Recherche du routeur WiFi
    Serial.print("Setting AP (Access Point)…");
    WiFi.softAP(ssid_AP, NULL);
    IPAddress IP = WiFi.softAPIP();
    Serial.print("AP IP address: ");  Serial.println(IP);
    setupRoutes_AP(server);
  }  

Et bien, ça ne fonctionne pas, la connexion ne veut pas se faire.

Si dans le sketch ci-dessus, j'enlève toute la partie relative au fichier, alors ssid et password sont ceux définis au début du sketch et ça fonctionne.

Pourtant, lorsque j'utilise les paramètres du fichier, le moniteur série me montre exactement les mêmes textes que ceux définis au début.

Alors, quelle est la différence entre ceux définis au début et ceux issus de mon fichier ?

Cordialement.

Pierre.

je pense que ssid va avoir les 2 lignes et l'autre va être vide. c'est pour cela que vous voyez "la même chose"

un principe général de debug ➜ rajoutez des crochets

    File file = LittleFS.open(FchWiFi, FILE_READ);
    ssid = file.readString();
    password = file.readString();
    file.close();
    Serial.write('['); Serial.print(ssid);     Serial.println(']');
    Serial.write('['); Serial.print(password); Serial.println(']');

regardez ce que ça donne.

Si vous voyez que ça ne va pas, le souci est dans

A mon avis, il faudrait plutôt faire un

    ssid = file.readStringUntil('\n');
    password = file.readStringUntil('\n');

Bonjour,

Essayez de visualiser ce qui est inscrit dans le fichier... Chez vous , pas sur le site...
Si votre MdP comporte des caractères spéciaux et que vous les ayez entrés depuis une page html, ils sont convertis dans des séquences escape, et ce sont ces séquences qui sont enregistrées dans votre fichier.
Si c'est cela, il vous faut de-escaper ces séquences avant de les envoyer au routeur...

Bonne bidouille,

MicroQuettas

PS : j'ai quasiment le même système de connexion à mes bidouilles depuis des années, mais réalisé avec une techno "à-la-papa"...

Je me doutais qu'il y avait un problème de caractère final, mais je ne voyais pas comment le résoudre.

Si j'utilise ce code, voilà ce que j'obtiens :

[Freebox-XXXXXX
17:10:45.419 -> super-mot-de-passe-complique
17:10:45.419 -> ]
17:10:45.419 -> []

Je ne comprends comment le fait d'avoir un '\n' à la fin de chaque terme permet d'obtenir ça.

En tous cas, c'est bien le problème et cette syntaxe le résout :

ssid = file.readStringUntil('\n');
password = file.readStringUntil('\n');

Je ne sais pas si un jour, j'arriverai à me faire au C. :frowning_face:

Merci beaucoup.

Pierre.

Et quand vous renseignez le MdP depuis une page html vous n'avez pas de séquences escape pour les caractères spéciaux : <> espaces, accents ?

il faut lire la doc :slight_smile:

la fonction file.readString() lit tout ce qui est dispo dans le flux (c'est une fonction de la classe Stream) jusqu'à ce qu'un timeout arrive, donc vous lisez tout le fichier et ensuite il n'y a plus rien a lire, ça attend une seconde et ça retourne tout ce qui avait dans le fichier.

le second appel n'a rien à lire, il attend le timeout d'une seconde et retourne une chaîne vide

en donnant le caractère de fin, avec file.readStringUntil() vous lui dites quand arrêter la lecture dans le fichier ➜ au moment où il rencontrera la fin de ligne.

et comme vous aviez fait

      file.print(Ident+"\n");
      file.print(MdP+"\n");

ça correspond bien au contenu du fichier.

Et vous avez de la "chance" car il n'y a pas un '\r' invisible qui traine et qui mettrait le bazar si vous aviez fait

      file.println(Ident);
      file.println(MdP);

Pour l'instant,je n'ai pas eu de caractères spéciaux à traiter. Je mémorise l'information.

Cordialement.

Pierre.

oui si vous avez des caractères spéciaux il vont être encodés.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.