ESP32. Comment utiliser la librairie WiFiManager pour gérer les connexions WiFi

Partager sur facebook
Partager sur twitter
Partager sur linkedin
Partager sur pinterest
Partager sur email
Partager sur telegram

La librairie WiFiManager permet de gérer très simplement la connexion Wi-Fi dans vos projets ESP32. La librairie WiFiManager pour ESP32 est en cours de développement. Elle démarre l’ESP32 en mode point d’accès (mode AP) sur lequel il suffit de se connecter pour configurer les paramètres du réseau WiFi sur lequel on souhaite se connecter.

 

Il est également possible de saisir d’autres paramètres (serveur MQTT, Token Blynk…) en même temps que les paramètres WiFi.

La librairie fonctionne également sur ESP8266

A LIRE AUSSI :
ESP8266. Comment utiliser la librairie WiFiManager pour gérer les connexions WiFi

Installer la librairie WiFiManager sur l’IDE Arduino

La version ESP32 de librairie WiFiManager n’est pas encore disponible depuis le gestionnaire de bibliothèque de l’IDE Arduino.

La version ESP32 est encore en cours de développement. Il faut donc l’installer manuellement.

1 Pour cela, il faut se rendre directement sur la page GitHub du projet et choisir la version Development.

Version de développement de la librairie WiFiManager pour ESP32

2 Télécharger le code source du projet sans décompresser l’archive ZIP.

Télécharger la librairie WiFimanager pour ESP32 à installer sur l'IDE Arduino

3 Ouvrez le gestionnaire de librairie de l’IDE Arduino : Croquis -> Inclure une librairie -> Ajouter la bibliothèque .ZIP…

Ajouter librairie ZIP depuis l'IDE Arduino

C’est prêt.

Ajouter la WiFiManager development à un projet PlatformIO

Pour ceux qui utilisent PlatformIO pour leurs projets, c’est encore plus facile pour installer la librairie, il suffit d’ajouter cette ligne aux dépendances

lib_deps =
    https://github.com/tzapu/WiFiManager.git#development

La librairie sera automatiquement téléchargée au prochain build (compilation du code source).

Comment fonctionne la librairie WiFiManager

Il peut aussi être très intéressant de ne pas embarquer d’identifiant et de mot de passe du réseau Wi-Fi dans le code Arduino.

Par exemple, l’objet devra se connecter sur un réseau dont vous ne connaissez pas les identifiants au moment du développement. Les identifiants peuvent changer. Par exemple, dans un établissement scolaire ou une entreprise, les identifiants et mot de passe sont changés régulièrement par sécurité. Le point d’accès a été remplacé et le nouveau mot de passe est différent.

Bref, vous l’avez compris, en évitant de coder “en dur”, vous n’aurez pas besoin de repasser par l’IDE Arduino à chaque changement de mot de passe ou de matériel.

Voici comment fonctionne le mode AutoConnect() par défaut

1 Lorsque l’ESP démarre, il le met en mode Station et tente de se connecter à un point d’accès (au réseau WiFi local) précédemment enregistré
2 Si l’ESP32 n’arrive pas à se connecter ou si aucun réseau n’a été enregistré précédemment, il place l’ESP32 en mode Point d’Accès (Mode AP). Un serveur Web accessible à l’adresse IP 192.168.4.1 est démarré sur l’ESP32
3 Utiliser n’importe quel appareil disposant d’une connexion WiFi avec un navigateur (ordinateur, smartphone, tablette) pour vous connecter sur la page de configuration

connexion esp32 ap wifimanager

4 Si l’interface de configuration est protégée par un mot de passe, vous devez commencer par saisir ce dernier

accepter connexion esp32 wifimanager

5 Une fenêtre intitulé “Rejoindre le réseau….” apparaît

esp32 ap wifimanager interface

6 Cliquer sur Configure WiFi. Si le réseau WiFi sur lequel vous désirez connecter l’ESP32 n’est pas affiché, cliquer Refresh et attendez quelques secondes pour que la liste s’actualise.

esp32 wifimanager configure local wifi access point credential
7 Sélectionner le réseau WiFi et saisir le mot de passe. Cliquer sur Save pour enregistrer.

8 L’ESP32 redémarre et se connecte au réseau WiFi configuré. Si tout s’est bien passé, l’adresse IP attribuée est affichée dans le journal d’execution

ESP32 wifimanager connected local wifi access point

Le fonctionnement de la méthode autoConnect() est bloquant, c’est à dire que jusqu’à ce que les paramètres de connexion soient enregistrés, tous les autres traitements sont en attente.

Il existe plusieurs solutions pour éviter ce comportement, par exemple

  • AutoConnectWithFSParameters pré-configurer les paramètres de connexion dans un fichier
  • OnDemandConfigPortal Convoquer le panneau de configuration uniquement lorsqu’on appuie sur un bouton ou une touche tactile
  • AutoConnectWithTimeout on spécifie un temps au delà duquel on continue l’exécution du programme (timeout). En testant l’état de la connexion, on pourra mettre l’ESP32 en veille si le réseau WiFi n’est pas accessible plutôt que de drainer la batterie

