OpenMV MicroPython OpenMV MicroPython OpenMV MicroPython
  • Home
  • Tutorial
  • Libraries
  • Boards
  • Shields
  • Sensors
  • Language
  • CPython
  • Internals
  • Changelog
  • License
/
  • English
  • 简体中文
  • 繁體中文
  • Deutsch
  • 日本語
  • Español
  • Русский
  • Français
  • 한국어
  • Italiano
  • Português
  • Nederlands
  • Română
  • Hrvatski
  • Čeština
  • Polski
  • Suomi
  • Svenska
  • Magyar
  • Türkçe
  • Diskussion
  • Tutorial
    • 1. Schnellstart
    • 2. Python-Überblick
    • 3. Hardwaresteuerung
    • 4. Vision-Sensoren
    • 5. Bildverarbeitung
    • 6. NumPy
    • 7. Maschinelles Lernen
    • 8. Asyncio
    • 9. Netzwerke
      • 9.1. Warum Netzwerke
      • 9.2. Schichtenprotokolle
      • 9.3. Das Kabel und das Einzelbild
      • 9.4. Die Verbindung herstellen
      • 9.5. IP-Adressen
      • 9.6. Pakete und Routing
      • 9.7. Private Netzwerke und NAT
      • 9.8. Ports
      • 9.9. UDP – sende ein Paket, hoffe auf das Beste
      • 9.10. TCP – ein zuverlässiger Strom von Bytes
      • 9.11. Socket-Objekte
      • 9.12. UDP-Sockets
      • 9.13. TCP-Sockets
      • 9.14. Sockets mit asyncio
      • 9.15. Namen und DNS
      • 9.16. Zeit und NTP
      • 9.17. Verschlüsselte Sockets und TLS
      • 9.18. MQTT, Byte für Byte
      • 9.19. MQTT in Python
      • 9.20. Zusammenfassung
    • 10. Webserver
    • 11. Bluetooth
    • 12. Host-Protokoll
    • 13. Tools
    • 14. Produktion
  • Bibliotheken
  • Boards
  • Shields
  • Sensoren
  • Sprache
  • CPython
  • Interna
  • Changelog
  • Lizenz

Auf dieser Seite

  • 9.4.1. Das network-Modul
  • 9.4.2. Der Wi-Fi-Ablauf
  • 9.4.3. Was schiefgehen kann
  • 9.4.4. Verbunden bleiben
  • 9.4.5. Ethernet, sofern vorhanden
micropython-doc 0 0
Diese Seite bearbeiten
  1. OpenMV MicroPython /
  2. OpenMV Cam Tutorial /
  3. 9. Netzwerke /
  4. 9.4. Die Verbindung herstellen
Quelltext anzeigen In ChatGPT öffnen In Claude öffnen In Perplexity öffnen

9.4. Die Verbindung herstellen¶

Die auf der vorherigen Seite behandelte Verbindungsschicht (Link Layer) läuft größtenteils automatisch ab, aber es gibt eine Stelle, an der ein Python-Skript eingreifen muss: der Kamera mitzuteilen, welchem Netzwerk sie beitreten soll. Bis dieser Schritt gelingt, funktioniert keine der Netzwerkfunktionen, die der Rest dieses Abschnitts behandelt.

9.4.1. Das network-Modul¶

Das network-Modul macht die Netzwerkhardware der Kamera für Python zugänglich. Der genaue Satz an Schnittstellen hängt vom Board ab: Viele Kameras haben einen Funkchip und stellen eine WLAN-Klasse bereit (benannt nach Wireless Local Area Network); einige Boards haben zusätzlich einen eingebauten Ethernet-Port und stellen eine LAN-Klasse bereit (benannt nach Local Area Network, also der kabelgebundenen Variante). Das Verwendungsmuster ist für beide gleich, mit einem wichtigen Unterschied: Einer Funkschnittstelle muss mitgeteilt werden, welchem Netzwerk sie beitreten soll, während Ethernet aufnimmt, was auch immer am Kabel anliegt.

9.4.2. Der Wi-Fi-Ablauf¶

Der Beitritt zu einem WLAN-Netzwerk erfolgt in drei Schritten: die Schnittstelle konstruieren, sie aktivieren und sie auffordern, sich mit einem benannten Netzwerk und einem Passwort zu verbinden. Die Schnittstelle verhandelt im Hintergrund mit dem Access Point; ein isconnected()-Aufruf meldet, wann die Verbindung fertig aufgebaut ist:

import network
import time

wlan = network.WLAN(network.WLAN.IF_STA)
wlan.active(True)
wlan.connect("my-network", "my-password")

while not wlan.isconnected():
    time.sleep_ms(100)

print("link up")

Das Argument IF_STA wählt den Station-Modus – die Kamera tritt einem Netzwerk bei, das jemand anderes betreibt. Der entgegengesetzte Modus, IF_AP, lässt die Kamera ihr eigenes kleines Netzwerk betreiben, dem andere Geräte beitreten können; nützlich für Konfigurationsschnittstellen und die Einrichtung vor Ort, aber nicht der häufige Fall.

Sobald isconnected() True zurückgibt, ist die Kamera im Netzwerk. Alles andere, was die höheren Schichten zu ihrer Einrichtung benötigten, ist automatisch geschehen, während die Verbindung aufgebaut wurde; die folgenden Seiten erläutern diese Teile einen nach dem anderen.

9.4.3. Was schiefgehen kann¶

