Hack-wipy-wlan

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche


MCHobby investit du temps et de l'argent dans la réalisation de traduction et/ou documentation. C'est un travail long et fastidieux réalisé dans l'esprit Open-Source... donc gratuit et librement accessible.
SI vous aimez nos traductions et documentations ALORS aidez nous à en produire plus en achetant vos produits chez MCHobby.

Configuration WiFi par défaut

La configuration par défaut du WiPy est décrite ici

Led Heartbeat et configuration

La modification de configuration se fait dans le fichier boot.py. Une fois configuré, vous pourrez redémarrer votre WiPy en faisant un machine.reset() comme indiqué ici.

S'il y a une erreur dans boot.py, le script:

  • Ne pourra par être chargé (erreur de syntaxe)
  • Ne sera pas exécuté complètement (erreur sur une ligne)

En cas d'erreur, la LED heartbeat clignotera alors rapidement, histoire de vous prévenir que quelque-chose n'a pas fonctionné comme attendu (voyez LED heartbeat pour plus de détails).

Si vous avez corrompu votre fichier boot.py, vous certainement besoin d'utiliser

Configuration WLAN étape par étape

Le système WLAN (WiFi) est une fonctionnalité du WiPy, elle est par conséquent toujours activée, même durant un machine.SLEEP.

Le seul moment où le WLAN est indisponible c'est quand le WiPy est en mode deepsleep (hibernation).

Si vous avez besoin d'obtenir l'instance WLAN en cours d'utilisation, faites:

>>> from network import WLAN
>>> wlan = WLAN() # nous appelons le constructeur dans paramètres.

Vous pouvez vérifier le mode de fonctionnement actuel du WLAN comme suit:

>>> wlan.mode()

Note: Après une mise sous tension, le mode est toujours WLAN.AP (soit en Access Point/point d'accès)

Vous connecter sur votre routeur WiFi en DHCP

La carte WiFi/WLAN démarre toujours en mode WLAN.AP (point d'accès WiFi), il faut donc commencer par configurer le WiPy comme client (comme une station en anglais, donc en mode STA).

Le WiPy est capable d'utiliser une configuration en IP Fixe (voir point suivant) mais aussi capable de recevoir une adresse IP dynamique (assigné par votre routeur à l'aide de DHCP).

Il sera nécessaire de connaître l'identifiant de votre réseau WiFi (son SSID) mais surtout, dans le cadre de cet exemple, votre modem WiFi doit faire un broadcast de son SSID (bref, il doit s'annoncer).

from network import WLAN
wlan = WLAN(mode=WLAN.STA)

Il est maintenant possible de réaliser une énumération (un scan) des réseaux WiF:

nets = wlan.scan()
for net in nets:
    if net.ssid == 'monwifi':
        print('Reseau trouvé!')
        wlan.connect(net.ssid, auth=(net.sec, 'ma_cle_wifi'), timeout=5000)
        while not wlan.isconnected():
            machine.idle() # économiser de l'energie durant les temps d'attente
        print('Connexion WLAN/WiFi OK!')
        break

Assigner une adresse IP Fixe

Vous pouvez utiliser le script /flash/boot.py suivant si vous voulez que votre WiPy se connecter sur le routeur WiFi de votre maison en utilisant une adresse IP Fixe.

Une adresse IP Fixe facilite les connexion Telnet et/ou FTP car vous connaissez l'adresse IP de votre WiPy:

import machine
from network import WLAN
wlan = WLAN() # Obtenir l'objet actuel, sans changer le mode

# Configurer le WiFi uniquement sur on redemarre le WiPy.
# Ne pas modifier la config WiFi si on fait une réinitialisation logicielle avec CTRL-D
if machine.reset_cause() != machine.SOFT_RESET:
    wlan.init(WLAN.STA)
    # La configuration ci-dessous DOIT CORRESPONDRE A VOTRE ROUTEUR WIFI!!
    wlan.ifconfig(config=('192.168.178.107', '255.255.255.0', '192.168.178.1', '8.8.8.8'))
    # Exemple sur mon routeur, j'ai configuré l'adresse IP Fixe 192.168.1.220
    # wlan.ifconfig(config=('192.168.1.220', '255.255.255.0', '192.168.1.1', '8.8.8.8'))

if not wlan.isconnected():
    # Modifiez la ligne suivante pour utiliser le ssid, sécurité et mot de passe de votre réseau WiFi
    wlan.connect('mon_wifi', auth=(WLAN.WPA2, 'ma_cle_wifi'), timeout=5000)
    while not wlan.isconnected():
        machine.idle() # économiser de l'énergie pendant l'attente

Réseaux multiples avec IP Fixe

Le script suivant (trouvé sur pycom.io) est très ingénieux sur le plan des fonctionnalités.

