WeMos WifiManager

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.

WeMos WifiManager connected iphone

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.

WeMos WifiManager

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”.

WiFi ScanNetwork

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:  

WefiManager AutoConnectAP

Fonte: gitHub Tzapu

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.

WeMos WifiManagerconnected

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

  • Questo sito ed i suoi contenuti è fornito "così com'è" e Mauro Alfieri non rilascia alcuna dichiarazione o garanzia di alcun tipo, esplicita o implicita, riguardo alla completezza, accuratezza, affidabilità, idoneità o disponibilità del sito o delle informazioni, prodotti, servizi o grafiche correlate contenute sul sito per qualsiasi scopo.
  • Ti chiedo di leggere e rispettare il regolamento del sito prima di utilizzarlo
  • Ti chiedo di leggere i Termini e Condizioni d'uso del sito prima di utilizzarlo
  • In qualità di Affiliato Amazon io ricevo un guadagno dagli acquisti idonei qualora siano presenti link al suddetto sito.

Permalink link a questo articolo: https://www.mauroalfieri.it/elettronica/wemos-wifimanager.html

4 commenti

1 ping

Vai al modulo dei commenti

    • Francesco il 14 Dicembre 2020 alle 09:04
    • Rispondi

    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,

    1. 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 ?

    • alessandro nestola il 20 Marzo 2021 alle 00:29
    • Rispondi

    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?

    1. 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.

  1. […] WeMos WiFi Manager […]

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.