clasa WLAN – controlul interfețelor WiFi integrate

Clasa WLAN gestionează radiourile WiFi integrate de pe camerele OpenMV Cam moderne. Aceeași clasă încapsulează două drivere subiacente diferite, în funcție de MCU-ul WiFi al plăcii:

  • CYW43 (modulul WiFi Infineon CYW43xxx Murata). Folosit de OpenMV Cam N6, OpenMV Cam RT1062, Arduino Portenta H7, Arduino Nicla Vision și Arduino Giga R1 WiFi.

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

Cele două drivere expun aceleași nume de metode, dar diferă în câteva argumente și în setul de chei config() acceptate. Diferențele sunt evidențiate mai jos.

Camerele OpenMV cu un shield WiFi WINC1500 mai vechi (M4 / M7 / H7 / H7 Plus / Pure Thermal) folosesc în schimb WINC.

Exemplu de utilizare:

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

Constructori

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

Creează un obiect de interfață WLAN.

interface_id selectează interfața pe care se operează:

  • WLAN.IF_STA – modul stație / client. Conectați-vă la un punct de acces din amonte cu connect(). Aceasta este valoarea implicită.

  • WLAN.IF_AP – modul punct de acces. Configurați AP-ul cu config() și acceptați conexiuni de la clienți.

Același radio fizic stă la baza ambelor interfețe; construirea uneia nu o exclude pe cealaltă.

Metode

active(is_active: bool | None = None) bool

Pornește sau oprește radioul WiFi.

Fără argument, returnează starea curentă – True cât timp radioul este pornit, False în caz contrar.

active(True) alimentează MCU-ul WiFi, îi încarcă firmware-ul (CYW43 preia blobul de firmware din memoria flash; NINA validează versiunea de firmware deja instalată) și pornește interfața de rețea lwIP pentru această interfață. Toate celelalte metode – connect(), scan(), ipconfig() și altele – necesită ca interfața să fie activă.

active(False) oprește din nou alimentarea radioului. Pe interfața STA, aceasta se și deasociază de la AP-ul curent și eliberează interfața de rețea.

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

Asociază interfața STA cu punctul de acces specificat.

ssid – SSID-ul rețelei (string sau bytes).

key – parola / cheia pre-partajată. Treceți None pentru o rețea deschisă.

security (doar ca argument cu nume) – una dintre constantele SEC_*. -1 (valoarea implicită) selectează automat: SEC_OPEN când key este gol, SEC_WPA_WPA2 în caz contrar.

bssid (doar ca argument cu nume, doar CYW43) – restrânge asocierea la AP-ul cu această adresă MAC de 6 octeți. Ignorat de driverul NINA.

channel (doar ca argument cu nume) – canalul radio preferat. Implicit este „lasă driverul să aleagă”.

disconnect() None

În modul STA, se deasociază de la punctul de acces asociat în prezent. Interfața rămâne activă; apelați din nou connect() pentru a vă reasocia, sau active() (False) pentru a opri complet alimentarea radioului. Nu are efect când nu există nicio asociere curentă.

isconnected() bool

În modul STA returnează True când este asociat cu un punct de acces și a fost obținută o adresă IPv4 prin DHCP (sau atribuită static prin ipconfig()). Returnează False cât timp legătura este încă în faza de autentificare/asociere/DHCP.

În modul AP returnează True când cel puțin o stație s-a alăturat.

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

Scanează după puncte de acces din apropiere și returnează o listă de tupluri cu 6 elemente:

  • [0] SSID (bytes; gol pentru rețelele ascunse).

  • [1] BSSID (MAC de 6 octeți, bytes). Convertiți cu binascii.hexlify().

  • [2] Numărul canalului.

  • [3] RSSI în dBm.

  • [4] Modul de securitate (una dintre constantele SEC_*).

  • [5] Rezervat (întotdeauna 1).

Toate argumentele cu nume sunt valabile doar pentru CYW43:

  • passive – dacă este True, folosește o scanare pasivă în locul scanării active implicite cu cereri de sondare.

  • ssid – restrânge scanarea la un singur SSID.

  • bssid – restrânge scanarea la un singur BSSID.

Scanarea are sens doar pe o interfață STA.

status() int
status(param: str) Any

Interoghează starea conexiunii.

Fără argument, returnează starea legăturii ca un întreg mic (codificare specifică driverului – o valoare adevărată înseamnă „asociat”).

Cu un argument de tip string:

  • "rssi" – în modul STA, returnează RSSI-ul curent în dBm.

  • "stations" – în modul AP, returnează o listă a stațiilor conectate. CYW43 returnează [(mac_bytes,), ...]; NINA returnează [ip_string, ...].

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

Obține sau setează parametrii IPv4 ai interfeței ca un tuplu cu 4 elemente de string-uri de forma (ip, subnet, gateway, dns) în notație cu puncte.

Notă

Preferați ipconfig() pentru codul nou:

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

Obține sau setează parametrii IPv4 / IPv6 ai interfeței. Driverul CYW43 deleagă implementării standard lwIP și acceptă setul complet de chei documentate la AbstractNIC.ipconfig(). Driverul NINA implementează un subset mai mic per interfață – dhcp4 și has_dhcp4 (doar citire), plus addr4 și gw4 pentru obținere / setare.

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

Obține sau setează parametrii interfeței specifici WiFi.

Cu un singur argument pozițional de tip string, returnează valoarea acelui parametru. Cu argumente cu nume, setează unul sau mai mulți parametri deodată – modificările care afectează un AP în funcțiune determină oprirea și repornirea automată a AP-ului.

