Différences entre versions de « Hack-wipy-wlan »

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche
 
(17 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
 
{{WIPY-NAV}}
 
{{WIPY-NAV}}
  
{{traduction}}
+
== Configuration WiFi par défaut ==
 +
La [[Hack-wipy-generalite#Config_r.C3.A9seau_.28WLAN.29_par_d.C3.A9faut|configuration par défaut du WiPy est décrite ici]]
 +
 
 +
== Led Heartbeat et configuration ==
 +
La modification de configuration se fait dans le fichier {{fname|boot.py}}. Une fois configuré, vous pourrez redémarrer votre WiPy en faisant un [[Hack-wipy-boot-mode#R.C3.A9initialisation_mat.C3.A9rielle|{{fname|machine.reset()}} comme indiqué ici]].
 +
 
 +
S'il y a une erreur dans {{fname|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 [[Hack-wipy-generalite#La_LED_heartbeat|LED heartbeat]] pour plus de détails).
 +
 
 +
Si vous avez corrompu votre fichier {{fname|boot.py}}, vous certainement besoin d'utiliser
 +
* [[Hack-wipy-boot-mode#Safe_Boot_:_le_mode_sans_.C3.A9chec|Safe Boot : pour démarrer en mode sans échec]]
 +
* [[Hack-wipy-boot-mode#R.C3.A9initialiser_le_syst.C3.A8me_de_fichier|Réinitialiser le système de fichier]]
  
 
== Configuration WLAN étape par étape ==
 
== Configuration WLAN étape par étape ==
Ligne 30 : Ligne 44 :
 
}}
 
}}
  
== Vous connecter sur votre routeur WiFi ==
+
== 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):
+
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).
  
 
<syntaxhighlight lang="python">
 
<syntaxhighlight lang="python">
Ligne 53 : Ligne 71 :
  
 
== Assigner une adresse IP Fixe ==
 
== Assigner une adresse IP Fixe ==
If you want your WiPy to connect to your home router after boot-up, and with a fixed IP address so that you can access it via telnet or FTP, use the following script as {{fname|/flash/boot.py}}:
+
Vous pouvez utiliser le script {{fname|/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:
  
 
<syntaxhighlight lang="python">
 
<syntaxhighlight lang="python">
 
import machine
 
import machine
 
from network import WLAN
 
from network import WLAN
wlan = WLAN() # get current object, without changing the mode
+
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:
 
if machine.reset_cause() != machine.SOFT_RESET:
 
     wlan.init(WLAN.STA)
 
     wlan.init(WLAN.STA)
     # configuration below MUST match your home router settings!!
+
     # 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'))
 
     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
 +
</syntaxhighlight>
 +
 +
{{ambox|text=Avez-vous remarqué le test sur la cause du réset et le statut de la connexion? Ces tests sont cruciaux pour permettre de faire un soft-reset (avec CTRL-D) durant un session REPL '''sans interrompre''' la connexion en cours.}}
 +
 +
== 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.
 +
 +
<syntaxhighlight lang="python">
 +
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)
 +
</syntaxhighlight>
 +
 +
== 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: {{fname|micro}}, mot de passe: {{fname|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 {{fname|Server}} du module {{fname|network}} (comme décrit [https://micropython.org/resources/docs/en/latest/wipy/library/network.html#network-server ici]).
 +
 +
Voici un exemple:
 +
<syntaxhighlight lang="python">
 +
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)
 +
</syntaxhighlight>
 +
 +
Il ne reste plus qu'à mettre cela en musique dans le fichier {{fname|boot.py}} de la même façon [[Hack-wipy-wlan#Assigner_une_adresse_IP_Fixe|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).
 +
 +
<syntaxhighlight lang="python">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():
 
if not wlan.isconnected():
     # change the line below to match your network ssid, security and password
+
     # Modifiez la ligne suivante pour utiliser le ssid, sécurité et mot de passe de votre réseau WiFi
     wlan.connect('mywifi', auth=(WLAN.WPA2, 'mywifikey'), timeout=5000)
+
     wlan.connect('mon_wifi', auth=(WLAN.WPA2, 'wifi_password'), timeout=5000)
 
     while not wlan.isconnected():
 
     while not wlan.isconnected():
         machine.idle() # save power while waiting
+
         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 )
 
</syntaxhighlight>
 
</syntaxhighlight>
  
{{ambox|text=Notice how we check for the reset cause and the connection status, this is crucial in order to be able to soft reset the WiPy during a telnet session without breaking the connection.}}
+
== 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:
 +
 
 +
<syntaxhighlight lang="python">
 +
import machine
 +
# Retourne l'identifiant unique de la carte codé sur 6 octets/bytes (l'adresse MAC du WiPy)
 +
machine.unique_id()
 +
</syntaxhighlight>
  
 
{{WIPY-TRAILER}}
 
{{WIPY-TRAILER}}

Version actuelle datée du 13 mars 2017 à 14:35


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.