Bilbiothèque Wifimanager

Bonjour,
j'ai découvert Wifimanager de Tzapu.
Le problème que je n'arrive pas à résoudre concerne le blocage pendant que le portail de connexion au wifi, est ouvert.
Si j'ai bien compris, il existe setConfigPortalBlocking(false) qui permet de sortir même sans avoir validé de wifi. Seulement cela ne compile pas chez moi...
N'ai-je rien compris ?

Moi je ne connais pas cette bibliothèque (elle est là), je ne connais pas ton besoin, je ne connais pas ton code, j'ai donc des difficultés à fournir une réponse.

Que veux-tu faire ?
As-tu vraiment besoin d'utiliser cette bibli ?
Peux-tu fournir ton code et le rapport (complet) de compilation ?

Sans un minimum d'info, on ne peut pas t'aider...

Merci,
alors voilà : je m'inspire fortement du projet de Tartiflette qui a posté son croquis Domogarden sur ce forum pour surveiller une piscine.
J'ai modifié son code et je veux rajouter une fonctionnalité Wifi (avec un ESP8266) pour piloter tout ça avec mon smartphone. Dans un premier temps, j'ai seulement rajouté le code nécessaire à l'ESP8266 et codé le nom du réseau et le mot de passe, en dur, dans le Mega.
Comme je souhaite pouvoir changer de réseau wifi, j'ai dû rajouter du code (et des pages pour l'écran tactile). Du coup, à la compilation, la mémoire du Mega commence à saturer (76%) et des alertes apparaissent.
C'est là que j'ai découvert Wifimanager : j'ai donc un second code pour l'ESP avec cette fameuse bibliothèque.
Donc le Méga peut demander à l'ESP de scanner les réseaux wifi dispos, à sa place.

Ainsi, quand l'ESP doit se connecter à un réseau wifi, wifimanager lui demande de se mettre en AP.
Le smartphone détecte alors le wifi créé, et on peut jouer avec son téléphone pour choisir le wifi que l'on souhaite utiliser.
Seulement si je ne peux pas me connecter à un réseau (pas le mdp par ex), je reste coincé sans moyen de sortir du mode AP, et le code de l'ESP reste bloqué...

Mon but est donc de pouvoir quitter ce portail sur mon smartphone, et que l'ESP fonctionne sans wifi

Je récapitule car c'est pas simple.. Tu veux utiliser un Mega et un ESP8266. Pourquoi les deux et pas uniquement l'ESP8266 ?

Tu veux utiliser une bibliothèque supplémentaire uniquement pour scanner les WiFi présents. Mais, en général, on utilise une télécommande de portail en un endroit qu'on connaît. Donc pas besoin de scanner car on est censé connaître les réseaux présents. Il suffit de les tester tous, en mettant les SSID et passwords dans le code. Si coup tu n'aurais plus besoin de cette bibliothèque, non ?

Après, je n'ai pas à discuter tes choix mais moins tu utilises de bibliothèques plus tu auras de mémoire disponible pour le programme.

Je comprends bien ta position.

J'ai choisi le Mega car c'est le contrôleur sur lequel Domogarden a été développé. Il y a en entrée, sonde pH, sonde Redox, T° de l'eau, et capteur de débit. Donc c'est sûr qu'un ESP32 ferait l'affaire. Seulement l'écran tactile est en 5V, les phidgets des sondes sont en 5V aussi, donc j'aurais besoin de 2 alimentations.

Pour faire quelque chose de simple à mettre en coffret et à maintenir, j'ai opté pour une carte qui regroupe Mega+ESP de chez Robotdyn.
Ainsi, pas de problème d'alimentation en 5 et 3.3V et pas de câble de liaison série entre ces 2 éléments.