Le script essayer de connecter la plateforme sur un des réseaux WiFi renseignés dans la configuration. Si la connexion échoue il passe la plateforme en mode AP (Access Point - point d'accès) . Cette façon de faire permet de proposer une interface de configuration WiFi pour sélectionner et configurer la connexion sur le réseau WiFi du routeur... puis de basculer sur le réseau du routeur après le rédémarrage du WiPy.

import os
import machine

uart = machine.UART(0, 115200)
os.dupterm(uart)

known_nets = {
    '<net>': {'pwd': '<password>'},
    '<net>': {'pwd': '<password>', 'wlan_config':  ('10.0.0.114', '255.255.0.0', '10.0.0.1', '10.0.0.1')}, # (ip, subnet_mask, gateway, DNS_server)
}

if machine.reset_cause() != machine.SOFT_RESET:
    from network import WLAN
    wl = WLAN()
    wl.mode(WLAN.STA)
    original_ssid = wl.ssid()
    original_auth = wl.auth()

    print("Scanning for known wifi nets")
    available_nets = wl.scan()
    nets = frozenset([e.ssid for e in available_nets])

    known_nets_names = frozenset([key for key in known_nets])
    net_to_use = list(nets & known_nets_names)
    try:
        net_to_use = net_to_use[0]
        net_properties = known_nets[net_to_use]
        pwd = net_properties['pwd']
        sec = [e.sec for e in available_nets if e.ssid == net_to_use][0]
        if 'wlan_config' in net_properties:
            wl.ifconfig(config=net_properties['wlan_config'])
        wl.connect(net_to_use, (sec, pwd), timeout=10000)
        while not wl.isconnected():
            machine.idle() # save power while waiting
        print("Connected to "+net_to_use+" with IP address:" + wl.ifconfig()[0])

    except Exception as e:
        print("Impossible de se connecter sur un reseau, passe en mode AP")
        wl.init(mode=WLAN.AP, ssid=original_ssid, auth=original_auth, channel=6, antenna=WLAN.INT_ANT)

Modifier le login

Pour vous connecter sur votre WiPy en FTP ou Telnet, vous utiliser le login et mot de passe par défaut du WiPy (login: micro, mot de passe: python).

Il est vivement conseillé de modifier cette configuration par défaut, sinon votre WiPy est trop facilement accessible.

La modification du mot de passe se fait en utilisant la classe Server du module network (comme décrit ici).

Voici un exemple:

import network 
# référence vers l'instance serveur
server = network.Server() 
# désactive le serveur
server.deinit() 
# Réactive le serveur avec la nouvelle configuration
server.init(login=(utilisateur, mot_de_passe), timeout=600)

Il ne reste plus qu'à mettre cela en musique dans le fichier boot.py de la même façon que pour les adresses IP fixe.

Voici le script utilisé sur mon WiPy:

  • IP Fixe et
  • modif de login (les comptes utilisateurs et mot-de-passe masqués).
import machine
from network import WLAN
from network import Server
wlan = WLAN() # Obtenir l'objet actuel, sans changer le mode

# Configurer le WiFi uniquement sur on redemarre le WiPy.
# Ne pas modifier la config WiFi si on fait une réinitialisation logicielle avec CTRL-D
if machine.reset_cause() != machine.SOFT_RESET:
    wlan.init(WLAN.STA)
    # La configuration ci-dessous DOIT CORRESPONDRE A VOTRE ROUTEUR WIFI!!
    wlan.ifconfig(config=('192.168.1.205', '255.255.255.0', '192.168.1.1', '8.8.8.8'))

if not wlan.isconnected():
    # Modifiez la ligne suivante pour utiliser le ssid, sécurité et mot de passe de votre réseau WiFi
    wlan.connect('mon_wifi', auth=(WLAN.WPA2, 'wifi_password'), timeout=5000)
    while not wlan.isconnected():
        machine.idle() # économiser de l'énergie pendant l'attente
    # Modifier le login et mot de passe par défaut
    server = Server()
    server.deinit()
    server.init( login=('user1', '456789'), timeout=600 )

Adresse MAC

Si vous avez besoin de connaître l'adresse MAC de votre WiPy, ce qui arrive lorsque l'on a besoin de filtrer les accès sur un routeur, vous pouvez l'obtenir à l'aide des instructions suivantes:

import machine
# Retourne l'identifiant unique de la carte codé sur 6 octets/bytes (l'adresse MAC du WiPy)
machine.unique_id()

Tutoriel WiPy tutorials and examples & general information about WiPy sous copyright de Damien George et contributeurs en ce qui concerne MicroPython et/ou PyCom en ce qui concerne les informations relatives a WiPy et LoPy.

Tutoriel traduit par Meurisse D. pour MCHobby.be

Traduit avec l'autorisation de micropython.org - Translated with the authorisation of micropython.org également avec l'accord de Daniel Compara (créateur de WiPy).

Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : «  Traduction par MCHobby (www.MCHobby.be) - Vente de kit et composants » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.

L'utilisation commercial de la traduction (texte) et/ou réalisation, même partielle, pourrait être soumis à redevance. Dans tous les cas de figures, vous devez également obtenir l'accord du(des) détenteur initial des droits. Celui de MC Hobby s'arrêtant au travail de traduction proprement dit.