class WINC – ovladač WiFi shieldu

Třída WINC řídí WiFi modul Atmel WINC1500 802.11 b/g/n na desce OpenMV WiFi Shield. Dostupné na OpenMV Cam M4, M7, H7, H7 Plus a Pure Thermal (desky STM32, pro které byl WiFi shield navržen). Pro desky s vestavěnou WiFi (OpenMV Cam N6, OpenMV Cam RT1062, Arduino Giga) použijte místo toho WLAN.

Příklad – připojení k přístupovému bodu a výpis adresy:

import network

wlan = network.WINC()
wlan.connect("SSID", "KEY", security=network.WINC.WPA_PSK)

print("status:    ", "connected" if wlan.isconnected() else "off")
print("rssi:      ", wlan.rssi(), "dBm")
print("interface: ", wlan.ifconfig())
print("netinfo:   ", wlan.netinfo())

Příklad – spuštění otevřeného přístupového bodu a čekání na klienta:

import network

wlan = network.WINC(mode=network.WINC.MODE_AP)
wlan.start_ap("OpenMV-Cam", security=network.WINC.OPEN, channel=6)

print("waiting for a station to associate...")
print(wlan.wait_for_sta(timeout=None))

Konstruktory

class network.WINC(mode: int = WINC.MODE_STA) None

Vytvoří objekt ovladače WINC a spustí WiFi shield.

mode volí provozní režim, ve kterém modul startuje:

Poznámka

V režimu AP má WINC1500 hardwarová omezení:

  • Současně se může připojit pouze jeden klient.

  • Podporováno je pouze zabezpečení OPEN nebo WEP.

  • Chyba ve firmwaru WiFi modulu způsobuje, že jakékoli navázané sockety přestanou fungovat, když se klient odpojí. Nastavte na serverovém socketu timeout, aby vyvolal výjimku, kterou můžete použít k jeho opětovnému otevření.

Metody

active(is_active: bool | None = None) bool

Aktivuje nebo deaktivuje WiFi shield.

Bez argumentu vrátí aktuální stav – True, dokud je shield inicializován a rádio aktivní, jinak False.

active(True) provede handshake firmwaru WINC1500 přes SPI a spustí rádio v nakonfigurovaném režimu mode. Pokud je rozhraní již aktivní, nemá žádný efekt. connect() toto volá automaticky, pokud ještě nebylo voláno; pro jakoukoli jinou metodu (scan(), rssi(), netinfo(), …) musíte nejprve zavolat active(True).

active(False) opět vypne rádio (WINC přejde do režimu pouze BSP) a uvolní piny SPI.

connect(ssid: str, key: str | None = None, *, security: int = WINC.WPA_PSK, channel: int = 1) None

Připojí se k WiFi síti ssid s heslem key, režimem zabezpečení security (jednou z hodnot OPEN, WPA_PSK nebo konstanty 802.1X) na kanálu channel. security a channel jsou pouze klíčové (keyword-only).

Po připojení použijte modul socket k otevření TCP/UDP portů.

Tato metoda blokuje, dokud se připojení nedokončí nebo nezdaří.

config(ssid: str, key: str | None = None, *, security: int = WINC.WPA_PSK, channel: int = 1) None

Alias pro connect(). Poskytováno kvůli kompatibilitě s kódem, který volá config na jiných rozhraních network.

start_ap(ssid: str, key: str | None = None, *, security: int = WINC.OPEN, channel: int = 1) None

Alias pro connect() používaný po vytvoření objektu s mode=MODE_AP ke konfiguraci a spuštění přístupového bodu. AP podporuje pouze zabezpečení OPEN nebo WEP; pokud je použito WEP, je vyžadován key.

disconnect() None

V režimu STA se odpojí od aktuálně přiřazeného přístupového bodu. Shield zůstává aktivní; pro opětovné připojení zavolejte connect(). Pokud aktuálně není připojen, nemá žádný efekt.

isconnected() bool

V režimu STA vrátí True, pokud je připojen k přístupovému bodu a byla získána IPv4 adresa (přes DHCP nebo ifconfig()). Vrátí False, dokud je stále ve fázi autentizace / přiřazování / DHCP.

connected_sta() List[str]

V režimu AP vrátí seznam obsahující IP adresu aktuálně připojeného klienta (nebo prázdný seznam, pokud není připojen žádný klient).

wait_for_sta(timeout: int | None) List[str]

V režimu AP blokuje, dokud se nepřipojí klient, a vrátí seznam obsahující IP adresu klienta. timeout je maximální doba čekání v milisekundách; předáním None se bude čekat neomezeně.

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

