class WINC – WiFi-Shield-Treiber

Die WINC-Klasse steuert das Atmel WINC1500 802.11 b/g/n WiFi-Modul auf dem OpenMV WiFi Shield an. Verfügbar auf der OpenMV Cam M4, M7, H7, H7 Plus und Pure Thermal (den STM32-Boards, für die das WiFi-Shield entwickelt wurde). Für Boards mit integriertem WiFi (OpenMV Cam N6, OpenMV Cam RT1062, Arduino Giga) verwenden Sie stattdessen WLAN.

Beispiel – mit einem Access Point verbinden und die Adresse ausgeben:

import network

wlan = network.WINC()
wlan.connect("SSID", "KEY", security=network.WINC.WPA_PSK)

print("status:    ", "connected" if wlan.isconnected() else "off")
print("rssi:      ", wlan.rssi(), "dBm")
print("interface: ", wlan.ifconfig())
print("netinfo:   ", wlan.netinfo())

Beispiel – einen offenen Access Point hochfahren und auf einen Client warten:

import network

wlan = network.WINC(mode=network.WINC.MODE_AP)
wlan.start_ap("OpenMV-Cam", security=network.WINC.OPEN, channel=6)

print("waiting for a station to associate...")
print(wlan.wait_for_sta(timeout=None))

Konstruktoren

class network.WINC(mode: int = WINC.MODE_STA) None

Erzeugt ein WINC-Treiberobjekt und fährt das WiFi-Shield hoch.

mode wählt den Betriebsmodus aus, in dem das Modul startet:

Bemerkung

Im AP-Modus hat das WINC1500 Hardware-Beschränkungen:

  • Es kann sich nur ein Client gleichzeitig verbinden.

  • Es werden nur OPEN- oder WEP-Sicherheit unterstützt.

  • Ein Firmware-Fehler des WiFi-Moduls führt dazu, dass alle gebundenen Sockets nicht mehr funktionieren, wenn der Client die Verbindung trennt. Setzen Sie ein Timeout für den Server-Socket, damit dieser eine Ausnahme auslöst, die Sie zum erneuten Öffnen verwenden können.

Methoden

active(is_active: bool | None = None) bool

Aktiviert oder deaktiviert das WiFi-Shield.

Ohne Argument wird der aktuelle Zustand zurückgegeben – True, solange das Shield initialisiert und der Funkbetrieb aktiv ist, andernfalls False.

active(True) führt den WINC1500-Firmware-Handshake über SPI durch und bringt den Funkbetrieb im konfigurierten mode hoch. Ist die Schnittstelle bereits aktiv, ist dies ein No-op. connect() ruft dies automatisch auf, falls es noch nicht aufgerufen wurde; für jede andere Methode (scan(), rssi(), netinfo(), …) müssen Sie zuerst active(True) aufrufen.

active(False) fährt den Funkbetrieb wieder herunter (das WINC fällt in den reinen BSP-Modus zurück) und gibt die SPI-Pins frei.

connect(ssid: str, key: str | None = None, *, security: int = WINC.WPA_PSK, channel: int = 1) None

Verbindet sich mit dem WiFi-Netzwerk ssid unter Verwendung des Passworts key, des Sicherheitsmodus security (einer von OPEN, WPA_PSK oder der 802.1X-Konstante) auf dem Funkkanal channel. security und channel sind nur als Schlüsselwortargumente zulässig.

Verwenden Sie nach dem Verbinden das socket-Modul, um TCP/UDP-Ports zu öffnen.

Diese Methode blockiert, bis die Zuordnung abgeschlossen ist oder fehlschlägt.

config(ssid: str, key: str | None = None, *, security: int = WINC.WPA_PSK, channel: int = 1) None

Alias von connect(). Bereitgestellt zur Kompatibilität mit Code, der config auf anderen network-Schnittstellen aufruft.

start_ap(ssid: str, key: str | None = None, *, security: int = WINC.OPEN, channel: int = 1) None

Alias von connect(), der nach dem Erzeugen des Objekts mit mode=MODE_AP verwendet wird, um den Access Point zu konfigurieren und zu starten. Der AP unterstützt nur OPEN- oder WEP-Sicherheit; bei Verwendung von WEP ist key erforderlich.

disconnect() None

Im STA-Modus wird die Zuordnung zum aktuell zugeordneten Access Point getrennt. Das Shield bleibt aktiv; rufen Sie connect() auf, um die Zuordnung wiederherzustellen. No-op, wenn aktuell keine Zuordnung besteht.

isconnected() bool

Gibt im STA-Modus True zurück, wenn eine Zuordnung zu einem Access Point besteht und eine IPv4-Adresse bezogen wurde (über DHCP oder ifconfig()). Gibt False zurück, solange die Authentifizierungs-/Zuordnungs-/DHCP-Phase noch läuft.

connected_sta() List[str]

Gibt im AP-Modus eine Liste zurück, die die IP-Adresse des aktuell verbundenen Clients enthält (oder eine leere Liste, wenn kein Client verbunden ist).

wait_for_sta(timeout: int | None) List[str]