An diesem Schritt treten einige praktische Fehlerfälle auf.

  • Falscher Netzwerkname oder falsches Passwort. Der Verbindungsversuch wird stillschweigend wiederholt, bis die Anwendung aufgibt. Umhüllen Sie das Warten mit einem Timeout, damit die obige Schleife nicht für immer blockiert:

    start = time.ticks_ms()
    while not wlan.isconnected():
        if time.ticks_diff(time.ticks_ms(), start) > 10000:
            raise OSError("Wi-Fi did not come up in 10 s")
        time.sleep_ms(100)
    
  • Außer Reichweite. Die Kamera und der Access Point müssen nahe genug beieinander sein, dass das Signal stark genug ist, um eine Verbindung zu halten. status() gibt einen Code zurück, der angibt, warum die Verbindung nicht steht; scan() gibt die Liste der Netzwerke zurück, die das Funkmodul sehen kann, was die Diagnose ist, die man ausführen sollte, wenn connect nicht erfolgreich ist.

  • Der Access Point verlangt mehr als ein Passwort. Offene Netzwerke (ohne Passwort) und die üblichen passwortgeschützten werden von connect wie oben gezeigt abgedeckt. Größere Netzwerke an Arbeitsplätzen und Schulen verwenden manchmal ein anderes Schema, bei dem sich die Kamera gegenüber einem separaten Anmeldeserver authentifizieren muss; diese benötigen zusätzliche Argumente für connect. Die vollständige Oberfläche finden Sie unter class WLAN – Steuerung der integrierten WiFi-Schnittstellen.

9.4.4. Verbunden bleiben¶

Die Verbindung herzustellen ist die halbe Aufgabe. Verbunden zu bleiben ist die andere Hälfte – Access Points starten neu, die Kamera wandert aus der Reichweite, DHCP-Leases laufen ab, die Funk-Firmware bleibt gelegentlich hängen. Eine Kamera, die monatelang am Netzwerk leben soll, muss das bemerken und sich selbst erholen.

Das Erkennungsmuster besteht darin, isconnected() einmal pro Hauptschleifendurchlauf aufzurufen und zu reagieren, wenn es False zurückgibt. isconnected() kann kurzzeitig lügen, wenn eine Verbindung abgebrochen ist, ohne dass das Funkmodul es bereits bemerkt hat – ein fehlgeschlagener Socket-Send, während die Verbindung „eigentlich“ stehen sollte, ist der andere Beleg der Anwendung für einen Abbruch. status() ist die maßgeblichere Quelle, wenn die beiden uneinig sind.

Das Wiederverbindungsmuster ist disconnect() gefolgt von connect() mit denselben Anmeldedaten, wobei das Warten wie bei der ersten Verbindung mit einem Timeout umhüllt wird. Warten Sie zwischen den Versuchen mit zunehmender Verzögerung – eine Sekunde, zwei, vier, sich bis zu etwa einer Minute verdoppelnd – damit ein langer Ausfall den AP nicht überlastet und das Energiebudget des Funkmoduls nicht in Warteschleifen verbrennt:

import network
import time

_BACKOFF_S = (1, 2, 4, 8, 16, 32, 60)

def reconnect(wlan, ssid, password):
    for delay in _BACKOFF_S:
        wlan.disconnect()
        wlan.connect(ssid, password)
        deadline = time.ticks_add(time.ticks_ms(), 10_000)
        while not wlan.isconnected():
            if time.ticks_diff(deadline, time.ticks_ms()) < 0:
                break
            time.sleep_ms(100)
        if wlan.isconnected():
            return True
        time.sleep(delay)
    return False

Wenn dieser Helfer weiterhin False zurückgibt, hängt möglicherweise die Funk-Firmware selbst fest. Der letzte Ausweg ist ein Aus- und Wiedereinschalten des Funkmoduls: active(False), eine kurze Pause, active(True), von Grund auf neu verbinden. Dies bringt die Funk-Firmware in einen bekannten Zustand zurück, zum Preis von ein paar zusätzlichen Sekunden Ausfallzeit:

def radio_power_cycle(wlan, ssid, password):
    wlan.active(False)
    time.sleep(1)
    wlan.active(True)
    return reconnect(wlan, ssid, password)

Eine Kamera, die minutenlang vom Netzwerk getrennt war, ist ein echter Fehler, den die Anwendung sehen muss. Der Wiederherstellungscode sollte diesen Zustand sichtbar machen – das Netzwerk in einem Flag, das die Hauptschleife prüft, als ungesund markieren und die Anwendung die Netzwerk-Sends überspringen lassen, die sie gemacht hätte, während das Flag nicht gesetzt ist – damit ein langer Ausfall die Anwendung nicht zum Stillstand bringt, während sie auf Sockets wartet, die niemals schreiben werden.

9.4.5. Ethernet, sofern vorhanden¶

Boards mit eingebautem Ethernet stellen dasselbe Muster ohne den connect-Schritt bereit. Die LAN-Schnittstelle wird mit active() aktiviert, und sobald das Kabel eingesteckt ist, ist die Schnittstelle einsatzbereit:

import network

lan = network.LAN()
lan.active(True)
print("link up")

Ab diesem Punkt gelten die übrigen Seiten dieses Abschnitts auf dieselbe Weise, unabhängig davon, welche Schnittstelle die Kamera ins Netzwerk gebracht hat. Den höheren Schichten ist es egal, ob die Verbindung unter ihnen WLAN oder Ethernet ist – „verbunden“ ist „verbunden“.

Die vollständige WLAN- und LAN-Referenz, einschließlich der Konfigurationsstellschrauben, die hier keinen Platz fanden, finden Sie unter network — Netzwerkkonfiguration.

Zurück
9.3. Das Kabel und das Einzelbild
Weiter
9.5. IP-Adressen

For OpenMV firmware v5.0.0 · based on MicroPython v1.28 · docs built 16 Jun 2026 · Copyright © 2014-2026 by OpenMV, Damien P. George, and others.

Made with Sphinx using the Shibuya theme.