Les différents modes de connexion proposés par la librairie

Plusieurs méthodes

  • AutoConnect On laisse la librairie tenter de se connecter au réseau WiFi. C’est la méthode la plus simple. Deux possibilités
    • AutoConnect() le nom du point d’accès est attribué automatiquement par la librairie et prend la forme ESP_IDENTIFIANTCHIP
    • AutoConnect(“nom_point_acces”,”mot_de_passe”) Il est possible de personnaliser le nom du point d’accès et éventuellement protéger l’accès par un mot de passe.
  • startConfigPortal convoque la fenêtre de connexion à l’aide d’une condition (bouton, touche tactile…).

Exemples installés avec la librairie

Plusieurs exemples de connexion sont disponibles

exemples librairie wifimanager esp32

Méthode de connexion Utilisation Exemple
AutoConnect La méthode par défaut Consulter
AutoConnectWithStaticIP Configuration avec attribution d’une IP statique à l’ESP32 Consulter
A LIRE AUSSI :
Comment attribuer une IP fixe à un projet ESP32 ESP8266 ou ESP01
AutoConnectWithFSParameters Les paramètres sont rechargés au démarrage depuis un fichier stocké sur le système de fichier SPIFFS de l’ESP32. Consulter
A LIRE AUSSI :
ESP32. Débuter avec la librairie SPIFFS.h pour lire, écrire, modifier des fichiers
AutoConnectWithFSParametersAndCustomIP Idem mais avec un IP fixe et les paramètres de connexion à un serveur MQTT. Les paramètres sont stockés au format JSON à l’aide de la librairie ArduinoJson Consulter
A LIRE AUSSI :
Débuter avec ArduinoJSON v6, librairie Arduino pour manipuler des objets JSON
AutoConnectWithFeedback Consulter
AutoConnectWithFeedbackLED Consulter
AutoConnectWithReset Consulter
AutoConnectWithTimeout La méthode autoConnect() est bloquante. Pour éviter cela, il est possible de spécifier un temps au delà duquel on continue l’exécution du programme (timeout). En testant l’état de la connexion, on pourra mettre l’ESP32 en veille si le réseau WiFi n’est pas accessible plutôt que de drainer la batterie.

if ( WiFi.status() != WL_CONNECTED ) {
   // Mise en veille...
}
Consulter
A LIRE AUSSI :
ESP32. Code Arduino pour mise en sommeil (Deep Sleep) et réveils (Timer, Touch Pad, GPIO...)
OnDemandConfigPortal Permet de convoquer le mode AP pour configurer une nouvelle connexion à l’aide d’un bouton de commande physique relié sur une broche de l’ESP32 Consulter

Téléverser le projet WiFiManager pour ESP32

Voici un exemple pour tester la librairie Créer un nouveau croquis sur l’IDE Arduino ou un nouveau projet PlatformIO et coller le code suivant. Le programme appel la méthode autoConnect() par défaut pour permettre à l’utilisateur de choisir le réseau WiFi sur lequel il souhaite se connecter. Un bouton connecté sur le GPIO de l’ESP32 permet de réinitialiser les paramètres WiFi.

#include <Arduino.h>
#include <WebServer.h>
#include <WiFiManager.h>         

WebServer server(80);
WiFiManager wm;

#define PIN_RESET_BUTTON 4        
int RESET = 0; 

void handle_root();

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

    pinMode(PIN_RESET_BUTTON, INPUT);
    //WiFiManager
    //Local intialization. Once its business is done, there is no need to keep it around
    
    //reset saved settings
    //wm.resetSettings();
    
    //Permet d attribuer une IP fixe a l ESP32
    //wifiManager.setAPStaticIPConfig(IPAddress(10,0,1,1), IPAddress(10,0,1,1), IPAddress(255,255,255,0));

    //Tente de se connecter sinon passe en mode AP.
    wm.autoConnect("ESP32_AP", "esp32_pwd");
    //Idem avec nom automatique de la forme ESP + ChipID et sans mot de passe
    //wifiManager.autoConnect();

    //La librairie est bloquante. Une fois connecte, le programme continue
    Serial.println("ESP32 is connected to Wi-Fi network");
    
    // Affiche une interface HTML au projet depuis un navigateur sur adresse_ip_esp32/
    server.on("/", handle_root);

    server.begin();
    Serial.println("HTTP server started");
    delay(100); 
}


void loop() {
    server.handleClient();
    
    RESET = digitalRead(PIN_RESET_BUTTON);
    if( RESET == HIGH) {                                 
      Serial.println("Erase settings and restart ...");
      delay(1000);
      wm.resetSettings();  
      ESP.restart();  
    }
}

