class WLAN – styr inbyggda WiFi-gränssnitt

Klassen WLAN driver de inbyggda WiFi-radioenheterna på moderna OpenMV Cam-kameror. Samma klass omsluter två olika underliggande drivrutiner beroende på kortets WiFi-MCU:

  • CYW43 (Infineon CYW43xxx Murata WiFi-modul). Används av OpenMV Cam N6, OpenMV Cam RT1062, Arduino Portenta H7, Arduino Nicla Vision och Arduino Giga R1 WiFi.

  • NINA W10 (u-blox NINA-W10 / ESP32-WROOM). Används av Arduino Nano RP2040 Connect.

De två drivrutinerna exponerar samma metodnamn men skiljer sig åt i ett fåtal argument och i uppsättningen accepterade config()-nycklar. Skillnaderna markeras nedan.

OpenMV-kamerorna med en äldre WINC1500 WiFi-sköld (M4 / M7 / H7 / H7 Plus / Pure Thermal) använder WINC istället.

Exempelanvändning:

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

Konstruktorer

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

Skapa ett WLAN-gränssnittsobjekt.

interface_id väljer vilket gränssnitt som ska användas:

  • WLAN.IF_STA – station/klientläge. Anslut till en överordnad åtkomstpunkt med connect(). Detta är standardvärdet.

  • WLAN.IF_AP – åtkomstpunktsläge. Konfigurera åtkomstpunkten med config() och ta emot klientanslutningar.

Samma fysiska radio ligger bakom båda gränssnitten; att konstruera det ena utesluter inte det andra.

Metoder

active(is_active: bool | None = None) bool

Starta upp eller stäng av WiFi-radion.

Utan argument returneras det aktuella tillståndet – True medan radion är uppe, False annars.

active(True) slår på WiFi-MCU:n, läser in dess fasta programvara (CYW43 hämtar programvarublobben från flashminne; NINA validerar den för närvarande flashade firmware-versionen) och startar upp lwIP-netif för detta gränssnitt. Alla andra metoder – connect(), scan(), ipconfig() med flera – kräver att gränssnittet är aktivt.

active(False) stänger av radion igen. På STA-gränssnittet kopplar detta även bort från den aktuella åtkomstpunkten och frigör netif.

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

Associera STA-gränssnittet med den angivna åtkomstpunkten.

ssid – nätverkets SSID (sträng eller bytes).

key – lösenord/för-delad nyckel. Skicka None för ett öppet nätverk.

security (endast nyckelord) – en av SEC_*-konstanterna. -1 (standardvärdet) väljer automatiskt: SEC_OPEN när key är tom, SEC_WPA_WPA2 annars.

bssid (endast nyckelord, endast CYW43) – begränsa associationen till åtkomstpunkten med denna 6-byte MAC-adress. Ignoreras av NINA-drivrutinen.

channel (endast nyckelord) – föredragen radiokanal. Standard är ”låt drivrutinen välja”.

disconnect() None

I STA-läge, koppla bort från den för närvarande associerade åtkomstpunkten. Gränssnittet förblir aktivt; anropa connect() igen för att återassociera, eller active() (False) för att stänga av radion helt. Ingen åtgärd när ingen association för närvarande finns.

isconnected() bool

I STA-läge returneras True när gränssnittet är associerat med en åtkomstpunkt och en IPv4-adress har erhållits från DHCP (eller tilldelats statiskt via ipconfig()). Returnerar False medan länken fortfarande befinner sig i autentiserings-/associerings-/DHCP-fasen.

I AP-läge returneras True när minst en station har anslutit.

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

Sök efter närliggande åtkomstpunkter och returnera en lista med 6-tupler:

  • [0] SSID (bytes; tomt för dolda nätverk).

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

  • [2] Kanalnummer.

  • [3] RSSI i dBm.

  • [4] Säkerhetsläge (en av SEC_*-konstanterna).

  • [5] Reserverat (alltid 1).

Alla nyckelordsargument är endast för CYW43:

  • passive – om True används en passiv sökning istället för den förvalda aktiva probe-request-sökningen.

  • ssid – begränsa sökningen till ett SSID.

  • bssid – begränsa sökningen till ett BSSID.

Sökning är endast meningsfull på ett STA-gränssnitt.

status() int
status(param: str) Any

Fråga efter anslutningsstatus.

Utan argument returneras länkstatusen som ett litet heltal (drivrutinsspecifik kodning – ett sant värde betyder ”associerad”).

Med ett strängargument:

  • "rssi" – i STA-läge, returnera den aktuella RSSI:n i dBm.

  • "stations" – i AP-läge, returnera en lista över anslutna stationer. CYW43 returnerar [(mac_bytes,), ...]; NINA returnerar [ip_string, ...].

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

Hämta eller ange IPv4-gränssnittsparametrar som en 4-tupel av punktnoterade strängar (ip, subnet, gateway, dns).

Anteckning

Föredra ipconfig() för ny kod:

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

Hämta eller ange IPv4-/IPv6-gränssnittsparametrar. CYW43-drivrutinen delegerar till standardimplementationen av lwIP och stöder hela uppsättningen nycklar som dokumenteras för AbstractNIC.ipconfig(). NINA-drivrutinen implementerar en mindre delmängd per gränssnitt – dhcp4 och has_dhcp4 (skrivskyddade), samt addr4 och gw4 för hämtning/inställning.

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

Hämta eller ange WiFi-specifika gränssnittsparametrar.

