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_idselectează interfața pe care se operează:WLAN.IF_STA– modul stație / client. Conectați-vă la un punct de acces din amonte cuconnect(). Aceasta este valoarea implicită.WLAN.IF_AP– modul punct de acces. Configurați AP-ul cuconfig()ș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ă –
Truecâ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țiNonepentru o rețea deschisă.security(doar ca argument cu nume) – una dintre constanteleSEC_*.-1(valoarea implicită) selectează automat:SEC_OPENcândkeyeste 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, sauactive()(False)pentru a opri complet alimentarea radioului. Nu are efect când nu există nicio asociere curentă.
- isconnected() bool¶
În modul STA returnează
Truecând este asociat cu un punct de acces și a fost obținută o adresă IPv4 prin DHCP (sau atribuită static prinipconfig()). ReturneazăFalsecât timp legătura este încă în faza de autentificare/asociere/DHCP.În modul AP returnează
Truecâ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 cubinascii.hexlify().[2]Numărul canalului.[3]RSSI în dBm.[4]Modul de securitate (una dintre constanteleSEC_*).[5]Rezervat (întotdeauna1).
Toate argumentele cu nume sunt valabile doar pentru CYW43:
passive– dacă esteTrue, 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șihas_dhcp4(doar citire), plusaddr4șigw4pentru 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 dintreSEC_*)."mac"– adresa MAC a interfeței (6bytes)."pm"– valoarea de gestionare a energiei."txpower"– puterea de transmisie în dBm."hostname"– numele de gazdă DHCP/mDNS. Învechit; folosiți în schimbnetwork.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 dintreSEC_*).pm=<int>– modul de gestionare a energiei (una dintrePM_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 schimbnetwork.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 (6bytes)."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
WLANtrebuie reconstruit înainte de utilizare. Folosiți acest lucru în loc deactive()(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
bufdirect î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.
cmdeste codul ioctl numeric definit de firmware-ul radioului subiacent, iarbufeste un tampon modificabil folosit atât pentru sarcina utilă a comenzii, cât și pentru răspuns. Setul de valoricmdvalide 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_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_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.