mercredi 15 décembre 2021

ESP8266 & ESP32 : Connexion au Réseau WIFI

 


 ESP8266 & ESP32 : Connexion au Réseau WIFI

 

Dans cet article nous allons étudier la mise en œuvre d'une connexion fiable au réseau WIFI. En général on commence par implémenter un code sur table, et on installe le montage ensuite à l'endroit prévu. Ce n'est pas forcément la bonne méthode.

Il serait dommage de s'engager dans un développement conséquent, si au bout du compte, le module, une fois installé à l'endroit prévu, est inaccessible.

1. Perte de connexion

Il peut arriver qu'un module ESP8266 ou ESP32 perde sa connexion au réseau. Les raisons sont multiples :

  • couverture WIFI insuffisante
  • redémarrage du point d'accès
  • conditions atmosphériques, humidité en particulier
  • etc.

Il existe différentes techniques permettant une reconnexion automatique. Beaucoup de tutoriels existent sur le sujet :

https://randomnerdtutorials.com/solved-reconnect-esp32-to-wifi/

https://randomnerdtutorials.com/solved-reconnect-esp8266-nodemcu-to-wifi/

Il ne faut pas négliger ce point, et quelque soit la technique employée, il est préférable d'en utiliser une, et de la tester, plutôt que de ne rien faire.

2. Mesurer l'intensité du signal WIFI

La reconnexion automatique est un moyen de palier à une perte de connexion au réseau, mais est-ce suffisant ?

Il peut sembler évident que, si la reconnexion échoue, le problème a probablement une origine physique : éloignement, présence de murs épais, etc.

Avec un téléphone mobile, il est possible d'apprécier la force du signal WIFI. Mais il faut savoir que tous les téléphones ne se valent pas d'un point de vue réception. Il en va de même pour nos petits modules ESP8266 et ESP32.

Dans un coin de mon atelier où la couverture WIFI est assez mauvaise, j'ai testé quelques cartes :

  • WEMOS LOLIN D32 : OK
  • ESP32 DEVKIT C : OK
  • WEMOS D1 MINI : OK
  • HELTEC WiFi Kit 32 : KO
  • mon téléphone : KO

Il va sans dire que si j'avais un serveur ESP32 à mettre en place à cet endroit je ne choisirais certainement pas la HELTEC WiFi Kit 32.

Commençons pas charger un petit logiciel permettant de tester notre connexion :

https://bitbucket.org/henri_bachetti/basic-server/src/master/arduino/basic-web-server/basic-web-server.ino

Dans cet exemple, que l'on peut compiler pour ESP32 ou ESP8266, une gestion par événements comme celle décrite dans les tutoriels cités plus haut a été mise en place :
  • onStationConnected()
  • onStationDisconnected()
  • onStationGotIP()

L'implémentation pour un ESP32 ou un ESP8266 n'est pas fondamentalement différente.

Note pour les débutants : voici une petite astuce pour écrire du code pouvant se compiler sur les deux plateformes :

#ifdef ESP32
// code ESP32
#else
// code ESP8266
#endif

Il suffit ensuite de choisir la bonne carte dans le menu Outils/Type de Carte de l'IDE ARDUINO pour que la compilation se fasse avec la bonne option.

Au démarrage de la carte, la LED s'allume, et elle s'éteint lorsqu'elle est connectée au réseau. Si la carte n'est pas équipée d'une LED (ESP32 DevKitC par exemple), il est facile d'en ajouter une (avec une résistance de quelques KΩ en série) sur une GPIO et de modifier le code :

#define LED               LED_BUILTIN  // la LED de la carte
#define LED_CMD     LOW           // commande par un niveau bas (c'est souvent le cas)

A remplacer par :

#define LED              23
#define LED_CMD     HIGH

Dans cet exemple, la LED est sur la GPIO23 et elle se commande par un niveau haut. Elle est donc reliée par une résistance à GND.

Au démarrage l'adresse IP de la carte est affichée sur le moniteur série. Il suffit de s'y connecter avec un navigateur. La page affichée par le serveur est la suivante :

A l'aide de cette page, nous allons pouvoir tester la réactivité de notre serveur, à différents endroits de l'habitation. Le bouton ON permet d'allumer la LED de la carte, ensuite son libellé change pour devenir OFF, et permet d'éteindre la LED.

La puissance du signal est également affichée. Dans sa dernière version, la date et l'heure du dernier boot et le nombre de connexions au réseau WIFI sont également affichés, ce qui peut permettre de savoir à distance si le nombre de reconnexions est important ou non.

Si on le désire, un petit écran I2C OLED SSD1306 peut être relié au module, et permet d'afficher différentes informations :
  • nombre de connexions au réseau WIFI
  • date et heure du dernier boot
  • adresse MAC
  • adresse IP
  • RSSI, la puissance du signal

Les pins à relier sont les suivantes :

  • Vin    3.3V
  • GND    GND
  • ESP32 :
    • SCL    GPIO22
    • SDA    GPIO21
  • ESP8266 :
    • SCL    GPIO5 (D1)
    • SDA    GPIO4 (D2)

Ce petit écran est optionnel. S'il est absent, le serveur fonctionnera tout de même.