Med ett enda positionellt strängargument returneras värdet för den parametern. Med nyckelordsargument anges en eller flera parametrar på en gång – ändringar som påverkar en pågående åtkomstpunkt gör att åtkomstpunkten automatiskt stängs ned och startas upp igen.

Exempel:

# 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-drivrutinen – hämtbara parametrar:

  • "antenna" – antennväljare (int).

  • "channel" – aktuell kanal.

  • "ssid" / "essid" – det aktuella SSID:t (sträng).

  • "security" – åtkomstpunktens autentiseringsläge (en av SEC_*).

  • "mac" – gränssnittets MAC-adress (6 bytes).

  • "pm" – värde för strömhantering.

  • "txpower" – sändareffekt i dBm.

  • "hostname" – DHCP-/mDNS-värdnamn. Föråldrad; använd network.hostname() istället.

CYW43-drivrutinen – inställbara parametrar:

  • antenna=<int> – antennväljare.

  • channel=<int> – åtkomstpunktens kanal.

  • ssid=<str> / essid=<str> – åtkomstpunktens SSID.

  • key=<str> / password=<str> – åtkomstpunktens för-delade nyckel.

  • security=<int> – åtkomstpunktens autentiseringsläge (en av SEC_*).

  • pm=<int> – strömhanteringsläge (en av PM_NONE, PM_PERFORMANCE, PM_POWERSAVE).

  • monitor=<int> – aktivera monitor-/all-multicast-läge.

  • txpower=<int> – sändareffekt i dBm.

  • trace=<int> – intern bitmask för drivrutinsspårning.

  • hostname=<str> – DHCP-/mDNS-värdnamn. Föråldrad; använd network.hostname() istället.

NINA-drivrutinen – hämtbara parametrar:

  • "ssid" – det aktuella SSID:t (sträng).

  • "security" – åtkomstpunktens autentiseringsläge.

  • "mac" / "bssid" – gränssnittets MAC-adress (6 bytes).

  • "fw_version" – en 3-tupel (major, minor, patch).

NINA-drivrutinen – inställbara parametrar: anropet vidarebefordras till connect() och accepterar samma nyckelordsargument (ssid, key, security, channel). Endast giltigt på AP-gränssnittet.

deinit() None

Strömcykla WiFi-MCU:n och frigör alla resurser som drivrutinen håller (firmware-buffertar, lwIP-netif, SPI/SDIO-buss). Efter att detta anropats måste WLAN-objektet återskapas innan det används. Använd detta istället för active() (False) när du behöver en fullständig återställning (till exempel innan radions fasta programvara flashas om, eller för att återhämta sig från ett fastlåst drivrutinstillstånd). Endast CYW43.

send_ethernet(buf: bytes) None

Mata in den råa Ethernet-bildrutan buf direkt i drivrutinens sändningsväg, förbi IP-stacken. Avsedd för konsumenter som endast använder L2 – bryggning, anpassade EtherType-protokoll och liknande. Bildrutan måste innehålla destinations-/käll-MAC och EtherType (ingen FCS – hårdvaran lägger till den). Endast CYW43.

ioctl(cmd: int, buf: bytearray) None

Utför ett drivrutinsspecifikt styrkommando. cmd är den numeriska ioctl-koden som definieras av den underliggande radions fasta programvara och buf är en muterbar buffert som används för både kommandots nyttolast och svaret. Uppsättningen giltiga cmd-värden är drivrutinsspecifik och inte portabel mellan CYW43 och NINA. Används mestadels av lågnivåtestskript och kod för chip-igångsättning.

Konstanter

IF_STA: int

Identifierare för station-/klientgränssnitt. Skicka till konstruktorn för att välja STA-läge.

IF_AP: int

Identifierare för åtkomstpunktsgränssnitt. Skicka till konstruktorn för att välja AP-läge.

SEC_OPEN: int

Säkerhetsvärde för ett okrypterat nätverk. Tillgängligt på båda drivrutinerna.

SEC_WPA_WPA2: int

Säkerhetsvärde för WPA/WPA2 med en för-delad nyckel. Standardvärdet när en nyckel anges till connect(). Tillgängligt på båda drivrutinerna.

SEC_WPA3: int

Säkerhetsvärde för WPA3 (SAE) med en för-delad nyckel. Endast CYW43.

SEC_WPA2_WPA3: int

Säkerhetsvärde för WPA2-/WPA3-övergångsläget. Endast CYW43.

SEC_WEP: int

Säkerhetsvärde för WEP (Wired Equivalent Privacy). Tillhandahålls för kompatibilitet med äldre åtkomstpunkter – WEP är kryptografiskt brutet och bör inte användas i nya driftsättningar. Endast NINA.

OPEN: int

Bakåtkompatibelt alias för SEC_OPEN. Ny kod bör använda SEC_OPEN. Endast NINA.

WEP: int

Bakåtkompatibelt alias för SEC_WEP. Ny kod bör använda SEC_WEP. Endast NINA.

WPA_PSK: int

Bakåtkompatibelt alias för SEC_WPA_WPA2. Ny kod bör använda SEC_WPA_WPA2. Endast NINA.

PM_NONE: int

Skicka till config(pm=...) för att inaktivera WiFi-strömhantering. Endast CYW43.

PM_PERFORMANCE: int

Skicka till config(pm=...) för att aktivera WiFi-strömhantering inställd för prestanda. Endast CYW43.

PM_POWERSAVE: int

Skicka till config(pm=...) för att aktivera WiFi-strömhantering inställd för maximal batterilivslängd. Endast CYW43.