class WLAN – ingebouwde WiFi-interfaces aansturen

De WLAN-klasse stuurt de ingebouwde WiFi-radio’s van moderne OpenMV Cams aan. Dezelfde klasse omvat twee verschillende onderliggende drivers, afhankelijk van de WiFi-MCU van het bord:

  • CYW43 (Infineon CYW43xxx Murata WiFi-module). Gebruikt door de OpenMV Cam N6, OpenMV Cam RT1062, Arduino Portenta H7, Arduino Nicla Vision en Arduino Giga R1 WiFi.

  • NINA W10 (u-blox NINA-W10 / ESP32-WROOM). Gebruikt door de Arduino Nano RP2040 Connect.

De twee drivers stellen dezelfde methodenamen beschikbaar, maar verschillen in een paar argumenten en in de set geaccepteerde config()-sleutels. Verschillen worden hieronder aangegeven.

De OpenMV-camera’s met een verouderd WINC1500 WiFi-shield (M4 / M7 / H7 / H7 Plus / Pure Thermal) gebruiken in plaats daarvan WINC.

Voorbeeldgebruik:

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"))

Constructors

class network.WLAN(interface_id: int = WLAN.IF_STA) None

Maak een WLAN-interfaceobject aan.

interface_id selecteert op welke interface gewerkt wordt:

  • WLAN.IF_STA – station-/clientmodus. Maak verbinding met een upstream toegangspunt met connect(). Dit is de standaard.

  • WLAN.IF_AP – toegangspuntmodus. Configureer het AP met config() en accepteer clientverbindingen.

Dezelfde fysieke radio ondersteunt beide interfaces; het construeren van de ene sluit de andere niet uit.

Methoden

active(is_active: bool | None = None) bool

Schakel de WiFi-radio in of uit.

Zonder argument wordt de huidige status geretourneerd – True zolang de radio aan staat, anders False.

active(True) schakelt de WiFi-MCU in, laadt de firmware ervan (CYW43 haalt de firmware-blob op uit het flashgeheugen; NINA valideert de momenteel geflashte firmwareversie) en brengt de lwIP-netif voor deze interface omhoog. Alle andere methoden – connect(), scan(), ipconfig() en aanverwanten – vereisen dat de interface actief is.

active(False) schakelt de radio weer uit. Op de STA-interface wordt hierdoor ook de verbinding met het huidige AP verbroken en de netif vrijgegeven.

connect(ssid: str, key: str | None = None, *, security: int = -1, bssid: bytes | None = None, channel: int = -1) None

Verbind de STA-interface met het opgegeven toegangspunt.

ssid – de netwerk-SSID (string of bytes).

key – wachtwoord / pre-shared key. Geef None door voor een open netwerk.

security (alleen als keyword) – een van de SEC_*-constanten. -1 (de standaard) kiest automatisch: SEC_OPEN wanneer key leeg is, anders SEC_WPA_WPA2.

bssid (alleen als keyword, uitsluitend CYW43) – beperk de associatie tot het AP met dit 6-byte MAC-adres. Wordt genegeerd door de NINA-driver.

channel (alleen als keyword) – voorkeurskanaal van de radio. De standaard is “laat de driver kiezen”.

disconnect() None

Verbreek in STA-modus de associatie met het momenteel verbonden toegangspunt. De interface blijft actief; roep opnieuw connect() aan om opnieuw te associëren, of active() (False) om de radio volledig uit te schakelen. Doet niets wanneer er momenteel geen associatie is.

isconnected() bool

In STA-modus wordt True geretourneerd wanneer er geassocieerd is met een toegangspunt én er een IPv4-adres is verkregen via DHCP (of statisch toegewezen via ipconfig()). Retourneert False zolang de verbinding zich nog in de authenticatie-/associatie-/DHCP-fase bevindt.

In AP-modus wordt True geretourneerd wanneer ten minste één station verbonden is.

scan(*, passive: bool = False, ssid: bytes | None = None, bssid: bytes | None = None) List[Tuple[bytes, bytes, int, int, int, int]]