Ensuite le wifi, je le connais, c'est le mien, mais j'aime bien faire un truc universel, donc je ne veux pas coder les SSID en dur. Et comme cette bibliothèque (et l'ensemble du code wifi) est sur le sketch de l'ESP, je n'ai plus de problème de mémoire pour le Mega...

Et enfin, je trouve sympa, ce type de librairie sauf ce côté "bloquant"...

Bonsoir

En quoi consiste le blocage , en quoi est-il gênant ?

Ce type de librairie (il y en a d'autres pour la même fonctionnalité) met en place un point d'accès temporaire pour aider à configurer le fonctionnement 'normal' ( mode STA) de l'ESP.

Quand le point d'accès ESP est très ponctuellement en service à des fins de mise en service de l'ESP tu as réellement d'autres tâches à faire éxecuter qui ne peuvent attendre le'vrai' fonctionnement ?

Ok c'est clair.
Il te reste à poster ton code et nous dire où ça coince...

Je ne comprends pas cette phrase

Mon but est donc de pouvoir quitter ce portail sur mon smartphone, et que l'ESP fonctionne sans wifi

al1fch:
Quand le point d'accès ESP est très ponctuellement en service à des fins de mise en service de l'ESP tu as réellement d'autres tâches à faire éxecuter qui ne peuvent attendre le'vrai' fonctionnement ?

Bonsoir,

En somme,que l'ESP ne fasse rien pendant que le point d'accès est créé, ce n'est pas grave.
Mais si l'ESP ne peut se connecter à aucun wifi, alors il ne sort pas du "portail".
Et donc, il ne lit plus son port série.

lesept:
Je ne comprends pas cette phrase

Quand le point d'accès AP_Machin est créé, en m'y connectant avec mon smartphone, cela ouvre un "portail" qui me propose de choisir lequel des Wifis dispos, sera utilisé par l'ESP

Pour le code de l'ESP :

#include <ESP8266WiFi.h>          //https://github.com/esp8266/Arduino

//needed for library
#include <ESP8266WebServer.h>
#include <DNSServer.h>
#include <WiFiManager.h>          //https://github.com/tzapu/WiFiManager

// select which pin will trigger the configuration portal when set to LOW
// ESP-01 users please note: the only pins available (0 and 2), are shared 
// with the bootloader, so always set them HIGH at power-up

const int MAXTENTATIVES = 3;      // nb de tentatives pour se connecter au WiFi
const byte tailleMessageMax = 50;
const char marqueurDeFin = '#';
char message[tailleMessageMax + 1]; // +1 car on doit avoir un caractère de fin de chaîne en C, le '\0'


boolean ecouter()
{
 static byte indexMessage = 0; // static pour se souvenir de cette variable entre 2 appels consécutifs. initialisée qu'une seule fois.
 boolean messageEnCours = true;
 int c ;
 
 while (Serial.available() && messageEnCours) {
   c = Serial.read();
   if (c != -1) {
     switch (c) {
       case marqueurDeFin:
         message[indexMessage] = '\0'; // on termine la c-string
         indexMessage = 0; // on se remet au début pour la prochaine fois
         messageEnCours = false;
         break;
       default:
         if (indexMessage <= tailleMessageMax - 1) message[indexMessage++] = (char) c; // on stocke le caractère et on passe à la case suivante
         break;
     }
   }
 }
 return messageEnCours;
}


void APOnDemand()
{
  static int index=0;
  int statusWiFi=0;   // the Wifi radio's status
        
  WiFiManager wifiManager;
  while ((statusWiFi==0)&&(index<MAXTENTATIVES))
       {
           // Connect to WPA/WPA2 network
           statusWiFi = wifiManager.startConfigPortal("AP_PISCINE") ;
           index++ ;
           if (statusWiFi==0) 
           {
              Serial.println("failed to connect and hit timeout");
              delay(3000);
              //reset and try again, or maybe put it to deep sleep
              ESP.reset();
              delay(5000);
           }
       }
       //if you get here you have connected to the WiFi
       if (statusWiFi>0) 
       {
            Serial.println("connected...yeey :)");
            index=0;
       }

}



void setup() 
{
 // put your setup code here, to run once:
 Serial.begin(115200);
 Serial.println("\n Starting");

}


void loop() {

if (!ecouter()) 
{
   if (strcmp(message, "Reset")==0)
   {
     Serial.println(F("OK"));
     Serial.println(message);
     APOnDemand() ;
   }
   
   else {
     Serial.println(F("pardon, pouvez vous repeter ?"));
     Serial.print(message) ;
     Serial.println("...") ;
   }
 }
  

}

Edite ton message précédent pour ajouter des balises CODE (la touche </> de l'éditeur de messages) autour de ton code : ça en facilite la lecture
Ça doit ressembler à ça :

#include <ESP8266WiFi.h>          //https://github.com/esp8266/Arduino

//needed for library
#include <ESP8266WebServer.h>
#include <DNSServer.h>
#include <WiFiManager.h>          //https://github.com/tzapu/WiFiManager

// select which pin will trigger the configuration portal when set to LOW
// ESP-01 users please note: the only pins available (0 and 2), are shared 
...

Merci

c'est modifié...

modifié... pas comme demandé : utiliser les balises code pas les balises quote

Pour une fermeture automatique du portail en cas d'échec , une fermeture ou réactivation manuelle du portail.....
explorer les divers exemples fournis avec la librairie : Timeout, OnDemand....

Je crois que cette fois, c'est modifié comme il le faut

Bonjour,
j'ai découvert une autre version de la librairie (un fork ??), qui intègre le non-blocage dans le portail de connexion.
Donc je vais essayer de l'utiliser