Raspberry Pi Pico W: Troubleshooting WLAN

Wenn es mit dem Raspberry Pi Pico W und der WLAN-Verbindung Probleme gibt, dann ist das nicht immer ganz einfach zu lösen. Dazu muss man wissen, dass Funkverbindungen selten problemlos sind, was in der Natur der Sache liegt. Der Umgang mit diesen Problemen ist immer etwas schwierig, weil man nicht „sieht“ was passiert oder wo genau das Problem liegt.

Übersicht

  • Fehlermeldung: ImportError: no module named network
  • Problem: WLAN-Verbindung wird nicht hergestellt
  • Problem: Die WLAN-Verbindung funktioniert nur manchmal
  • Grundsätzliche Fehlerquellen

Fehlermeldung: ImportError: no module named network

Die Fehlermeldung bedeutet, dass das Modul „network“ fehlt. Das heißt, es existiert nicht als Bibliothek und auch nicht in der Firmware. Das wird in der Regel daran liegen, dass man für den Raspberry Pi Pico W die falsche Firmware verwendet. Also nur die für den Pico ohne WLAN, weil dort das Modul „network“ nicht gebraucht wird.

Man löst das Problem dadurch, dass man die richtige Firmware herunterlädt. Für MicroPython für den Raspberry Pi Pico und Pico W gibt es jeweils ein eigenes Download-Verzeichnis:

Download unter „Firmware / Releases“ die Datei herunterladen, die mit „(latest)“ gekennzeichnet ist.

Zum Installieren die BOOTSEL-Taste am Pico gedrückt halten und per USB mit den Host-Computer verbinden. Dann die heruntergeladene UF2-Datei auf das Laufwerk „RPI-RP2“ kopieren. Nach dem Kopiervorgang meldet sich das Laufwerk automatisch ab. Danach ist das Modul verfügbar und kann mit „import network“ geladen werden.

Problem: WLAN-Verbindung wird nicht hergestellt

Folgendes Szenario: In einem MicroPython-Programmcode wird eine Verbindung zu einem WLAN hergestellt. Dazu wurde im Programmcode WLAN-Name (SSID) und Passwort hinterlegt. Doch leider wird die Verbindung nicht hergestellt.

Bevor Du Dich auf die Fehlersuche und Analyse begibst, solltest Du die zwei folgenden Punkte berücksichtigen:

  • Hat sich an den Zugangsdaten wirklich nichts geändert? Das andere Clients Probleme mit der WLAN-Verbindung haben, sollte man ausschließen können.
  • Hat sich die Position des WLAN-Routers bzw. Access Points nicht verändert? Verändert man die Platzierung des WLAN-Routers, dann verändert sich auch die Reichweite des WLANs. Es kann WLAN-Clients geben, die sich dann nicht mehr verbinden können.

WLANs in der Umgebung scannen

Ausgangspunkt bei unklaren WLAN-Problemen sollte ein WLAN-Scan sein, der die empfangbaren WLANs in der Umgebung anzeigt.

# Bibliotheken laden
import network

# Client-Betrieb
wlan = network.WLAN(network.STA_IF)

# WLAN-Interface aktivieren
wlan.active(True)

# WLANs ausgeben
print(wlan.scan())

Hier sollte das WLAN, mit dem sich der Raspberry Pi Pico W verbinden soll, aufgelistet sein. Wenn das nicht der Fall ist, dann sollte man die Verbindung noch mit einem anderen WLAN-Client prüfen. Wenn das WLAN mit einem anderen WLAN-Client funktioniert, dann wird das Problem nicht der Programmcode oder der Pico sein. Die Lösung ist dann beim WLAN-Router bzw. Access-Point zu suchen.

WLAN-Verbindungsstatus ermitteln

Zuerst gilt es, den Status einer WLAN-Verbindung (value of cyw43_wifi_link_status) zu ermitteln und dann richtig zu interpretieren. Dazu ist folgender Programmcode zu verwenden, der versucht eine WLAN-Verbindung herzustellen und anschließend den Status der WLAN-Verbindung ausgibt.

Hinweis: WLAN-Name und WLAN-Passwort eintragen.

# Bibliotheken laden
import network
import rp2
import time