Získá nebo nastaví parametry rozhraní IPv4. 4-tice obsahuje (ip, subnet, gateway, dns) jako řetězce v tečkové notaci.

Voláno bez argumentu: vrátí aktuální konfiguraci.

Voláno se 4-ticí: nastaví statickou konfiguraci IP místo té získané přes DHCP.

Příklad – nastavení statické IP před připojením:

wlan = network.WINC()
wlan.ifconfig(("192.168.1.100", "255.255.255.0",
               "192.168.1.1", "192.168.1.1"))
wlan.connect(SSID, key=KEY, security=network.WINC.WPA_PSK)

Poznámka

WINC neimplementuje moderní API AbstractNIC.ipconfig(); zde použijte ifconfig().

netinfo() Tuple[int, int, str, str, str]

Vrátí 5-tici popisující aktuální připojení:

  • [0] RSSI jako int (dBm).

  • [1] Režim zabezpečení – jedna z konstant zabezpečení.

  • [2] Řetězec SSID.

  • [3] BSSID jako MAC řetězec "XX:XX:XX:XX:XX:XX".

  • [4] IPv4 adresa jako řetězec v tečkové notaci.

scan() List[Tuple[str, str, int, int, int, int]]

Vyhledá okolní přístupové body. Vrátí seznam 6-tic:

  • [0] Řetězec SSID.

  • [1] BSSID jako MAC řetězec "XX:XX:XX:XX:XX:XX".

  • [2] Číslo kanálu.

  • [3] RSSI v dBm.

  • [4] Režim zabezpečení – jedna z konstant zabezpečení.

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

Lze volat bez předchozího připojení k síti.

rssi() int

Vrátí RSSI v dBm aktuálně připojeného přístupového bodu. Zhruba: -30 je výborné, -67 je v pořádku pro streamování, -80 je hraniční, -90 a méně je nepoužitelné. Smysluplné pouze v režimu STA, dokud je isconnected() True.

fw_version() Tuple[int, int, int, int, int, int, int]

Vrátí 7-tici popisující verze firmwaru a ovladače WINC1500:

  • [0] Hlavní verze firmwaru (major).

  • [1] Vedlejší verze firmwaru (minor).

  • [2] Patch verze firmwaru.

  • [3] Hlavní verze ovladače (major).

  • [4] Vedlejší verze ovladače (minor).

  • [5] Patch verze ovladače.

  • [6] Hardwarová revize čipu.

fw_dump(path: str) None

Přečte interní flash paměť WINC1500 a zapíše výsledný obraz firmwaru do souboru v cestě path na souborovém systému OpenMV. Použijte k zálohování aktuálně nainstalovaného obrazu před voláním fw_update().

Vyžaduje, aby byl modul vytvořen s mode=MODE_FIRMWARE.

fw_update(path: str) None

Vymaže interní flash paměť WINC1500 a naprogramuje ji binárním obrazem v cestě path. Obraz musí odpovídat rozložení očekávanému firmwarem OpenMV (obvykle dodávaným společností Atmel / Microchip s WINC SDK).

Volání blokuje několik sekund, dokud je flash paměť naprogramována a ověřena. Po návratu z volání proveďte vypnutí a zapnutí napájení OpenMV Cam, aby WINC1500 nastartoval z nového obrazu.

Vyžaduje, aby byl modul vytvořen s mode=MODE_FIRMWARE.

Konstanty

OPEN: int

Hodnota zabezpečení pro nešifrovanou síť. Předejte do argumentu security metod connect() / start_ap().

WPA_PSK: int

Hodnota zabezpečení pro WPA/WPA2 s předsdíleným klíčem. Výchozí pro connect().

Poznámka

Existuje také hodnota zabezpečení WPA/WPA2 Enterprise (802.1X). Firmware ji vystavuje pod názvem 802_1X, což není platný identifikátor Pythonu – přistupte k ní přes getattr(network.WINC, "802_1X").

MODE_STA: int

Režim stanice – připojení k přístupovému bodu jako klient. Výchozí režim konstruktoru.

MODE_AP: int

Režim přístupového bodu – WINC se stane AP, ke kterému se klienti připojují.

MODE_P2P: int

Režim WiFi-Direct (peer-to-peer).

MODE_BSP: int

Inicializuje pouze board-support package WINC – rádio se nespustí. Používáno při procesu aktualizace firmwaru.

MODE_FIRMWARE: int

Režim aktualizace firmwaru. Vyžadováno metodami fw_dump() a fw_update().