Tutoriel MicroPython, gérer la connexion WiFi au démarrage sur ESP8266/ESP32

Dans ce nouveau tutoriel consacré au firmware MicroPython, nous allons apprendre comment connecter un module ESP8266 ou ESP32 à un réseau WiFi. Dans un premier temps, nous allons voir comment se connecter manuellement à l’aide de l’interpréteur REPL. Ensuite, nous verrons comment créer un script de connexion qui gère automatiquement la connexion au démarrage du module. Si vous êtes sur Windows, je vous conseille d’installer et d’utiliser l’IDE uPiCraft présenté précédemment. C’est un éditeur de code dédié au langage MicroPython. uPiCraft permet de développer et de gérer son code sur toutes les cartes de développement supportées par le MicroPython (pyboard, WiPy, ESP8266, ESP32, STM32…). Pour rendre accessible au débutant le MicroPython, j’ai utilisé uPiCraft dans tous les tutoriels MicroPython. Vous pouvez également utiliser screen sur macOS/Linux ou Putty sur Windows.

Un peu de lecture avant de commencer

Si vous débutez en MicroPython, je vous conseille de lire ces articles qui vous aiderons à prendre en main ce langage :

Connexion manuelle à un réseau WiFi depuis l’interpréteur de commande REPL

Connectez la carte ESP8266/ESP32 et lancez uPiCraft. Allez dans le menu Tools puis Serial et choisissez le port COM sur lequel est branché la carte. Connectez vous à la carte pour lancer l’interpréteur REPL en cliquant sur l’icone de connexion.

Lorsque REPL est lancé, l’invite de commande est symbolisée par >>>. Les fichiers sont listés sous le Device dans la barre latérale gauche.

On commence par importer le module Network

import network

La classe WLAN du module network contient toutes les méthodes de gestion réseau. Le module ESP8266/ESP peut se comporter comme un point d’accès (mode network.AP_IF) ou comme un client (mode network.STA_IF). On va créer une instance de l’objet WiFi de type network.STA_IF. Exécutez

station = network.WLAN(network.STA_IF)

On doit ensuite activer l’interface WiFi à l’aide de la méthode active(True/False).

station.active(True)

Il ne reste plus qu’à nous connecter à un réseau WiFi à l’aide de la méthode connect(). La méthode connect() a besoin du nom du réseau ainsi que le mot de passe. En retour la fonction renvoi l’adresse IP attribuée par le serveur DHCP au module.

>>> station.connect("nomReseau", "MoteDePasseReseau")
>>> stationscandone
state: 0 -> 2 (b0)
state: 2 -> 3 (0)
state: 3 -> 5 (10)
add 0
aid 8
cnt 

connected with X72, channel 1
dhcp client start...
.isip:192.168.1.81,mask:255.255.255.0,gw:192.168.1.1

On dispose de plusieurs méthodes utilises pour tester (n’importe ou dans vos scripts) l’état de la connexion WiFi :

  • isconnected(), permet de savoir si le module est connecté au réseau
  • ifconfig(), permet de récupérer l’adresse IP du module, l’adresse IP du routeur DHCP

Attribuer une IP fixe à un module MicroPython ESP8266/ESP32

Lorsqu’on a de nombreux objets connectés, il est préférable d’attribuer une adresse IP fixe. On pourra plus facilement accéder à une interface WEB, réaliser des opérations de maintenance avec WebREPL. Pour cela, on utilise la méthode ifconfig(). On lui passe comme paramètre l’adresse IP, le sous-réseau, le serveur DHCP et le serveur DNS (celui de Google fera l’affaire, 8.8.8.8). Ensuite, on se connecte avec la méthode connect(ssid,password) tout simplement.

>>> station.disconnect()
>>> station.status()
>>> station.ifconfig(('192.168.1.10', '255.255.255.0', '192.168.1.1', '8.8.8.8'))
>>> station.connect()

Et voilà.

Script MicroPython de connexion automatique