Blockiert im AP-Modus, bis sich ein Client verbindet, und gibt eine Liste mit der IP-Adresse des Clients zurück. timeout ist die maximale Wartezeit in Millisekunden; übergeben Sie None, um unbegrenzt zu warten.

ifconfig(config: Tuple[str, str, str, str] | None = None) Tuple[str, str, str, str]

Liest oder setzt IPv4-Schnittstellenparameter. Das 4-Tupel enthält (ip, subnet, gateway, dns) als Strings im Dotted-Quad-Format.

Ohne Argument aufgerufen: gibt die aktuelle Konfiguration zurück.

Mit einem 4-Tupel aufgerufen: setzt eine statische IP-Konfiguration anstelle der per DHCP bezogenen.

Beispiel – eine statische IP vor dem Verbinden festlegen:

wlan = network.WINC()
wlan.ifconfig(("192.168.1.100", "255.255.255.0",
               "192.168.1.1", "192.168.1.1"))
wlan.connect(SSID, key=KEY, security=network.WINC.WPA_PSK)

Bemerkung

WINC implementiert die moderne AbstractNIC.ipconfig()-API nicht; verwenden Sie hier ifconfig().

netinfo() Tuple[int, int, str, str, str]

Gibt ein 5-Tupel zurück, das die aktuelle Zuordnung beschreibt:

  • [0] RSSI als int (dBm).

  • [1] Sicherheitsmodus – eine der Sicherheitskonstanten.

  • [2] SSID-String.

  • [3] BSSID als "XX:XX:XX:XX:XX:XX"-MAC-String.

  • [4] IPv4-Adresse als Dotted-Quad-String.

scan() List[Tuple[str, str, int, int, int, int]]

Sucht nach nahegelegenen Access Points. Gibt eine Liste von 6-Tupeln zurück:

  • [0] SSID-String.

  • [1] BSSID als "XX:XX:XX:XX:XX:XX"-MAC-String.

  • [2] Kanalnummer.

  • [3] RSSI in dBm.

  • [4] Sicherheitsmodus – eine der Sicherheitskonstanten.

  • [5] Reserviert (immer 1).

Kann aufgerufen werden, ohne sich zuvor mit einem Netzwerk zu verbinden.

rssi() int

Gibt den RSSI in dBm des aktuell zugeordneten Access Points zurück. Grob: -30 ist ausgezeichnet, -67 ist für Streaming in Ordnung, -80 ist grenzwertig, -90 und darunter ist unbrauchbar. Nur im STA-Modus aussagekräftig, solange isconnected() True ist.

fw_version() Tuple[int, int, int, int, int, int, int]

Gibt ein 7-Tupel zurück, das die WINC1500-Firmware- und Treiberversionen beschreibt:

  • [0] Firmware-Hauptversion.

  • [1] Firmware-Nebenversion.

  • [2] Firmware-Patch.

  • [3] Treiber-Hauptversion.

  • [4] Treiber-Nebenversion.

  • [5] Treiber-Patch.

  • [6] Chip-Hardware-Revision.

fw_dump(path: str) None

Liest den internen Flash des WINC1500 und schreibt das resultierende Firmware-Image in die Datei unter path im Dateisystem des OpenMV. Verwenden Sie dies, um das aktuell installierte Image zu sichern, bevor Sie fw_update() aufrufen.

Erfordert, dass das Modul mit mode=MODE_FIRMWARE erzeugt wurde.

fw_update(path: str) None

Löscht den internen Flash des WINC1500 und programmiert ihn mit dem Binär-Image unter path. Das Image muss dem von der OpenMV-Firmware erwarteten Layout entsprechen (typischerweise von Atmel / Microchip mit dem WINC SDK bereitgestellt).

Der Aufruf blockiert mehrere Sekunden lang, während der Flash programmiert und verifiziert wird. Schalten Sie die OpenMV Cam nach der Rückkehr des Aufrufs aus und wieder ein, damit das WINC1500 vom neuen Image startet.

Erfordert, dass das Modul mit mode=MODE_FIRMWARE erzeugt wurde.

Konstanten

OPEN: int

Sicherheitswert für ein unverschlüsseltes Netzwerk. An das security-Argument von connect() / start_ap() zu übergeben.

WPA_PSK: int

Sicherheitswert für WPA/WPA2 mit einem vorab geteilten Schlüssel. Der Standard für connect().

Bemerkung

Es existiert auch ein WPA/WPA2-Enterprise-Sicherheitswert (802.1X). Die Firmware stellt ihn unter dem Namen 802_1X bereit, was kein gültiger Python-Bezeichner ist – greifen Sie über getattr(network.WINC, "802_1X") darauf zu.

MODE_STA: int

Station-Modus – als Client mit einem Access Point verbinden. Der Standard-Konstruktormodus.

MODE_AP: int

Access-Point-Modus – das WINC wird zum AP, mit dem sich Clients verbinden.

MODE_P2P: int

WiFi-Direct-Modus (Peer-to-Peer).

MODE_BSP: int

Initialisiert nur das WINC-Board-Support-Package – der Funkbetrieb wird nicht hochgefahren. Wird vom Firmware-Update-Ablauf verwendet.

MODE_FIRMWARE: int

Firmware-Update-Modus. Erforderlich für fw_dump() und fw_update().