# WLAN-Konfiguration
wlanSSID = 'WLANNAME'
wlanPW = 'WLANPASSWORD'
rp2.country('DE')

# WLAN-Verbindung herstellen
wlan = network.WLAN(network.STA_IF)
if not wlan.isconnected():
    print('WLAN-Verbindung herstellen')
    wlan.active(True)
    wlan.connect(wlanSSID, wlanPW)
    sleep(5)

# WLAN-Verbindung prüfen
if wlan.isconnected():
    print('WLAN-Verbindung hergestellt')
else:
    print('Keine WLAN-Verbindung')

# WLAN-Verbindungsstatus
print('WLAN-Status:', wlan.status())

Der Treiber für den WLAN-Funkchip gibt mit dem Kommando "wlan.status()" den Status für ein WLAN-Verbindung zurück. Hierzu sind im Treiber mehrere Werte hinterlegt (value of cyw43_wifi_link_status). Die Kürzel und Werte sind allerdings nicht sehr aussagekräftig. Wir klären, was der Status jeweils bedeutet. Außerdem klären wir, was die Lösung sein könnte, wenn eine Verbindung zum WLAN fehlschlägt.

Grundsätzlich gilt: Ein Status von -1 bis -3 kommt immer dann, wenn ein Verbindungsaufbau abgebrochen wurde. Ein Status von 1 und 2 bedeutet, dass der Verbindungsaufbau und die IPv4-Konfiguration noch nicht vollständig abgeschlossen ist. Der Status 3 bedeutet, dass die WLAN-Verbindung erfolgreich war und die IPv4-Konfiguration vollständig abgeschlossen ist.

  • CYW43_LINK_DOWN (0): Es besteht keine WLAN-Verbindung.
  • CYW43_LINK_JOIN (1): Es besteht ein Verbindungsaufbau-Versuch, der aber noch nicht vollständig abgeschlossen ist.
  • CYW43_LINK_NOIP (2): Der Verbindungsaufbau war erfolgreich, das Interface hat aber noch keine IP-Konfiguration. Es kann sein, dass zu diesem Zeitpunkt der Verbindungsaufbau noch nicht vollständig durchlaufen ist, oder das Netzwerk keinen DHCP-Server zum Verteilen einer IP-Konfiguration hat.
  • CYW43_LINK_UP (3): Der Verbindungsaufbau war erfolgreich und ist in der Regel vollständig.
  • CYW43_LINK_FAIL (-1): Der Verbindungsaufbau wurde abgebrochen.
  • CYW43_LINK_NONET (-2): Der Verbindungsaufbau wurde abgebrochen, weil das angegebene WLAN (SSID) nicht gefunden wurde, bzw. nicht erreichbar ist. Hier sollte man einen WLAN-Scan durchführen, um zu prüfen, ob das WLAN für den Raspberry Pi Pico W überhaupt empfangbar ist. Achtung, es kann sein, dass das WLAN-Signal für den Pico zu schwach ist.
  • CYW43_LINK_BADAUTH (-3): Der Verbindungsaufbau wurde abgebrochen, weil die Authentifizierung fehlgeschlagen ist. In der Regel wird hier das WLAN-Passwort falsch sein. Hier ist die Eingabe des WLAN-Passworts zu prüfen und zu korrigieren.

Lösungen bei WLAN-Status -3 und -2

Beim WLAN-Status -3 ist die Authentifizierung fehlgeschlagen. In der Regel ist das eingegebene WLAN-Passwort falsch. Hier ist zu beachten, dass es kein Tippfehler sein muss. Es kann auch an einem Sonderzeichen im Passwort liegen, dass nicht richtig interpretiert wird. Bei WLAN-Passwörtern gilt, sich möglichst auf Buchstaben und Zahlen zu beschränken. Das Passwort muss mindestens 8 Zeichen lang sein. Je länger, desto länger dauert das Erraten und desto sicherer ist das Passwort.

Beim WLAN-Status -2 ist das betreffende WLAN nicht zu erreichen. Zuerst sollte man die Schreibweise des WLAN-Namens (SSID) prüfen. Wenn das korrekt ist, dann sollte man einen WLAN-Scan durchführen und prüfen, ob der Pico überhaupt in der Lage ist, das WLAN zu empfangen.

