Pico Wireless : MicroPython et le WiFi

Bonjour à tous,

Poursuivons les découvertes du Pico Wireless  en nous penchant sur le module WiFi.

Pico Wireless sous MicroPython

Alors MicroPython dispose de la bibliothèque network pour interagir avec le module WiFi.

La classe WLAN permet d'accéder à l'interface du Pico en mode STA_IF (Station) et en mode AP_IF (Access Point).

  • Station: dans ce mode, le Pico se comporte comme un client WiFi au même titre que votre tablette, smartphone et ordinateur. Le Pico se connecte donc sur une modem/routeur WiFi. Le Pico peut facilement contacter les autres machines ou accéder à Internet.
  • Access Point: dans ce mode, le Pico se comporte comme un modem/routeur WiFi et attend la connexion de clients (comme SmartPhone, tablette, etc). Ce mode est moins utilisé et servira, par exemple, pour configurer votre projet fonctionnant sur le Pico.
  • Access Point + Station: il se fait que MicroPython est capable de fonctionner dans les deux modes en même temps. Hormis effectuer la configuration  réseau STA en se connectant sur le point d'accès, cela permettra aussi de créer des réseaux maillés.

WiFi en mode Station

Voici des instructions que vous pouvez dans une sessions REPL dans votre propre environnement.

Les constantes utiles

Commençons par énumérer le constantes (et valeurs) du statut de connexion contenu dans la bibliothèque network.

  • network.STAT_CONNECT_FAIL = -1 : Connexion échouée
  • network.STAT_GOT_IP = 3 : Adresse IP Obtenue
  • network.STAT_IDLE = 0 : Non utilisé
  • network.STAT_NO_AP_FOUND = -2 : Point d'accès pas trouvé
  • network.STAT_WRONG_PASSWORD = -3 : mauvais mot de passe

Identifier les réseaux disponibles

La méthode scan() permet d'identifier les réseaux disponibles à proximité

>>> import network
>>> # Interface en mode Station
>>> wlan = network.WLAN( network.STA_IF )
>>> # Activer l'interface
>>> wlan.active( True )
>>> # Scan des réseaux WiFi
>>> wlan.scan()
[(b'Orange-e02b2', b'\x10\x0ckd\xf6n', 2, -72, 5, 4), 
 (b'WiFi-2.4-69F0', b'\xa0\x1b)\x9ci\xf6', 6, -82, 5, 4), 
 (b'Proximus Public Wi-Fi', b'\xa2\x1b)\x9ci\xf7', 6, -79, 5, 2), 
 (b'ATCG_EXT', b'\x001\x92\xf3\xe9\xd2', 11, -58, 7, 8), 
 (b'ATCG', b'@\xf2\x01\x88\x1e\n', 11, -71, 5, 3), 
 (b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'\x00\x1d.\x0f\xf7\x98', 13, -94, 0, 1)]
>>> wlan.status()
0 

Scan retourne une liste de tuple contenant les éléments suivants:

(ssid, bssid, channel, RSSI, security, hidden)

  • Le ssid permet d'identifier le réseau, 
  • le rssi permet d'indiquer la force du signal. Une valeur toujours négative, plus elle est proche de 0 et plus fort est le signal. Une valeur de -85 à -95 indique un signal très faible. Le signal de -58 est tout à fait correct.
  • Security indique le type de sécurité applicable
  • hidden indique si le réseau est masqué (avec un 1) 

Voici les valeurs correspondant au différents niveaux de sécurité.

  • 0 : ouvert
  • 1 : WEP
  • 2 : WPA-PSK
  • 3 : WPA2-PSK
  • 4 : WPA/WPA2-PSK
  • 5 : WPA3

Se connecter sur un réseau WiFi

La méthode connect(ssid,key) permet de se connecter sur un réseau WiFi identifié par son SSID et en fournissant le mot de passe (key) s'il est requis.
La méthode disconnect() permettra de déconnecter le Pico du WiFi.
>>> import network
>>> # Interface en mode Station
>>> wlan = network.WLAN( network.STA_IF )
>>> # Activer l'interface
>>> wlan.active( True )
>>> # Scan des réseaux WiFi
>>> wlan.connect(b'ATCG', b'poetpoet')
>>> wlan.status()
3

La valeur 3 correspond à la constante network.STAT_GOT_IP . Oui, nous sommes bien connectés.

>>> wlan.isconnected()
True

Utiliser la méthode isconnected() est également une façon très commode  pour tester l'état de la connexion. Celle-ci retourne False durant l'établissement de la connexion puis passe à True une fois celle-ci établie.

Information sur la connexion en cours

Enfin, la classe WLAN expose la méthode ifconfig() permettant d'obtenir des informations sur la connexion établie avec le point d'accès.

>>> wlan.ifconfig()
('192.168.1.23', '255.255.255.0', '192.168.1.1', '192.168.1.1')
>>>

Nous retrouvons les 4 éléments usuels d'une connexion WiFi

( ip_obtenue, masque_reseau, gateway, dns )

 

Etablir la connexion WiFi au démarrage

C'est justement le boulot du fichier boot.py présent à la racine du système de fichiers MicroPython.  Il est destiné à la configuration matérielle.

L'exemple ci-dessous est utilisé pour établir la connexion WiFi depuis le fichier boot.py . Il provient des différents exemples du projet "la Maison Pythonique"

WIFI_SSID = "MY_WIFI_SSID"
WIFI_PASSWORD = "MY_PASSWORD"

def sta_connect():
    import network
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    if not wlan.isconnected():
        # connecting to network...
        wlan.connect( WIFI_SSID, WIFI_PASSWORD )
        
        while not wlan.isconnected():
            pass

sta_connect()

import gc
#import webrepl
#webrepl.start()
gc.collect(

Le script a néanmoins un défaut... il reste bloqué si le réseau WiFi n'est pas disponible. Je vous propose donc de lire les autres exemples disponibles pour en choisir un plus abouti.

https://github.com/mchobby/la-maison-pythonic/tree/master/esp8266/boot

Ensuite

Maintenant que le Pico est capable d'établir une connexion WiFi, il est maintenant possible d'envisager de nombreuses applications que nous explorerons dans d'autres articles.

Ressources

Plus d'information sur la bibliothèque Network depuis la documentation MicroPython.


Aucun commentaire