Lo uso da tempo su ESP8266 e sono soddisfatto. Quando perde il segnale WiFi rimane in IDLE per poi riconnettersi automaticamente quando il segnale torna (o perché si era allontanato o perché il router era stato spento, eccetera).
Ma mi sono accorto di una cosa: se, nel momento che il segnale WiFi NON E' PRESENTE io riavvio ESP8266, Il WiFiManager non trova lo SSID memorizzato, quindi parte AutoConnectAP che fa apparire la schermata di accoppiamento WiFi sullo smartphone.
E da li, anche se il segnale WiFi di quel SSID dovesse ri-apparire, non se ne esce, perché, nel momento che ho la schermata di accoppiamento sullo smartphone, il loop () non viene eseguito.
Suggerimenti? Sbaglio qualcosa? Qualcuno usa WiFiManager?
ciao...la ricerca ed il salvataggio dell'SSID lo fai ogni volta al riavvio? ...o verifichi se c'è già un SSID salvato da qualche parte?...e se all'avvio (anche primissima volta) non trovi una SSID cosa fai?
WiFiManager fa tutto lui. Una volta che non trova nessun SSID memorizzato o raggiungibile appare la schermata sullo smartphone e tu decidi quale rete e quale password.
Da quel momento viene memorizzata nel ESP8266 come saved AP e all'accensione va sempre a cercare quello.
Try connecting to WiFi with SSID 'PULI-SOLUTIONS'
*wm:[1] AutoConnect
*wm:[2] Connecting as wifi client...
*wm:[2] setSTAConfig static ip not set, skipping
*wm:[1] Connecting to SAVED AP: PULI-SOLUTIONS
*wm:[1] connectTimeout not set, ESP waitForConnectResult...
*wm:[2] Connection result: WL_CONNECTED
*wm:[1] AutoConnect: SUCCESS
*wm:[2] Connected in 768 ms
*wm:[1] STA IP Address: 192.168.1.39
Connected successfull to SSID 'PULI-SOLUTIONS'
IP address: 192.168.1.39 - Serial Number: 5
Questo è il monitor seriale.
Una volta connesso esegue il loop ()
Try connecting to WiFi with SSID ''
*wm:[1] AutoConnect
*wm:[1] No Credentials are Saved, skipping connect
*wm:[2] Starting Config Portal
*wm:[2] Disabling STA
*wm:[2] Enabling AP
*wm:[1] StartAP with SSID: AutoConnectAP
*wm:[2] AP has anonymous access!
*wm:[1] AP IP address: 192.168.4.1
*wm:[1] Starting Web Portal
*wm:[2] HTTP server started
*wm:[2] Config Portal Running, blocking, waiting for clients...
Da questo momento appare una nuova rete WiFi sullo smartphone che si chiama AutoConnectAP e cliccandola appare il menu sul telefonino dove scegliere la rete e inserire la password.
Finché è in questa situazione, il loop() non viene eseguito.
//called when config portal is timeout
void setConfigPortalTimeoutCallback( std::function<void()> func );
//sets timeout before AP,webserver loop ends and exits even if there has been no setup.
//useful for devices that failed to connect at some point and got stuck in a webserver loop
//in seconds setConfigPortalTimeout is a new name for setTimeout, ! not used if setConfigPortalBlocking
void setConfigPortalTimeout(unsigned long seconds);
void setTimeout(unsigned long seconds); // @deprecated, alias
//sets timeout for which to attempt connecting, useful if you get a lot of failed connects
void setConnectTimeout(unsigned long seconds);
// sets number of retries for autoconnect, force retry after wait failure exit
void setConnectRetries(uint8_t numRetries); // default 1
//sets timeout for which to attempt connecting on saves, useful if there are bugs in esp waitforconnectloop
void setSaveConnectTimeout(unsigned long seconds);
Provato sia setConnectTimeout() che setSaveConnectTimeout().
Conta 30 secondi (tanti ne ho messi) ma poi non esce da WifiManager ma rimane dentro in attesa di una nuova configurazione. Io invece vorrei che, all'accensione (perché è li il problema), se non trova lo SSID memorizzato, dopo x secondi esce dal WifiManager e va nel loop in modo che io possa (volendo) anche fare un ESP.reset ()
Vedo di spiegarmi meglio, nel caso fossi stato poco chiaro.
WiFiManager va bene.
Se accendo e non ho ancora accoppiato ESP8266, WM mi da il suo menu' sullo smartphone, io scelgo, inserisco password e tutto funziona.
Se spengo il router o mi allontano da questo e perdo il segnale, WM non viene richiamato ma rimango nel loop dove faccio apparire "WiFi non presente o fuori copertura" e rimango nel loop.
Se riaccendo il router o torno sotto copertura, il collegamento viene ripristinato senza problemi.
Se, invece, sono fuori copertura e resetto (o spengo e riaccendo) ESP8266, WM si attiva, cerca lo SSID memorizzato, non lo trova ed entra nel AutoConnectAP e da li non esce. Anche se riaccendo il router o torno sotto copertura. Non torna, ciclicamente, a vedere se lo SSID memorizzato è tornato disponibile.
void WiFiScan()
{
byte n_ssid=0;
byte n=WiFi.scanNetworks();
if(prima_conn_ok) scrive_orario();
memset(id,'\0',sizeof(id));
for (byte i=0; i<n; ++i)
{
strcpy(id, WiFi.SSID(i).c_str()); // WiFi.SSID(i) è un oggetto String, che deve essere convertito per poter essere conrontato con un char*.
for (byte z=0; z<sizeof(ssid)/sizeof(char*); z++)
{
if(!strcmp(id, ssid[z]))
{
WiFi.begin(ssid[z], pwd[z]);
n_ssid=z+1;
break;
}
}
} // Il break interrompe il for quando viene trovata una rete nella lista.
configTime(TZ,"time.google.com", "pool.ntp.org");
// Scrivendo configTime(TZ, 0, "it.pool.ntp.org","time.nist.gov"); appena connesso scrive 01:00:08...09...10... per circa 15 secondi prima di mostrare l'ora corretta!
// pool.ntp.org
// it.pool.ntp.org
// time.nist.gov
// time.google.com: 216.239.35.0
// time2.google.com: 216.239.35.4
// ntp1.inrim.it: 193.204.114.232
// ntp2.inrim.it: 193.204.114.233
delay(1000);
matrix.fillScreen(LOW);
if (n_ssid>0 && n_ssid<10) // Ha trovato una rete presente nella lista: scrive il suo numero nella lista.
{
matrix.drawChar(P+L*8-1,0,' ', HIGH,LOW,1);
matrix.drawChar(30,0,48+n_ssid,HIGH,LOW,1);
matrix.write(); delay(500);
}
//setenv("TZ", TZ, 3);
tzset();
}