Problem: Die WLAN-Verbindung funktioniert nur manchmal

Wenn die WLAN-Verbindung nur manchmal funktionieren, dann wird es vermutlich nicht an falschen Zugangsdaten liegen. Und sicherlich auch nicht an einem fehlerhaften Programmcode. Du wirst den Fehler woanders suchen müssen. Vermutlich stimmt etwas mit der Konfiguration des WLAN-Routers oder des Access-Points nicht.

In manchen WLAN-Basisstationen existiert ein Kompatibilitätsmodus, der auch alte WLAN-Standards und somit alte WLAN-Geräte unterstützt. Nun würde man bei einem Raspberry Pi Pico W nicht an ein altes WLAN-Gerät denken. Doch wenn man in das Datenblatt des Pico W oder des Funkchips nachschaut, dann wird man feststellen, dass dort explizit die Übertragungsmodi der beiden alten WLAN-Standards IEEE 802.11b und 11g erwähnt werden. Wenn der Pico W keine WLAN-Verbindung mit dem Standard IEEE 802.11n hinbekommt, weil dafür das Funksignal zu schwach ist, dann muss der Funkchip des Pico W zwangsläufig auf die Übertragungsmodi von 11g oder sogar 11b runterschalten. Aber, wenn der Access-Point das nicht anbietet, dann sieht der Funkchip des Pico W dieses WLAN nicht und kann sich auch nicht verbinden.

Konfiguration WLAN-Router oder Access-Point

Kompatibilitätsmodus

Im ersten Schritt sollte man den Kompatibilitätsmodus in der Konfigurationsoberfläche des WLAN-Routers oder Access-Points identifizieren. Im einfachsten Fall muss man nur einen Haken setzen. Bei einer Fritzbox ist es einfacher, weil explizit genannt ist, welche WLAN-Standards unterstützt werden sollen.
Für eine maximale Kompatibilität sollten die alten WLAN-Standards IEEE 802.11b, 11g und 11n eingeschaltet sein.
Aber, es kann sein, dass das nichts bringt. Man kann diese Einstellung dann auch wieder zurückstellen.

In einem zweiten Schritt sollte man feststellen, auf welchem Kanal im 2,4-GHz-Frequenzspektrum das WLAN betrieben wird. In den meisten WLAN-Routern wird hier eine automatische Kanalwahl (z. B. Autokanal) eingestellt sein, was in der Praxis auch sinnvoll ist. Leider kann das bedeuten, dass die automatische Wahl auf Kanal 12 oder 13 fallen kann. Manchen WLAN-Geräte unterstützen diese beiden Kanäle nicht.
Es kann sinnvoll sein, den zu Funkkanal manuell auf Kanal 4 oder 9 einzustellen.

Die Frage ist, ob diese Einstellungen irgendwelche Nebeneffekte haben können? Ja, sicherlich. Der Kompatibilitätsmodus, insbesondere mit dem Standard IEEE 802.11b, kann dazu führen, dass das WLAN für schnelle WLAN-Geräte langsamer wird. In der Praxis wird man das kaum bemerken. Im Gegenteil, denn im Kompatibilitätsmodus wird man weniger Verbindungsprobleme haben. Außerdem wird ein WLAN typischerweise als Zugang zum Internet genutzt. Typische Internet-Anschlüsse über DSL und TV-Kabel sind selten schneller als das WLAN.
Die manuelle Einstellung des Funkkanals kann dazu führen, dass man einen Kanal wählt, der ungünstig ist und von anderen WLANs ebenfalls genutzt wird. In Zeiten mit viel Datenverkehr in anderen WLAN-Netzen müssen sich alle WLANs auf dem selben Kanal die Bandbreite teilen. Und das bedeutet, dass das eigene und die anderen WLANs langsamer werden.

Grundsätzliche Fehlerquellen

Wir müssen uns, wenn wir nicht genau wissen was los ist, irgendwie dem Problem nähern. Dazu sollten folgende grundsätzlichen Fehlerquellen beachtet und berücksichtigt werden.

  • Reichweite der Funksignale
  • Frequenzbereich
  • Länderspezifische Einstellungen

Reichweite der Funksignale