Scan op nabijgelegen toegangspunten en retourneer een lijst van 6-tuples:

  • [0] SSID (bytes; leeg voor verborgen netwerken).

  • [1] BSSID (6-byte MAC, bytes). Converteer met binascii.hexlify().

  • [2] Kanaalnummer.

  • [3] RSSI in dBm.

  • [4] Beveiligingsmodus (een van de SEC_*-constanten).

  • [5] Gereserveerd (altijd 1).

Alle keyword-argumenten zijn uitsluitend voor CYW43:

  • passive – indien True, gebruik een passieve scan in plaats van de standaard actieve probe-request-scan.

  • ssid – beperk de scan tot één SSID.

  • bssid – beperk de scan tot één BSSID.

Scannen is alleen zinvol op een STA-interface.

status() int
status(param: str) Any

Vraag de verbindingsstatus op.

Zonder argument wordt de linkstatus geretourneerd als een klein geheel getal (driverspecifieke codering – truthy betekent “geassocieerd”).

Met een string-argument:

  • "rssi" – in STA-modus, retourneer de huidige RSSI in dBm.

  • "stations" – in AP-modus, retourneer een lijst van verbonden stations. CYW43 retourneert [(mac_bytes,), ...]; NINA retourneert [ip_string, ...].

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

Verkrijg of stel IPv4-interfaceparameters in als een 4-tuple van (ip, subnet, gateway, dns)-strings in dotted-quad-notatie.

Notitie

Geef voor nieuwe code de voorkeur aan ipconfig()

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

Verkrijg of stel IPv4-/IPv6-interfaceparameters in. De CYW43-driver delegeert naar de standaard lwIP-implementatie en ondersteunt de volledige set sleutels die gedocumenteerd is bij AbstractNIC.ipconfig(). De NINA-driver implementeert een kleinere subset per interface – dhcp4 en has_dhcp4 (alleen-lezen), plus addr4 en gw4 voor get/set.

config(param: str) Any
config(**kwargs: Any) None

Verkrijg of stel WiFi-specifieke interfaceparameters in.

Met één positioneel string-argument wordt de waarde van die parameter geretourneerd. Met keyword-argumenten worden een of meer parameters tegelijk ingesteld – wijzigingen die een draaiend AP beïnvloeden zorgen ervoor dat het AP automatisch wordt uit- en weer ingeschakeld.

Voorbeeld:

# 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-driver – opvraagbare parameters:

  • "antenna" – antenneselector (int).

  • "channel" – huidig kanaal.

  • "ssid" / "essid" – de huidige SSID (string).

  • "security" – de authenticatiemodus van het AP (een van SEC_*).

  • "mac" – MAC-adres van de interface (6 bytes).

  • "pm" – waarde voor energiebeheer.

  • "txpower" – zendvermogen in dBm.

  • "hostname" – DHCP-/mDNS-hostnaam. Verouderd; gebruik in plaats daarvan network.hostname().

CYW43-driver – instelbare parameters:

  • antenna=<int> – antenneselector.

  • channel=<int> – AP-kanaal.

  • ssid=<str> / essid=<str> – AP-SSID.

  • key=<str> / password=<str> – AP pre-shared key.

  • security=<int> – AP-authenticatiemodus (een van SEC_*).

  • pm=<int> – energiebeheermodus (een van PM_NONE, PM_PERFORMANCE, PM_POWERSAVE).

  • monitor=<int> – schakel monitor-/all-multicast-modus in.

  • txpower=<int> – zendvermogen in dBm.

  • trace=<int> – interne driver-trace-bitmask.

  • hostname=<str> – DHCP-/mDNS-hostnaam. Verouderd; gebruik in plaats daarvan network.hostname().

NINA-driver – opvraagbare parameters:

  • "ssid" – de huidige SSID (string).

  • "security" – de authenticatiemodus van het AP.

  • "mac" / "bssid" – MAC-adres van de interface (6 bytes).

  • "fw_version" – een 3-tuple (major, minor, patch).