Si l'on raccorde l'écran, le montage devient autonome, et nous allons pouvoir déplacer celui-ci dans l'habitation, en l'alimentant à l'aide d'un bloc secteur, ou d'un POWER-BANK, et mesurer rapidement la force du signal WIFI là où c'est nécessaire.

Une carte WEMOS D1 MINI, assez éloignée du point d'accès, affiche les informations suivantes sur le moniteur série :

Connecting to AP-XXXXX
HTTP server started
Station disconnected: Disconnected from WiFi access point
WiFi lost connection. Reason: 2
Trying to reconnect to
AP-XXXXX
Station disconnected: Disconnected from WiFi access point
WiFi lost connection. Reason: 201
Trying to reconnect to
AP-XXXXX
Connected to AP successfully!
WiFi connected to
AP-XXXXX
IP address: 192.168.1.59
Station disconnected: Disconnected from WiFi access point
WiFi lost connection. Reason: 200
Trying to reconnect to Livebox-E987
Station disconnected: Disconnected from WiFi access point
WiFi lost connection. Reason: 201
Trying to reconnect to
AP-XXXXX
Station disconnected: Disconnected from WiFi access point
WiFi lost connection. Reason: 2
Trying to reconnect to
AP-XXXXX
Connected to AP successfully!
WiFi connected to
AP-XXXXX
IP address: 192.168.1.59

On constate qu'après s'être connecté une première fois avec succès, la connexion est perdue, puis retrouvée.

A cet endroit le niveau du signal est de -96 dBm, ce qui est faible.

A noter : en utilisant le même code, compilé et chargé dans une carte WEMOS LOLIN D32, le serveur affiche -88dBm, ce qui est un peu mieux. Toutes les cartes ESP8266 et ESP32 ne se valent pas d'un point de vue réception, et l'adoption d'une carte différente peut parfois sauver une situation problématique.

3. WIFI manager

Certains d'entre vous connaissent certainement la librairie WIFIManager.

Si ce n'est pas le cas, voici quelques explications : c'est une librairie qui permet de choisir le réseau WIFI auquel se connecter via une interface HTML.

Cela dispense donc de préciser dans le code le SSID et le mot de passe à utiliser, le choix étant fait par l'utilisateur lors du premier démarrage, à l'aide de n'importe quel appareil disposant du WIFI (téléphone, tablette, ordinateur).

Il existe beaucoup de tutoriels sur le sujet :

https://randomnerdtutorials.com/wifimanager-with-esp8266-autoconnect-custom-parameter-and-manage-your-ssid-and-password/

Le SSID et le mot de passe choisis sont enregistrés dans la mémoire FLASH de l'ESP et à chaque démarrage, celui-ci essaie de s'y connecter. S'il n'y parvient pas, il démarre un réseau en mode Access Point (192.168.4.1) et l'utilisateur peut s'y connecter pour faire son choix.

ATTENTION : cela veut clairement dire que si la connexion WIFI est de mauvaise qualité ou que le réseau est inaccessible à un moment donné, il faudra repasser par une configuration. D'où l'intérêt de rechercher une bonne qualité de connexion.

4. Essais

Le sketch a été compilé sur une WEMOS D1 MINI et une LOLIN D32. A l'endroit où les deux cartes ont été installées, le niveau du signal WIFI est de -80dBm à -86dBm. Au bout de quelques jours le nombre de connexions au réseau WIFI est de 1, ce qui indique clairement que le signal est suffisant.

Un autre montage WEMOS D1 MINI situé en cave montre un nombre de reconnexions de 7 au bout d'un mois, avec un niveau du signal WIFI égal à -83dBm.

5. Conclusion

Pour conclure, je conseillerais d'adopter systématiquement certaines habitudes afin de mettre toutes les chances de notre côté :

  • dans le code, mettre en place une reconnexion automatique
  • tester la connexion WIFI à l'endroit où l'on désire installer le montage, si possible avec plusieurs cartes différentes
  • choisir une "bonne carte" ESP8266 ou ESP32

Des solutions de secours existent, répéteur, point d'accès supplémentaire, pour les cas désespérés. On peut également essayer une carte ESP8266 ou ESP32 possédant un connecteur pour le raccordement d'une antenne WIFI externe.

Une connexion WIFI de grande qualité n'est pas forcément nécessaire dans toutes les situations. S'il s'agit d'envoyer des valeurs de température et d'humidité à un serveur toutes les 30 minutes, on peut se contenter d'une qualité moyenne. S'il s'agit de surveiller un réservoir d'eau et d'agir sur une vanne en fonction du niveau pour empêcher son débordement et une inondation, cela pourrait être plus problématique.


Cordialement

Henri

6. Mises à jour

27/12/2021 : affichage de la date et l'heure du dernier boot
                     affichage du nombre de connexions au réseau WIFI

 

5 commentaires:

  1. Bonjour Henri
    Toujours aussi clair et efficace.
    Merci pour le partage

    RépondreSupprimer
  2. Bonjour,
    Je connaissais wifi manager, mais là tous les aspects sont couverts et regroupés, c'est top,
    Merci!

    RépondreSupprimer
  3. Salut Hbachetti !
    Excellent article, juste une petite faute de frappe au chapitre 3, tu as inscrit "WIFI magager". Sinon bravo !

    Amitiés
    Rémi

    RépondreSupprimer