Die mögliche Distanz zum Wireless Access Point (WLAN-Router oder ähnlich) wird mit 30 Metern in Innenräumen in der Regel sehr optimistisch angegeben. Doch gerade was Entfernungen bei Funkverbindungen angeht, sollte man vorsichtig sein. Was heute noch geht, muss morgen nicht mehr funktionieren.

Da jeder überall ein WLAN betreiben kann, ist auch überall mit fremden WLANs zu rechnen, über die man keine Kontrolle hat. Fremde WLANs muss man als störende Elemente betrachten, die nicht nur Einfluss auf die Datenrate haben, sondern auch auf die Verbindungsqualität. Mit steigender Anzahl von fremden WLANs und WLAN-Clients in der Umgebung steigt auch die Fehlerrate im eigenen WLAN an.

Je näher sich ein WLAN-Client am Access Point befindet, desto stabiler wird die WLAN-Verbindung sein. Je weiter weg, desto mehr fremde WLANs werden in die eigene Funkverbindung hineinfunken und vielleicht die Verbindung stören.

Frequenzbereich

Für die WLAN-Technik gibt es mehrere Frequenzbereiche, die je nach Land unterschiedlich breit sein können. Der Hauptfrequenzbereich liegt bei 2,4 GHz und zwei weitere liegen bei 5 GHz und 6 GHz. Der Raspberry Pi Pico W beherrscht nur den Frequenzbereich bei 2,4 GHz. Alles was darüber ist, kann der Pico nicht sehen und demnach auch keine Verbindung aufbauen.

Hinweis: In der Regel braucht jeder Frequenzbereich seine eigene Antenne. Weil auf dem Pico nicht viel Platz ist, hat er nur eine Antenne für 2,4 GHz. Für mehr ist auf der Platine einfach kein Platz.

Länderspezifische Einstellungen

Weil die Regularien zur Nutzung der Frequenzbereiche mit Allgemeinzuteilung mit WLAN-Technik in vielen Ländern unterschiedlich aussehen, muss der WLAN-Chip auf dem Pico unterschiedliche Parameter berücksichtigen, die standardmäßig auf die Parameter in Großbritannien (GB) eingestellt sind. Das kann zur Folge haben, dass es bei der Nutzung von WLANs in anderen Ländern zu Verbindungsproblemen kommt. Um verschiedene Fehlerquellen auszuschließen, gilt es Länder-spezifische Vorgaben zu berücksichtigen. Dazu sollte der betreffende Ländercode (country code) des Landes im MicroPython-Programmcode eingestellt sein, in dem sich das zu nutzende WLAN befindet.

In Deutschland würde man folgende Zeilen im Programmcode vor der Initialisierung des WLANs einfügen:

# Ländereinstellung
network.country('DE')

Weitere verwandte Themen:

Frag Elektronik-Kompendium.de

Elektronik-Set Pico WLAN Edition

Elektronik-Set Pico WLAN Edition

Hardware-nahes Programmieren mit dem Mikrocontroller Raspberry Pi Pico W und MicroPython.

  • Raspberry Pi Pico W mit gelöteten Stiftleisten
  • Spezielles Steckbrett mit GPIO-Beschriftung
  • Einführung ins Hardware-nahe Programmieren
  • Schwerpunkte: WLAN, MQTT und Internet
  • Deutschsprachige Anleitung als PDF-Datei zum Download

In unseren Online-Workshops bieten wir intensiven Erfahrungsaustausch in kleinen Gruppen und Unterstützung bei individuellen Problemen.

Elektronik-Set jetzt bestellen Online-Workshop buchen

Online-Workshop: Programmieren mit dem Raspberry Pi Pico

Programmieren mit dem Raspberry Pi Pico

Gemeinsam mit anderen und unter Anleitung experimentieren? Wir bieten unterschiedliche Online-Workshops zum Raspberry Pi Pico und MicroPython an. Einführung in die Programmierung, Sensoren programmieren und kalibrieren, sowie Internet of Things und Smart Home über WLAN und MQTT.

Online-Workshop buchen

Besuchen Sie unser fast monatlich stattfindendes Online-Meeting PicoTalk und lernen Sie uns kennen. Die Teilnahme ist kostenfrei.

Termine und Newsletter-Anmeldung

 

Elektronik-Sets für das Hardware-nahe Programmieren