třída WLAN – ovládání vestavěných WiFi rozhraní

Třída WLAN řídí vestavěné WiFi rádio na moderních kamerách OpenMV Cam. Tatáž třída obaluje dva různé základní ovladače podle WiFi MCU dané desky:

  • CYW43 (WiFi modul Infineon CYW43xxx Murata). Používaný kamerami OpenMV Cam N6, OpenMV Cam RT1062, Arduino Portenta H7, Arduino Nicla Vision a Arduino Giga R1 WiFi.

  • NINA W10 (u-blox NINA-W10 / ESP32-WROOM). Používaný zařízením Arduino Nano RP2040 Connect.

Oba ovladače poskytují stejné názvy metod, ale liší se v několika argumentech a v sadě přijímaných klíčů config(). Rozdíly jsou níže označeny.

Kamery OpenMV se starším WiFi shieldem WINC1500 (M4 / M7 / H7 / H7 Plus / Pure Thermal) používají místo toho WINC.

Příklad použití:

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

Konstruktory

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

Vytvoří objekt rozhraní WLAN.

interface_id vybírá, na kterém rozhraní se má pracovat:

  • WLAN.IF_STA – režim stanice / klienta. Připojte se k nadřazenému přístupovému bodu pomocí connect(). Toto je výchozí volba.

  • WLAN.IF_AP – režim přístupového bodu. Nakonfigurujte AP pomocí config() a přijímejte připojení klientů.

Obě rozhraní pohání totéž fyzické rádio; vytvoření jednoho nevylučuje druhé.

Metody

active(is_active: bool | None = None) bool

Zapne nebo vypne WiFi rádio.

Bez argumentu vrací aktuální stav – True, pokud je rádio zapnuté, jinak False.

active(True) napájí WiFi MCU, načte jeho firmware (CYW43 načte blob s firmwarem z flash paměti; NINA ověří aktuálně nahranou verzi firmwaru) a uvede do provozu lwIP netif tohoto rozhraní. Všechny ostatní metody – connect(), scan(), ipconfig() a spol. – vyžadují, aby bylo rozhraní aktivní.

active(False) rádio opět vypne. Na rozhraní STA tím rovněž dojde k odpojení od aktuálního AP a uvolnění netif.

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

Přidruží rozhraní STA k zadanému přístupovému bodu.

ssid – SSID sítě (řetězec nebo bajty).

key – heslo / sdílený klíč. Pro otevřenou síť předejte None.

security (pouze klíčové slovo) – jedna z konstant SEC_*. -1 (výchozí) vybírá automaticky: SEC_OPEN, je-li key prázdný, jinak SEC_WPA_WPA2.

bssid (pouze klíčové slovo, pouze CYW43) – omezí přidružení na AP s touto 6bajtovou MAC adresou. Ovladač NINA jej ignoruje.

channel (pouze klíčové slovo) – preferovaný rádiový kanál. Výchozí volba je „nechat ovladač vybrat“.

disconnect() None

V režimu STA odpojí od aktuálně přidruženého přístupového bodu. Rozhraní zůstává aktivní; pro opětovné přidružení zavolejte znovu connect(), nebo active() (False) pro úplné vypnutí rádia. Pokud aktuálně není přidruženo, jde o prázdnou operaci.

isconnected() bool

V režimu STA vrací True, je-li přidruženo k přístupovému bodu a byla získána IPv4 adresa z DHCP (nebo přidělena staticky pomocí ipconfig()). Vrací False, dokud je linka stále ve fázi autentizace/přidružování/DHCP.

V režimu AP vrací True, pokud se připojila alespoň jedna stanice.

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

Vyhledá okolní přístupové body a vrátí seznam 6prvkových n-tic:

  • [0] SSID (bajty; prázdné u skrytých sítí).

  • [1] BSSID (6bajtová MAC, bytes). Převeďte pomocí binascii.hexlify().

  • [2] Číslo kanálu.

  • [3] RSSI v dBm.

  • [4] Režim zabezpečení (jedna z konstant SEC_*).

  • [5] Rezervováno (vždy 1).

Všechny argumenty zadávané klíčovým slovem jsou pouze pro CYW43:

  • passive – je-li True, použije pasivní skenování namísto výchozího aktivního skenování pomocí probe-request.

  • ssid – omezí skenování na jedno SSID.

  • bssid – omezí skenování na jedno BSSID.

Skenování má smysl pouze na rozhraní STA.

status() int
status(param: str) Any

Dotaz na stav připojení.

Bez argumentu vrací stav linky jako malé celé číslo (kódování závislé na ovladači – pravdivá hodnota znamená „přidruženo“).

S řetězcovým argumentem:

  • "rssi" – v režimu STA vrací aktuální RSSI v dBm.

  • "stations" – v režimu AP vrací seznam připojených stanic. CYW43 vrací [(mac_bytes,), ...]; NINA vrací [ip_string, ...].

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

Získá nebo nastaví parametry IPv4 rozhraní jako 4prvkovou n-tici řetězců ve formátu tečkové čtveřice (ip, subnet, gateway, dns).

Poznámka

Pro nový kód preferujte 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

Získá nebo nastaví parametry rozhraní IPv4 / IPv6. Ovladač CYW43 deleguje na standardní implementaci lwIP a podporuje úplnou sadu klíčů zdokumentovaných u AbstractNIC.ipconfig(). Ovladač NINA implementuje menší podmnožinu pro jednotlivá rozhraní – dhcp4 a has_dhcp4 (pouze pro čtení), plus addr4 a gw4 pro získání / nastavení.

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

