MicroPython, gérer la connexion WiFi au démarrage sur ESP8266/ESP32 • Domotique et objets connectés à faire soi-même

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.

Quelques cartes de développement compatibles MicroPython

Le langage MicroPython est de plus en plus pré-installé sur les cartes de développement à base d’ESP32, ESP8266 ou STM32. Voici une sélection des cartes les plus vendues.

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’icône 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 paramètres 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

Avez-vous aimé cet article ? [Total: 0 Moyenne: 0]