class WLAN – Steuerung der integrierten WiFi-Schnittstellen¶
Die Klasse WLAN steuert die integrierten WiFi-Funkmodule moderner OpenMV Cams. Dieselbe Klasse kapselt je nach WiFi-MCU des Boards zwei unterschiedliche zugrunde liegende Treiber:
CYW43 (Infineon CYW43xxx Murata WiFi-Modul). Verwendet von der OpenMV Cam N6, OpenMV Cam RT1062, Arduino Portenta H7, Arduino Nicla Vision und Arduino Giga R1 WiFi.
NINA W10 (u-blox NINA-W10 / ESP32-WROOM). Verwendet vom Arduino Nano RP2040 Connect.
Die beiden Treiber stellen dieselben Methodennamen bereit, unterscheiden sich jedoch in einigen Argumenten und in der Menge der akzeptierten config()-Schlüssel. Unterschiede sind unten gekennzeichnet.
Die OpenMV-Kameras mit einem älteren WINC1500 WiFi-Shield (M4 / M7 / H7 / H7 Plus / Pure Thermal) verwenden stattdessen WINC.
Anwendungsbeispiel:
import network
# Enable the station interface and connect to a WiFi AP.
nic = network.WLAN(network.WLAN.IF_STA)
nic.active(True)
nic.connect("your-ssid", "your-key")
while not nic.isconnected():
pass
print(nic.ipconfig("addr4"))
Konstruktoren¶
- class network.WLAN(interface_id: int = WLAN.IF_STA) None¶
Erzeugt ein
WLAN-Schnittstellenobjekt.interface_idwählt aus, auf welcher Schnittstelle gearbeitet werden soll:WLAN.IF_STA– Station-/Client-Modus. Verbindet sich mitconnect()mit einem übergeordneten Access Point. Dies ist die Standardeinstellung.WLAN.IF_AP– Access-Point-Modus. Konfiguriert den AP mitconfig()und akzeptiert Client-Verbindungen.
Dasselbe physische Funkmodul versorgt beide Schnittstellen; das Erzeugen der einen schließt die andere nicht aus.
Methoden¶
- active(is_active: bool | None = None) bool¶
Schaltet das WiFi-Funkmodul ein oder aus.
Ohne Argument wird der aktuelle Zustand zurückgegeben –
True, solange das Funkmodul eingeschaltet ist, andernfallsFalse.active(True)versorgt die WiFi-MCU mit Strom, lädt deren Firmware (CYW43 holt den Firmware-Blob aus dem Flash; NINA validiert die aktuell geflashte Firmware-Version) und bringt die lwIP-netif für diese Schnittstelle hoch. Alle anderen Methoden –connect(),scan(),ipconfig()und verwandte – erfordern, dass die Schnittstelle aktiv ist.active(False)schaltet das Funkmodul wieder aus. Auf der STA-Schnittstelle wird dadurch außerdem die Verbindung zum aktuellen AP getrennt und die netif freigegeben.
- connect(ssid: str, key: str | None = None, *, security: int = -1, bssid: bytes | None = None, channel: int = -1) None¶
Verbindet die STA-Schnittstelle mit dem angegebenen Access Point.
ssid– die Netzwerk-SSID (String oder bytes).key– Passwort / Pre-Shared Key. Übergeben SieNonefür ein offenes Netzwerk.security(nur Schlüsselwort) – eine derSEC_*-Konstanten.-1(Standard) wählt automatisch:SEC_OPEN, wennkeyleer ist, andernfallsSEC_WPA_WPA2.bssid(nur Schlüsselwort, nur CYW43) – beschränkt die Verbindung auf den AP mit dieser 6-Byte-MAC-Adresse. Wird vom NINA-Treiber ignoriert.channel(nur Schlüsselwort) – bevorzugter Funkkanal. Standard ist „den Treiber wählen lassen“.
- disconnect() None¶
Trennt im STA-Modus die Verbindung zum aktuell verbundenen Access Point. Die Schnittstelle bleibt aktiv; rufen Sie
connect()erneut auf, um sich wieder zu verbinden, oderactive()(False), um das Funkmodul vollständig auszuschalten. Wird ignoriert, wenn derzeit keine Verbindung besteht.
- isconnected() bool¶
Gibt im STA-Modus
Truezurück, wenn eine Verbindung mit einem Access Point besteht und eine IPv4-Adresse per DHCP bezogen (oder überipconfig()statisch zugewiesen) wurde. GibtFalsezurück, solange sich die Verbindung noch in der Authentifizierungs-/Verbindungs-/DHCP-Phase befindet.Gibt im AP-Modus
Truezurück, wenn mindestens eine Station beigetreten ist.
- scan(*, passive: bool = False, ssid: bytes | None = None, bssid: bytes | None = None) List[Tuple[bytes, bytes, int, int, int, int]]¶
Sucht nach nahegelegenen Access Points und gibt eine Liste von 6-Tupeln zurück:
[0]SSID (bytes; leer bei versteckten Netzwerken).[1]BSSID (6-Byte-MAC,bytes). Mitbinascii.hexlify()umwandeln.[2]Kanalnummer.[3]RSSI in dBm.[4]Sicherheitsmodus (eine derSEC_*-Konstanten).[5]Reserviert (immer1).
Alle Schlüsselwortargumente sind nur für CYW43:
passive– wennTrue, wird ein passiver Scan anstelle des standardmäßigen aktiven Probe-Request-Scans verwendet.ssid– beschränkt den Scan auf eine SSID.bssid– beschränkt den Scan auf eine BSSID.
Das Scannen ist nur auf einer STA-Schnittstelle sinnvoll.
- status() int¶
- status(param: str) Any
Fragt den Verbindungsstatus ab.
Ohne Argument wird der Verbindungsstatus als kleine Ganzzahl zurückgegeben (treiberspezifische Kodierung – ein Wahrheitswert bedeutet „verbunden“).
Mit einem String-Argument:
"rssi"– gibt im STA-Modus den aktuellen RSSI in dBm zurück."stations"– gibt im AP-Modus eine Liste der verbundenen Stationen zurück. CYW43 gibt[(mac_bytes,), ...]zurück; NINA gibt[ip_string, ...]zurück.
- ifconfig(config: Tuple[str, str, str, str] | None = None) Tuple[str, str, str, str] | None¶
Liest oder setzt IPv4-Schnittstellenparameter als 4-Tupel von
(ip, subnet, gateway, dns)als Strings im Dotted-Quad-Format.Bemerkung
Bevorzugen Sie
ipconfig()für neuen Code:nic.ipconfig(addr4="192.168.0.4/24", gw4="192.168.0.1") network.ipconfig(dns="8.8.8.8")
- ipconfig(param: str) Any¶
- ipconfig(**kwargs: Any) None
Liest oder setzt IPv4-/IPv6-Schnittstellenparameter. Der CYW43-Treiber delegiert an die Standard-lwIP-Implementierung und unterstützt den vollständigen Satz der unter
AbstractNIC.ipconfig()dokumentierten Schlüssel. Der NINA-Treiber implementiert eine kleinere Teilmenge pro Schnittstelle –dhcp4undhas_dhcp4(schreibgeschützt) sowieaddr4undgw4zum Lesen / Setzen.
- config(param: str) Any¶
- config(**kwargs: Any) None
Liest oder setzt WiFi-spezifische Schnittstellenparameter.
Mit einem einzelnen positionellen String-Argument wird der Wert dieses Parameters zurückgegeben. Mit Schlüsselwortargumenten werden ein oder mehrere Parameter auf einmal gesetzt – Änderungen, die einen laufenden AP betreffen, führen dazu, dass der AP automatisch herunter- und wieder hochgefahren wird.
Beispiel:
# Set up the access-point name and channel. ap.config(ssid="My AP", channel=11) # Query params one at a time. print(ap.config("ssid")) print(ap.config("mac"))
CYW43-Treiber – auslesbare Parameter:
"antenna"– Antennenauswahl (int)."channel"– aktueller Kanal."ssid"/"essid"– die aktuelle SSID (String)."security"– der Authentifizierungsmodus des AP (einer vonSEC_*)."mac"– MAC-Adresse der Schnittstelle (6bytes)."pm"– Energieverwaltungswert."txpower"– Sendeleistung in dBm."hostname"– DHCP-/mDNS-Hostname. Veraltet; verwenden Sie stattdessennetwork.hostname().
CYW43-Treiber – setzbare Parameter:
antenna=<int>– Antennenauswahl.channel=<int>– AP-Kanal.ssid=<str>/essid=<str>– AP-SSID.key=<str>/password=<str>– Pre-Shared Key des AP.security=<int>– Authentifizierungsmodus des AP (einer vonSEC_*).pm=<int>– Energieverwaltungsmodus (einer vonPM_NONE,PM_PERFORMANCE,PM_POWERSAVE).monitor=<int>– aktiviert den Monitor-/All-Multicast-Modus.txpower=<int>– Sendeleistung in dBm.trace=<int>– interne Treiber-Trace-Bitmaske.hostname=<str>– DHCP-/mDNS-Hostname. Veraltet; verwenden Sie stattdessennetwork.hostname().
NINA-Treiber – auslesbare Parameter:
"ssid"– die aktuelle SSID (String)."security"– der Authentifizierungsmodus des AP."mac"/"bssid"– MAC-Adresse der Schnittstelle (6bytes)."fw_version"– ein 3-Tupel(major, minor, patch).
NINA-Treiber – setzbare Parameter: der Aufruf wird an
connect()weitergeleitet und akzeptiert dieselben Schlüsselwortargumente (ssid,key,security,channel). Nur auf der AP-Schnittstelle gültig.
- deinit() None¶
Schaltet die WiFi-MCU aus und wieder ein und gibt jede vom Treiber gehaltene Ressource frei (Firmware-Puffer, lwIP-netif, SPI-/SDIO-Bus). Nach dem Aufruf muss das
WLAN-Objekt vor der Verwendung neu erzeugt werden. Verwenden Sie dies anstelle vonactive()(False), wenn Sie einen vollständigen Reset benötigen (zum Beispiel vor dem Neuflashen der Firmware des Funkmoduls oder zur Wiederherstellung aus einem festgefahrenen Treiberzustand). Nur CYW43.
- send_ethernet(buf: bytes) None¶
Injiziert das rohe Ethernet-Einzelbild
bufdirekt in den Sendepfad des Treibers und umgeht dabei den IP-Stack. Gedacht für reine L2-Konsumenten – Bridging, benutzerdefinierte EtherType-Protokolle und Ähnliches. Das Einzelbild muss Ziel-/Quell-MAC und EtherType enthalten (keine FCS – die Hardware hängt sie an). Nur CYW43.
- ioctl(cmd: int, buf: bytearray) None¶
Sendet einen treiberspezifischen Steuerbefehl.
cmdist der numerische ioctl-Code, der von der zugrunde liegenden Funk-Firmware definiert wird, undbufist ein veränderbarer Puffer, der sowohl für die Befehlsdaten als auch für die Antwort verwendet wird. Die Menge der gültigencmd-Werte ist treiberspezifisch und zwischen CYW43 und NINA nicht portierbar. Wird hauptsächlich von Low-Level-Testskripten und Chip-Inbetriebnahme-Code verwendet.
Konstanten¶
- IF_STA: int¶
Kennung der Station-/Client-Schnittstelle. An den Konstruktor übergeben, um den STA-Modus auszuwählen.
- IF_AP: int¶
Kennung der Access-Point-Schnittstelle. An den Konstruktor übergeben, um den AP-Modus auszuwählen.
- SEC_WPA_WPA2: int¶
Sicherheitswert für WPA / WPA2 mit einem Pre-Shared Key. Der Standard, wenn
connect()ein Schlüssel übergeben wird. Auf beiden Treibern verfügbar.
- SEC_WEP: int¶
Sicherheitswert für WEP (Wired Equivalent Privacy). Wird zur Kompatibilität mit älteren Access Points bereitgestellt – WEP ist kryptografisch gebrochen und sollte bei neuen Installationen nicht verwendet werden. Nur NINA.
- WPA_PSK: int¶
Abwärtskompatibler Alias für
SEC_WPA_WPA2. Neuer Code sollteSEC_WPA_WPA2verwenden. Nur NINA.
- PM_NONE: int¶
An
config(pm=...)übergeben, um die WiFi-Energieverwaltung zu deaktivieren. Nur CYW43.