WeMos WiFiManager potrebbe essere la soluzione che stai cercando per i tuoi progetti IoT e consentirti di connettere ogni progetto alla tua rete domestica senza problemi di configurazione.
L’autore della libreria WiFiManager è tzapu e la puoi scaricare dal suo gitHub ufficiale.
La libreria, unita ad un ESP8266 o altra scheda WiFi, ti permette di sfruttare la parte di memoria interna del chip.
Usando tale area puoi memorizzare i dati di connessione WiFi sulla WeMos WifiManager rendendo autonomo il tuo progetto IoT.
Come funziona WeMos WifiManager
Prima di tutto ho eseguito il test su di una scheda WeMos e la WeMos WifiManager che all’accensione verifica la presenza, nel raggio di connessione, di una delle reti WiFi conosciuta, la cui configurazione sia tra quelle precedentemente salvate.
Ciascuna configurazione è composta dalla coppia SSID/Password e WeMos tenta di collegarsi ad una delle reti “conosciute”.
Se nessuna delle reti conosciute è nel raggio della WeMos WifiManager ( l’immagine è stata eseguita con una shield WiFi in Scan ) avrai come conseguenza che il dispositivo si metterà in modalità AP con un DNS server ed un WebServer sul ip 192.168.4.1
Se ti colleghi alla nuova rete creata con il tuo dispositivo, visualizzerai il Captive Portal, che ti riporta alla pagina di default:
grazie a questa tecnica potrai configurare una nuova connessione WiFi ( SSID/Password ) e consentire alla WeMos WifiManager di salvare le credenziali di accesso alla tua rete WiFi ed al successivo riavvio, se il tuo progetto si trova nel raggio della tua rete, si collegherà automaticamente a quest’ultima.
Sketch di esempio della libreria
Tra gli esempi presenti nel gitHub di tzapu trovi anche “AutoConnectWithFeedbackLED.ino“ che procediamo ad analizzare linea per linea:
#include "ESP8266WiFi.h" //needed for library #include "DNSServer.h" #include "ESP8266WebServer.h" #include "WiFiManager.h" //https://github.com/tzapu/WiFiManager //for LED status #include "Ticker.h" Ticker ticker; void tick() { //toggle state int state = digitalRead(BUILTIN_LED); digitalWrite(BUILTIN_LED, !state); } //gets called when WiFiManager enters configuration mode void configModeCallback (WiFiManager *myWiFiManager) { Serial.println("Entered config mode"); Serial.println(WiFi.softAPIP()); //if you used auto generated SSID, print it Serial.println(myWiFiManager->getConfigPortalSSID()); //entered config mode, make led toggle faster ticker.attach(0.2, tick); } void setup() { // put your setup code here, to run once: Serial.begin(115200); //set led pin as output pinMode(BUILTIN_LED, OUTPUT); // start ticker with 0.5 because we start in AP mode and try to connect ticker.attach(0.6, tick); //WiFiManager //Local intialization. Once its business is done, //there is no need to keep it around WiFiManager wifiManager; //reset settings - for testing //wifiManager.resetSettings(); //set callback that gets called when connecting to previous WiFi fails //and enters Access Point mode wifiManager.setAPCallback(configModeCallback); //fetches ssid and pass and tries to connect //if it does not connect it starts an access point with the specified name //here "AutoConnectAP" //and goes into a blocking loop awaiting configuration if (!wifiManager.autoConnect("WeMos MauroAlfieri")) { Serial.println("failed to connect and hit timeout"); //reset and try again, or maybe put it to deep sleep ESP.reset(); delay(1000); } //if you get here you have connected to the WiFi Serial.println("connected...yeey :)"); ticker.detach(); //keep LED on digitalWrite(BUILTIN_LED, LOW); } void loop() { // put your main code here, to run repeatedly: }
Descrizione dello sketch
Partendo dalle linee 01-08 che includono le librerie necessarie alla comunicazione WiFi, DNS, Wifi Manager e Ticker.h per la gestione del led;
linea 09: crea una istanza ticker che userai per la gestione del lampeggio del led;
linee 11-15: crea la funzione che si occuperà di gestire il lampeggio del led. Recupera lo stato del led e lo inverte sul pin a cui tale led è connesso;
linee 18-25: definisci una funzione di callback che richiamata da un metodo della libreria in condizioni particolari, come in questo esempio, scrive sul monitor seriale le informazioni di configurazione e del successivo utilizzo del WiFi impostando, infine, il lampeggio del led a 0.2 sec;
linea 29: attiva la comuicazione seriale tra WeMos WifiManager e computer a 115200;
linea 32: imposta il led come OUTPUT e per farlo utilizza il comando pinMode;
linea 34: imposta il lampeggio a 0.6 sec per indicare la fase di connessione del WeMos;
linea 39: crea l’istanza wifiManager dall’omonima classe che utilizzerai per i metodi disponibili;
linea 45: imposti la chiamata alla funzione di callback che sarà richiamata qualora il WeMos non trovi una delle reti precedentemente salvate;
linea 51: esegue una doppia funzione, la prima tenta la connessione ad una rete precedentemente conosciuta, in caso di fallimento passa alla modalità AP; tra parentesi puoi impostare un SSID personalizzato”WeMos MauroAlfieri” in modo da riconoscere facilmente la nuova rete dal tuo device. Se non definisci alcun SSID di default avrai: “AutoConnectAp”. Qualora la connessione, attraverso il captive portal, dovesse impiegare più del timeout impostato ti restituisce un valore false e lo sketch si blocca in un ciclo interno alla libreria;
linea 59: quando la connessione va a buon fine, come conseguenza, scrive sul monitor seriale “connected…yeey:)”;
linea 60: usa il metodo detouch per inibire il led evitando altri lampeggi;
linea 62: porta il pin del LED_BUILTIN a LOW per mantenerlo acceso dopo la connessione;
linee 65-68: la funzione loop() è vuota perché tu possa utilizzarla per inserire il codice che vorrai far eseguire al tuo progetto.
Video demo
In conclusione il video che ho realizzato:
osserva il collegamento alla rete WiFi che avviene usando il captive portal della WeMos Wifimanager library
4 commenti
1 ping
Vai al modulo dei commenti
Ottimo , ma volendo inserire anche la stringa di Blynk come implementarla… come estrarre dal wifi manager la SSID e PSW memorizzata per restituirla a blynk? grazie,
Autore
Ciao Francesco,
a memoria ricordo che nella documentazione ufficiale della libreria WifiManager siano descritti dei metodi della libreria stessa per estrarre queste informazioni, hai provato a cercare nella documentazione ?
Ciao, grazie per l’articolo.
È possibile aggiungere un ulteriore parametro alla maschera? Ad esempio ssid, password e username che poi viene salvato in una variabile dello sketch?
Autore
Ciao Alessandro,
la libreria fa già questo da sola, quando tu inserisci una rete nuova ( SSID e Password ) la memorizza nel micro controllore.
Prova a leggere la documentazione della libreria per capire come fa ed eventualmente fartela salvare dove preferisci.
[…] WeMos WiFi Manager […]