|
|
(17 dazwischenliegende Versionen des gleichen Benutzers werden nicht angezeigt) |
Zeile 1: |
Zeile 1: |
− | Der Pico W hat ein Wlan Modul an Board. Nun wollwn wir sehen wie man sich mit dem Pico W beim Wlan anmeldet.<br> | + | Der Pico W hat ein Wlan Modul an Board. Nun wollen wir sehen wie man sich mit dem Pico W beim Wlan anmeldet.<br> |
| Wie immer bei Micropython müssen wir zuerst eine Instanz erstellen. In diesem Fall von der Klasse network.WLAN: | | Wie immer bei Micropython müssen wir zuerst eine Instanz erstellen. In diesem Fall von der Klasse network.WLAN: |
| <pre> | | <pre> |
| + | import network |
| + | |
| wlan = network.WLAN(network.STA_IF) | | wlan = network.WLAN(network.STA_IF) |
| </pre> | | </pre> |
− | Wir können unseren Pico W als als Station (network.STA_IF) anmelden oder ein neues Wlan aufmachen. Dazu müssen wir den Pico W als Accesspoint (network.AP_IF) oinitialisieren. | + | Wir können unseren Pico W als als Station (network.STA_IF) anmelden oder ein neues Wlan aufmachen. Dazu müssen wir den Pico W als Accesspoint (network.AP_IF) initialisieren. |
| <br> | | <br> |
| Nun muss die Wlan Instanz aktiviert werden. | | Nun muss die Wlan Instanz aktiviert werden. |
| <pre> | | <pre> |
| wlan.active(True) | | wlan.active(True) |
| + | </pre> |
| + | Nun haben wir eine Wlaninstanz erzeugt. Mit der Methode .scan() können wir jetzt nach erreichbaren Wlans scannen: |
| + | <pre> |
| + | wlans = wlan.scan() |
| + | for wl in wlans: |
| + | print(wl) |
| </pre> | | </pre> |
| Schließlich können wir unseren Pico W bei unserem Accesspoint (Router) anmelden. | | Schließlich können wir unseren Pico W bei unserem Accesspoint (Router) anmelden. |
Zeile 27: |
Zeile 35: |
| Im Prinzip können wir die Anmeldung mit diesen drei Schritten durchführen.<br> | | Im Prinzip können wir die Anmeldung mit diesen drei Schritten durchführen.<br> |
| In der Praxis funktioniert die Anmeldung aber nicht immer schnell und problemlos. Deshalb ist noch ein wenig Code nötig, der prüft, ob eine Verbindung zustande gekommen ist und ggf. noch darauf wartet, bevor das Programm weiter ausgeführt wird. | | In der Praxis funktioniert die Anmeldung aber nicht immer schnell und problemlos. Deshalb ist noch ein wenig Code nötig, der prüft, ob eine Verbindung zustande gekommen ist und ggf. noch darauf wartet, bevor das Programm weiter ausgeführt wird. |
| + | <br><br> |
| + | Das folgende Programm gibt zum einen Meldungen aus, so dass der User darüber informiert wird was gerade passiert.<br> |
| + | Zum Anderen prüft es, ob die Verbindung schon zustande gekommen ist. Wenn nicht wird weiter gewartet, wenn wird die Warteschleife abgebrochen und das Programm fortgesetzt. Dem User werden dann noch Informationen zum Wlan angezeigt.<br> |
| + | Wenn man eine Wlanverbindung aufbauen will sollte man immer diesen kleinen Codeschnipsel einsetzen, |
| + | <br> |
| + | Eine Verbesserung ist daran noch möglich: Ein Timeout einbauen und das Programm abbrechen, wenn die Verbindung nicht zustande kommt. |
| + | <br> |
| <pre> | | <pre> |
| import network | | import network |
Zeile 42: |
Zeile 57: |
| print('network config:', wlan.ifconfig()) | | print('network config:', wlan.ifconfig()) |
| </pre> | | </pre> |
− | Dieses Programm gibt zum einen Meldungen aus, so dass der User darüber informiert wird was gerade passiert.<br>
| + | Die Meldung nach dem erfolgreichen konnekten sieht so aus: |
− | Zum Anderen prüft es, ob die Verbindung schon zustande gekommen ist. Wenn nicht wird weiter gewartet, wenn wird die Warteschleife abgebrochen und das Programm fortgesetzt. Dem User werde dann noch Informationen zum Wlan angezeigt.<br>
| + | <pre> |
− | Wenn man eine Wlanverbindung aufbauen will sollte man immer diesen kleinen Codeschnipsel einsetzen,
| + | network config: ('192.168.2.86', '255.255.252.0', '192.168.0.1', '192.168.0.1') |
| + | </pre> |
| + | Die 4 Angaben enthalten die IP-Adresse des Gerätes, die Subnetmaske, die IP des Gateway(Router) und die IP des DNS. |
| <br> | | <br> |
− | Eine Verbesserung ist daran noch möglich: Ein Timeout einbauen und das Programm abbrechen, wenn die Verbindung nicht zustande kommt.
| |
| | | |
| + | <br> |
| + | Nun ist unser Pico W mit dem Wlan verbunden. Nun brauchen wir noch Programme, die das Wlan und das Internet nutzen. |
| | | |
− | * https://www.youtube.com/watch?v=Me7VM2z3_f8
| + | == Automatisch mit bekanntem Wlan verbinden== |
| + | Wenn man häufiger in unterschiedliche Wlans einloggen muss, ist es sehr hilfreich, wenn das Programm ein bekanntes Wlan selbst erkennt und sich dann automatisch einlogged. |
| + | <pre> |
| + | # wlantools.py |
| + | # |
| + | # Anwendung: |
| + | # from wlantools import * |
| + | # oder: |
| + | # from wlantools import wlan |
| + | # |
| | | |
| + | import network |
| | | |
| + | SSID = '' |
| + | PW = '' |
| | | |
| + | wlans_known = {'WLAN-B4ZFT5': 'geheim_2', |
| + | 'Kapest-Fritz': 'geheim_0', |
| + | 'Attraktor': 'geheim_1' |
| + | } |
| + | |
| + | wlan = network.WLAN(network.STA_IF) |
| + | wlan.active(True) |
| + | |
| + | wlans = wlan.scan() |
| + | |
| + | for wlan_found in wlans: |
| + | for wlan_known in wlans_known.keys(): |
| + | # print(wlan_found, wlan_known) |
| + | if str(wlan_found[0], 'utf-8') == wlan_known: |
| + | ssid_found = wlans_known[wlan_known] |
| + | exec(f'from {ssid_found} import SSID, PW') |
| + | if SSID: |
| + | break |
| + | if SSID: |
| + | break |
| + | |
| + | if SSID: |
| + | print(f'Wlan {SSID} gefunden') |
| + | if not wlan.isconnected(): |
| + | print('connecting to network...') |
| + | wlan.connect(SSID, PW) |
| + | while not wlan.isconnected(): |
| + | pass |
| + | print('network config:', wlan.ifconfig()) |
| + | else: |
| + | print('Kein bekanntes Wlan gefunden') |
| + | |
| + | </pre> |
| + | Die dazugehörigen geheim.py Dateien sehen ganz einfach aus: |
| + | <pre> |
| + | # geheim_1.py |
| + | # |
| + | # Wlan beim Attraktor |
| + | # |
| + | |
| + | SSID = 'Attraktor' |
| + | PW = 'blafablafa' |
| + | </pre> |
| + | |
| + | == Wlan als Accesspoint== |
| + | Habe ich nicht zum Laufen bekommen. |
| + | <!-- |
| + | <pre> |
| + | import network |
| + | |
| + | ap_if = network.WLAN(network.AP_IF) |
| + | ap_if.config(ssid='Pico_wlan', channel=11) |
| + | ap_if.active(True) |
| + | </pre> |
| + | |
| + | <pre> |
| + | ... |
| + | (b'Pico_wlan', b'(\xcd\xc1\x00J\xaa', 11, -36, 7, 11) |
| + | ... |
| + | </pre> |
| + | --> |
| | | |
| ==Navigation== | | ==Navigation== |
Aktuelle Version vom 6. Februar 2024, 17:03 Uhr
Der Pico W hat ein Wlan Modul an Board. Nun wollen wir sehen wie man sich mit dem Pico W beim Wlan anmeldet.
Wie immer bei Micropython müssen wir zuerst eine Instanz erstellen. In diesem Fall von der Klasse network.WLAN:
import network
wlan = network.WLAN(network.STA_IF)
Wir können unseren Pico W als als Station (network.STA_IF) anmelden oder ein neues Wlan aufmachen. Dazu müssen wir den Pico W als Accesspoint (network.AP_IF) initialisieren.
Nun muss die Wlan Instanz aktiviert werden.
wlan.active(True)
Nun haben wir eine Wlaninstanz erzeugt. Mit der Methode .scan() können wir jetzt nach erreichbaren Wlans scannen:
wlans = wlan.scan()
for wl in wlans:
print(wl)
Schließlich können wir unseren Pico W bei unserem Accesspoint (Router) anmelden.
wlan.connect('ssid', 'key')
Um die Zugangsdaten zum Wlan nicht mit dem Programm öffentlich zu machen, kann man diese in eine eigene Datei schreiben:
# geheim.py
SSID = 'Attraktor'
PW = 'blafablafa'
Dieses kleine Programm kann dann in das Wlan Programm importiert werden.
from geheim import SSID, PW
Im Prinzip können wir die Anmeldung mit diesen drei Schritten durchführen.
In der Praxis funktioniert die Anmeldung aber nicht immer schnell und problemlos. Deshalb ist noch ein wenig Code nötig, der prüft, ob eine Verbindung zustande gekommen ist und ggf. noch darauf wartet, bevor das Programm weiter ausgeführt wird.
Das folgende Programm gibt zum einen Meldungen aus, so dass der User darüber informiert wird was gerade passiert.
Zum Anderen prüft es, ob die Verbindung schon zustande gekommen ist. Wenn nicht wird weiter gewartet, wenn wird die Warteschleife abgebrochen und das Programm fortgesetzt. Dem User werden dann noch Informationen zum Wlan angezeigt.
Wenn man eine Wlanverbindung aufbauen will sollte man immer diesen kleinen Codeschnipsel einsetzen,
Eine Verbesserung ist daran noch möglich: Ein Timeout einbauen und das Programm abbrechen, wenn die Verbindung nicht zustande kommt.
import network
from geheim import SSID, PW
# Wlan Verbindung herstellen
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
if not wlan.isconnected():
print('connecting to network...')
wlan.connect(SSID, PW)
while not wlan.isconnected():
pass
print('network config:', wlan.ifconfig())
Die Meldung nach dem erfolgreichen konnekten sieht so aus:
network config: ('192.168.2.86', '255.255.252.0', '192.168.0.1', '192.168.0.1')
Die 4 Angaben enthalten die IP-Adresse des Gerätes, die Subnetmaske, die IP des Gateway(Router) und die IP des DNS.
Nun ist unser Pico W mit dem Wlan verbunden. Nun brauchen wir noch Programme, die das Wlan und das Internet nutzen.
Automatisch mit bekanntem Wlan verbinden
Wenn man häufiger in unterschiedliche Wlans einloggen muss, ist es sehr hilfreich, wenn das Programm ein bekanntes Wlan selbst erkennt und sich dann automatisch einlogged.
# wlantools.py
#
# Anwendung:
# from wlantools import *
# oder:
# from wlantools import wlan
#
import network
SSID = ''
PW = ''
wlans_known = {'WLAN-B4ZFT5': 'geheim_2',
'Kapest-Fritz': 'geheim_0',
'Attraktor': 'geheim_1'
}
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlans = wlan.scan()
for wlan_found in wlans:
for wlan_known in wlans_known.keys():
# print(wlan_found, wlan_known)
if str(wlan_found[0], 'utf-8') == wlan_known:
ssid_found = wlans_known[wlan_known]
exec(f'from {ssid_found} import SSID, PW')
if SSID:
break
if SSID:
break
if SSID:
print(f'Wlan {SSID} gefunden')
if not wlan.isconnected():
print('connecting to network...')
wlan.connect(SSID, PW)
while not wlan.isconnected():
pass
print('network config:', wlan.ifconfig())
else:
print('Kein bekanntes Wlan gefunden')
Die dazugehörigen geheim.py Dateien sehen ganz einfach aus:
# geheim_1.py
#
# Wlan beim Attraktor
#
SSID = 'Attraktor'
PW = 'blafablafa'
Wlan als Accesspoint
Habe ich nicht zum Laufen bekommen.
Navigation
Zurück zur "Micropython Kurs 2023 Teil 2" Startseite
Zurück zur "Micropython Kurs 2023" Startseite
Zurück zur Programmieren Startseite
Zurück zur Wiki Startseite