// HTML & CSS contents which display on web server
String HTML = "<!DOCTYPE html>\
<html>\
  <body>\
    <h1>Welcome</h1>\
    <p>Your first Iot Project made with ESP32</p>\
    <p>&#128522;</p>\
  </body>\
</html>";

// Handle root url (/)
void handle_root() {
  server.send(200, "text/html", HTML);
}

Comment fonctionne le code

Afin de pouvoir piloter la librairie WiFiManager à n’importe moment, on initialise un objet nommé vm a début du code

WiFiManager wm;

On créé également un serveur HTTP qui servira à afficher une page de paramètres ou toute autre information. Ce n’est pas nécessaire dans la plupart des projets

WebServer server(80);

On va ajouter un bouton sur la broche 4 (sur une carte ESP32 DevKitC v4) qui va permettre de réinitialiser les paramètres de connexion

#define PIN_RESET_BUTTON 4        
int RESET = 0; 

esp32 wifimanager reset button

On lance la connexion au réseau WiFi dans le setup(). Si le réseau WiFi est disponible et que les paramètres sont connus, la connexion est directement établie, sinon l’ESP32 passe en mode AP et attend que l’utilisateur se connecte et renseigne les paramètres. Ici, l’accès à la page de configuration est protégée par un mot de passe

wm.autoConnect("ESP32_AP", "esp32_pwd");
Le mot de passe doit au moins comporter 8 caractères

Dès que l’ESP32 est connecté au réseau WiFi, on démarre le serveur HTPP et on attend les clients sur la page /

server.on("/", handle_root);
server.begin();
Serial.println("HTTP server started");

Dès qu’un utilisateur arrive sur la page, la méthode handleroot() lui renvoi la page de l’interface

void handle_root() {
  server.send(200, "text/html", HTML);
}

La page est pré-construite dans la variable HTML

String HTML = "<!DOCTYPE html>\
<html>\
  <body>\
    <h1>Welcome</h1>\
    <p>Your first Iot Project made with ESP32</p>\
    <p>&#128522;</p>\
  </body>\
</html>";

Pour que le serveur fonctionne, il faut l’appeler régulièrement dans la loop() principale. Attention à ne pas mettre de delay !

server.handleClient();

Ouvrez n’importe quel navigateur internet pour accéder à l’interface HTML de votre objet connecté. Pour cela, il suffit de saisir l’adresse IP de l’ESP32 dans la barre d’adresse (URL)

esp32 html web server interface wifimanager

Enfin dès qu’on appuie sur le bouton connecté sur la broche 4, on ré-initialise les paramètres de connexion et on redémarre l’ESP32.

RESET = digitalRead(PIN_RESET_BUTTON);
if( RESET == HIGH) {                                 
      Serial.println("Erase settings and restart ...");
      delay(1000);
      wm.resetSettings();  
      ESP.restart();  
}

Peut-on combiner avec d’autres librairies : pubsubclient, ArduinoOTA… ?

Oui, la librairie WiFiManager est conçu pour être compatible avec les autres librairies. En effet, c’est une couche d’abstraction à la librairie WiFi. Elle n’intervient qu’au démarrage de l’ESP32.

Pour gérer la connexion à un serveur (broker) MQTT vous pouvez vous inspirer de cet exemple disponible sur GitHub. WiFiManager est capable d’intégrer la saisie de paramètres de connexion supplémentaires. Par contre, il faut gérer soit même l’enregistrement et la chargement des paramètres au lancement de l’ESP32 à l’aide de la méthode setSaveConfigCallback.

Concernant la mise à jour sans fil en Wi-Fi à l’aide de la librairie ArduinoOTA, c’est également possible. Par contre il faut sauvegarder et recharger les paramètres de connexion.

Après une mise à jour, la librairie WiFiManager a tendance à oublier les paramètres de connexion précédents.

Mises à jour

24/09/2020 Publication de l’article

Avez-vous aimé cet article ?
[Total: 1 Moyenne: 5]
Partager sur facebook
Partager sur twitter
Partager sur linkedin
Partager sur pinterest
Partager sur email
Partager sur telegram

Vous avez aimé ce projet ? Ne manquez plus aucun projet en vous abonnant à notre lettre d’information hebdomadaire!

quel modèle esp8266 choisir
Quel modèle d'ESP8266EX choisir en 2020 ?
guide choix esp32 development board
Quel ESP32 choisir en 2020 ?

Vous rencontrez un problème avec ce sujet ?

Peut-être que quelqu’un a déjà trouvé la solution, visitez le forum avant de poser votre question

Nous serions ravis de connaître votre avis

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Domotique et objets connectés à faire soi-même
Vous avez aimé ce tutoriel

Ne manquez plus les prochains projets

Recevez chaque semaine le récapitulatif des tutoriels et projets.

Vous pouvez vous désabonner à tout moment.