Exemplu:

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

Driverul CYW43 – parametri ce pot fi obținuți:

  • "antenna" – selectorul de antenă (int).

  • "channel" – canalul curent.

  • "ssid" / "essid" – SSID-ul curent (string).

  • "security" – modul de autentificare al AP-ului (una dintre SEC_*).

  • "mac" – adresa MAC a interfeței (6 bytes).

  • "pm" – valoarea de gestionare a energiei.

  • "txpower" – puterea de transmisie în dBm.

  • "hostname" – numele de gazdă DHCP/mDNS. Învechit; folosiți în schimb network.hostname().

Driverul CYW43 – parametri ce pot fi setați:

  • antenna=<int> – selectorul de antenă.

  • channel=<int> – canalul AP-ului.

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

  • key=<str> / password=<str> – cheia pre-partajată a AP-ului.

  • security=<int> – modul de autentificare al AP-ului (una dintre SEC_*).

  • pm=<int> – modul de gestionare a energiei (una dintre PM_NONE, PM_PERFORMANCE, PM_POWERSAVE).

  • monitor=<int> – activează modul monitor / all-multicast.

  • txpower=<int> – puterea de transmisie în dBm.

  • trace=<int> – masca de biți internă pentru urmărirea driverului.

  • hostname=<str> – numele de gazdă DHCP/mDNS. Învechit; folosiți în schimb network.hostname().

Driverul NINA – parametri ce pot fi obținuți:

  • "ssid" – SSID-ul curent (string).

  • "security" – modul de autentificare al AP-ului.

  • "mac" / "bssid" – adresa MAC a interfeței (6 bytes).

  • "fw_version" – un tuplu cu 3 elemente (major, minor, patch).

Driverul NINA – parametri ce pot fi setați: apelul redirecționează către connect() și acceptă aceleași argumente cu nume (ssid, key, security, channel). Valid doar pe interfața AP.

deinit() None

Reciclează alimentarea MCU-ului WiFi și eliberează toate resursele deținute de driver (tampoanele de firmware, interfața de rețea lwIP, magistrala SPI/SDIO). După acest apel, obiectul WLAN trebuie reconstruit înainte de utilizare. Folosiți acest lucru în loc de active() (False) când aveți nevoie de o resetare completă (de exemplu, înainte de a reprograma firmware-ul radioului sau pentru a recupera dintr-o stare blocată a driverului). Doar CYW43.

send_ethernet(buf: bytes) None

Injectează cadrul Ethernet brut buf direct în calea de transmisie a driverului, ocolind stiva IP. Destinat consumatorilor doar de nivel L2 – punți (bridging), protocoale EtherType personalizate și altele similare. Cadrul trebuie să includă MAC-ul de destinație/sursă și EtherType (fără FCS – hardware-ul îl adaugă). Doar CYW43.

ioctl(cmd: int, buf: bytearray) None

Emite o comandă de control specifică driverului. cmd este codul ioctl numeric definit de firmware-ul radioului subiacent, iar buf este un tampon modificabil folosit atât pentru sarcina utilă a comenzii, cât și pentru răspuns. Setul de valori cmd valide este specific driverului și nu este portabil între CYW43 și NINA. Folosit în principal de scripturi de test de nivel scăzut și de cod de inițializare a cipului.

Constante

IF_STA: int

Identificatorul interfeței stație / client. Treceți-l constructorului pentru a selecta modul STA.

IF_AP: int

Identificatorul interfeței punct de acces. Treceți-l constructorului pentru a selecta modul AP.

SEC_OPEN: int

Valoarea de securitate pentru o rețea necriptată. Disponibilă pe ambele drivere.

SEC_WPA_WPA2: int

Valoarea de securitate pentru WPA / WPA2 cu o cheie pre-partajată. Valoarea implicită când se furnizează o cheie la connect(). Disponibilă pe ambele drivere.

SEC_WPA3: int

Valoarea de securitate pentru WPA3 (SAE) cu o cheie pre-partajată. Doar CYW43.

SEC_WPA2_WPA3: int

Valoarea de securitate pentru modul de tranziție WPA2 / WPA3. Doar CYW43.

SEC_WEP: int

Valoarea de securitate pentru WEP (Wired Equivalent Privacy). Furnizată pentru compatibilitate cu punctele de acces mai vechi – WEP este compromis criptografic și nu ar trebui folosit în implementări noi. Doar NINA.

OPEN: int

Alias de compatibilitate retroactivă pentru SEC_OPEN. Codul nou ar trebui să folosească SEC_OPEN. Doar NINA.

WEP: int

Alias de compatibilitate retroactivă pentru SEC_WEP. Codul nou ar trebui să folosească SEC_WEP. Doar NINA.

WPA_PSK: int

Alias de compatibilitate retroactivă pentru SEC_WPA_WPA2. Codul nou ar trebui să folosească SEC_WPA_WPA2. Doar NINA.

PM_NONE: int

Treceți la config(pm=...) pentru a dezactiva gestionarea energiei WiFi. Doar CYW43.

PM_PERFORMANCE: int

Treceți la config(pm=...) pentru a activa gestionarea energiei WiFi optimizată pentru performanță. Doar CYW43.

PM_POWERSAVE: int

Treceți la config(pm=...) pentru a activa gestionarea energiei WiFi optimizată pentru durată maximă de viață a bateriei. Doar CYW43.