Maintenant, il ne nous reste plus qu’à automatiser tout ça. On pourrait tout simplement écrire le code de connexion dans le script boot.py. Il est plus judicieux de déporter le code dans un script dédié. La maintenance sera plus simple et on pourra l’utiliser plus facilement dans d’autres scripts.

Créer un nouveau script et collez le code ci-dessous. Modifiez les constantes ip, subnet, gateway, dns, ssid et password. Enregistrez le script sous le nom ConnectWifi.py (par exemple)

def connect():
    import network
    
    ip        = '192.168.1.10'
    subnet    = '255.255.255.0'
    gateway   = '192.168.1.1'
    dns       = '8.8.8.8'
    ssid      = "nomReseauWiFi"
    password  =  "motDePasseWiFi"
 
    station = network.WLAN(network.STA_IF)
 
    if station.isconnected() == True:
        print("Already connected")
        return
 
    station.active(True)
    station.ifconfig((ip,subnet,gateway,dns))
    station.connect()
 
    while station.isconnected() == False:
        pass
 
    print("Connection successful")
    print(station.ifconfig())

def disconnect():
    import network
    station = network.WLAN(network.STA_IF)
    station.disconnect()
    station.active(False)

Téléversez le script sur la carte (Tools -> Download). Depuis l’interpréteur REPL, exécutez import ConnectWifi  puis ConnectWifi.connect(). La méthode disconnect() permet de déconnecter le module WiFi depuis vos scripts. Maintenant, on peut très simplement lancer la connexion WiFi depuis n’importe où comme ceci

import ConnectWifi
ConnectWiFi.connect()

Par exemple, si on veut lancer la connexion au démarrage, il suffit d’ouvrir le script boot.py et ajoutez les deux commandes précédentes.

Ressources utilisées pour rédiger cet article :

  • https://docs.micropython.org/en/latest/esp8266/library/network.html#module-network
  • https://techtutorialsx.com/2017/06/01/esp32-micropython-connecting-to-a-wifi-network/
  • http://docs.micropython.org/en/v1.8.7/esp8266/esp8266/tutorial/network_basics.html

Inscrivez-vous à la newsletter hebdomadaire

Aucun spam et aucun autre usage ne sera fait de votre email. Vous pouvez vous désinscrire à tout moment.

Promos à ne pas louper

6 Commentaires
  1. Bonjour,

    Parfois je souhaiterais juste utiliser un esp8266 ou esp32 pour des petits projets qui ne nécessitent pas l’utilisation du Wifi ou BT.

    Savez-vous comment couper ces services afin de ne pas consommer d’énergie ?

    est-ce que ne pas faire :

    station.active(True)

    suffirait ?

    • Bonjour Loukos. Il me semble que par défaut, WiFi et BT sont désactivés, donc pas de problème, rien à faire. Par contre à vérifier s’il n’y a pas une persistence des paramètres une fois qu’on a activé l’un ou l’autre auparavant.

  2. bonjour,
    – Le micropython est il plus simple ou plus complet que c++ ?
    – Permet il de gerer autant de sondes que esp easy ?
    – Peut on creer des graphiques à partir des données pour par exemple faire une sonde autonome sur laquellle on se connecte en wifi ou bluetooth ?

    Merci

    • Bonjour Gandolfi
      1. Non, le micropython n’est pas aussi complet et pas aussi rapide. L’intérêt est de permettre à tous ceux qui connaissent déjà le python d’utiliser rapidement ce langage sur un micro-contrôleur
      2. Non. Même s’il y a déjà beaucoup de driver pour les sondes courantes
      3. Oui, a priori c’est possible mais c’est encore au stade expérimental.

      • Je te remercie pour tes conseils. Je suis en train d’apprendre à mon fils le python et je me demandais si cela valait le coup pour l’esp8266. Il y a aussi l’option d’apprendre le javascript à 10 ans mais cela a l’air plus compliqué.

        • Je m’en doutais, j’ai eu la même idée que toi en testant. Vous allez rapidement être bloqué. Pour apprendre le Python, rien de mieux que le Raspberry Pi et son GPIO. A bientôt

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