Získá nebo nastaví parametry rozhraní specifické pro WiFi.

S jediným pozičním řetězcovým argumentem vrací hodnotu daného parametru. S argumenty zadanými klíčovým slovem nastaví jeden či více parametrů najednou – změny ovlivňující běžící AP způsobí, že je AP automaticky vypnut a opět zapnut.

Příklad:

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

Ovladač CYW43 – čitelné parametry:

  • "antenna" – volič antény (int).

  • "channel" – aktuální kanál.

  • "ssid" / "essid" – aktuální SSID (řetězec).

  • "security" – režim ověřování AP (jeden z SEC_*).

  • "mac" – MAC adresa rozhraní (6 bytes).

  • "pm" – hodnota správy napájení.

  • "txpower" – vysílací výkon v dBm.

  • "hostname" – DHCP/mDNS název hostitele. Zastaralé; místo toho použijte network.hostname().

Ovladač CYW43 – nastavitelné parametry:

  • antenna=<int> – volič antény.

  • channel=<int> – kanál AP.

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

  • key=<str> / password=<str> – sdílený klíč AP.

  • security=<int> – režim ověřování AP (jeden z SEC_*).

  • pm=<int> – režim správy napájení (jeden z PM_NONE, PM_PERFORMANCE, PM_POWERSAVE).

  • monitor=<int> – povolí režim monitor / all-multicast.

  • txpower=<int> – vysílací výkon v dBm.

  • trace=<int> – interní bitová maska trasování ovladače.

  • hostname=<str> – DHCP/mDNS název hostitele. Zastaralé; místo toho použijte network.hostname().

Ovladač NINA – čitelné parametry:

  • "ssid" – aktuální SSID (řetězec).

  • "security" – režim ověřování AP.

  • "mac" / "bssid" – MAC adresa rozhraní (6 bytes).

  • "fw_version" – 3prvková n-tice (major, minor, patch).

Ovladač NINA – nastavitelné parametry: volání se předává metodě connect() a přijímá tytéž argumenty zadávané klíčovým slovem (ssid, key, security, channel). Platné pouze na rozhraní AP.

deinit() None

Provede vypnutí a zapnutí WiFi MCU a uvolní všechny prostředky, které ovladač drží (buffery firmwaru, lwIP netif, sběrnice SPI/SDIO). Po tomto volání je nutné objekt WLAN před použitím znovu vytvořit. Použijte to namísto active() (False), když potřebujete úplný reset (například před opětovným nahráním firmwaru rádia nebo pro zotavení ze zaseknutého stavu ovladače). Pouze CYW43.

send_ethernet(buf: bytes) None

Vstříkne surový Ethernet snímek buf přímo do vysílací cesty ovladače, čímž obejde IP zásobník. Určeno pro spotřebitele používající pouze L2 – mostování, vlastní protokoly EtherType apod. Snímek musí obsahovat cílovou/zdrojovou MAC a EtherType (bez FCS – to připojí hardware). Pouze CYW43.

ioctl(cmd: int, buf: bytearray) None

Vydá řídicí příkaz specifický pro ovladač. cmd je číselný kód ioctl definovaný základním firmwarem rádia a buf je měnitelný buffer používaný jak pro užitečné zatížení příkazu, tak pro odpověď. Sada platných hodnot cmd je specifická pro ovladač a není přenositelná mezi CYW43 a NINA. Používáno většinou nízkoúrovňovými testovacími skripty a kódem pro uvádění čipů do provozu.

Konstanty

IF_STA: int

Identifikátor rozhraní stanice / klienta. Předejte konstruktoru pro výběr režimu STA.

IF_AP: int

Identifikátor rozhraní přístupového bodu. Předejte konstruktoru pro výběr režimu AP.

SEC_OPEN: int

Hodnota zabezpečení pro nešifrovanou síť. Dostupné u obou ovladačů.

SEC_WPA_WPA2: int

Hodnota zabezpečení pro WPA / WPA2 se sdíleným klíčem. Výchozí, když je metodě connect() předán klíč. Dostupné u obou ovladačů.

SEC_WPA3: int

Hodnota zabezpečení pro WPA3 (SAE) se sdíleným klíčem. Pouze CYW43.

SEC_WPA2_WPA3: int

Hodnota zabezpečení pro přechodový režim WPA2 / WPA3. Pouze CYW43.

SEC_WEP: int

Hodnota zabezpečení pro WEP (Wired Equivalent Privacy). Poskytováno pro kompatibilitu se staršími přístupovými body – WEP je kryptograficky prolomený a neměl by se v nových nasazeních používat. Pouze NINA.

OPEN: int

Alias pro zpětnou kompatibilitu s SEC_OPEN. Nový kód by měl používat SEC_OPEN. Pouze NINA.

WEP: int

Alias pro zpětnou kompatibilitu s SEC_WEP. Nový kód by měl používat SEC_WEP. Pouze NINA.

WPA_PSK: int

Alias pro zpětnou kompatibilitu s SEC_WPA_WPA2. Nový kód by měl používat SEC_WPA_WPA2. Pouze NINA.

PM_NONE: int

Předejte do config(pm=...) pro vypnutí správy napájení WiFi. Pouze CYW43.

PM_PERFORMANCE: int

Předejte do config(pm=...) pro zapnutí správy napájení WiFi vyladěné pro výkon. Pouze CYW43.

PM_POWERSAVE: int

Předejte do config(pm=...) pro zapnutí správy napájení WiFi vyladěné pro maximální výdrž baterie. Pouze CYW43.