NINA-driver – instelbare parameters: de aanroep wordt doorgestuurd naar connect() en accepteert dezelfde keyword-argumenten (ssid, key, security, channel). Alleen geldig op de AP-interface.

deinit() None

Schakel de WiFi-MCU volledig uit en weer aan en geef elke resource vrij die de driver vasthoudt (firmwarebuffers, lwIP-netif, SPI/SDIO-bus). Na het aanroepen hiervan moet het WLAN-object opnieuw worden geconstrueerd voordat het gebruikt kan worden. Gebruik dit in plaats van active() (False) wanneer je een volledige reset nodig hebt (bijvoorbeeld voordat je de firmware van de radio opnieuw flasht of om te herstellen van een vastgelopen driverstatus). Uitsluitend CYW43.

send_ethernet(buf: bytes) None

Injecteer het ruwe Ethernet-frame buf rechtstreeks in het transmissiepad van de driver, waarbij de IP-stack wordt omzeild. Bedoeld voor L2-only-toepassingen – bridging, aangepaste EtherType-protocollen en dergelijke. Het frame moet het bestemmings-/bron-MAC en de EtherType bevatten (geen FCS – de hardware voegt die toe). Uitsluitend CYW43.

ioctl(cmd: int, buf: bytearray) None

Geef een driverspecifieke besturingsopdracht. cmd is de numerieke ioctl-code die door de onderliggende radio-firmware is gedefinieerd en buf is een muteerbare buffer die zowel voor de opdrachtpayload als voor het antwoord wordt gebruikt. De set geldige cmd-waarden is driverspecifiek en niet overdraagbaar tussen CYW43 en NINA. Wordt voornamelijk gebruikt door low-level testscripts en chip-bring-up-code.

Constanten

IF_STA: int

Identifier voor de station-/clientinterface. Geef door aan de constructor om STA-modus te selecteren.

IF_AP: int

Identifier voor de toegangspuntinterface. Geef door aan de constructor om AP-modus te selecteren.

SEC_OPEN: int

Beveiligingswaarde voor een onversleuteld netwerk. Beschikbaar op beide drivers.

SEC_WPA_WPA2: int

Beveiligingswaarde voor WPA / WPA2 met een pre-shared key. De standaard wanneer een key wordt opgegeven aan connect(). Beschikbaar op beide drivers.

SEC_WPA3: int

Beveiligingswaarde voor WPA3 (SAE) met een pre-shared key. Uitsluitend CYW43.

SEC_WPA2_WPA3: int

Beveiligingswaarde voor de WPA2-/WPA3-overgangsmodus. Uitsluitend CYW43.

SEC_WEP: int

Beveiligingswaarde voor WEP (Wired Equivalent Privacy). Aangeboden voor compatibiliteit met verouderde toegangspunten – WEP is cryptografisch gebroken en mag niet worden gebruikt bij nieuwe implementaties. Uitsluitend NINA.

OPEN: int

Achterwaarts-compatibel alias voor SEC_OPEN. Nieuwe code dient SEC_OPEN te gebruiken. Uitsluitend NINA.

WEP: int

Achterwaarts-compatibel alias voor SEC_WEP. Nieuwe code dient SEC_WEP te gebruiken. Uitsluitend NINA.

WPA_PSK: int

Achterwaarts-compatibel alias voor SEC_WPA_WPA2. Nieuwe code dient SEC_WPA_WPA2 te gebruiken. Uitsluitend NINA.

PM_NONE: int

Geef door aan config(pm=...) om WiFi-energiebeheer uit te schakelen. Uitsluitend CYW43.

PM_PERFORMANCE: int

Geef door aan config(pm=...) om WiFi-energiebeheer in te schakelen dat is afgestemd op prestaties. Uitsluitend CYW43.

PM_POWERSAVE: int

Geef door aan config(pm=...) om WiFi-energiebeheer in te schakelen dat is afgestemd op maximale batterijduur. Uitsluitend CYW43.