network — hálózati konfiguráció

Ez a modul hálózati drivereket és útválasztási konfigurációt biztosít. A modul használatához egy hálózati képességekkel rendelkező MicroPython variánst/buildet kell telepíteni. Az adott hardverhez tartozó hálózati driverek ezen a modulon belül érhetők el, és a hardveres hálózati interfész(ek) konfigurálására szolgálnak. A konfigurált interfészek által nyújtott hálózati szolgáltatások ezután a socket modulon keresztül érhetők el.

Például:

import network
import socket
import time

nic = network.WLAN(network.WLAN.IF_STA)
nic.active(True)
nic.connect("your-ssid", "your-key")

print("Waiting for connection...")
while not nic.isconnected():
    time.sleep(1)
print(nic.ipconfig("addr4"))

# Open a TCP socket as usual.
addr = socket.getaddrinfo("micropython.org", 80)[0][-1]
s = socket.socket()
s.connect(addr)
s.send(b"GET / HTTP/1.1\r\nHost: micropython.org\r\n\r\n")
data = s.recv(1000)
s.close()

Cserélje le a WLAN osztályt a WINC (régebbi WiFi shield) vagy a LAN (beépített Ethernet) osztályra a kamerának megfelelően. A létrehozás -> aktiválás -> csatlakozás -> socketek használata magas szintű minta mindhárom esetben ugyanaz.

Közös hálózati adapter interfész

Ez a szakasz egy (vélelmezett) absztrakt alaposztályt ír le, amely a MicroPython portok által különböző hardverekhez megvalósított összes hálózati interfész osztály alapja. Ez azt jelenti, hogy a MicroPython valójában nem biztosít AbstractNIC osztályt, de minden tényleges NIC osztály – ahogy a következő szakaszokban leírjuk – megvalósítja az itt ismertetett metódusokat.

class network.AbstractNIC(id: int | None = None, *args: Any, **kwargs: Any) None

Példányosít egy hálózati interfész objektumot. A paraméterek a hálózati interfésztől függenek. Ha egy típusból több interfész is van, az első paraméter az id legyen.

active(is_active: bool | None = None, /) bool

Bekapcsolja vagy kikapcsolja a hálózati interfészt.

Argumentum nélkül visszaadja az aktuális állapotot – True, amíg az interfész aktív, egyébként False.

Adjon át True értéket az interfész aktiválásához: bekapcsolja / visszaállítja az alapul szolgáló hálózati vezérlőt, betölti a firmware-t, ahol alkalmazható, és felépíti az IP veremet ezen az interfészen. A hálózattal kommunikáló későbbi hívások (connect(), scan(), ipconfig(), …) megkövetelik, hogy az interfész aktív legyen.

Adjon át False értéket az interfész deaktiválásához: lebontja az IP veremet és felszabadítja a driver erőforrásait. Vezeték nélküli interfészeken ez egyúttal leválasztja minden éppen csatlakozott hálózatról.

Más metódusok inaktív interfészen való meghívásának viselkedése nem definiált.

connect(service_id: str | None = None, key: str | None = None, *, bssid: bytes | None = None, **kwargs: Any) None

Csatlakoztatja az interfészt egy hálózathoz. Ez a metódus opcionális, és csak azoknál az interfészeknél érhető el, amelyek nem „mindig kapcsolódnak”. Ha nincs megadva paraméter, az alapértelmezett (vagy az egyetlen) szolgáltatáshoz csatlakozik. Ha egyetlen paraméter van megadva, az a csatlakozni kívánt szolgáltatás elsődleges azonosítója. Ezt kísérheti egy kulcs (jelszó), amely az adott szolgáltatáshoz való hozzáféréshez szükséges. További tetszőleges, csak kulcsszóként megadható paraméterek is lehetnek, a hálózati közeg típusától és/vagy az adott eszköztől függően. A paraméterek felhasználhatók a következőkre: a) alternatív szolgáltatásazonosító típusok megadása; b) további csatlakozási paraméterek biztosítása. A különböző közegtípusokhoz eltérő, előre definiált/ajánlott paraméterkészletek tartoznak, többek között:

  • WiFi: bssid kulcsszó egy adott BSSID-hez (MAC-cím) való csatlakozáshoz

disconnect() None

Lecsatlakozás a hálózatról.

isconnected() bool

True értéket ad vissza, ha csatlakozva van a hálózathoz, egyébként False értéket.

scan(**kwargs: Any) List[Tuple]

Megkeresi az elérhető hálózati szolgáltatásokat/kapcsolatokat. A felfedezett szolgáltatások paramétereit tartalmazó tuple-ök listáját adja vissza. A különböző hálózati közegekhez eltérő, előre definiált/ajánlott tuple-formátumok tartoznak, többek között:

  • WiFi: (ssid, bssid, channel, RSSI, security, hidden). További mezők is lehetnek, az adott eszközre jellemzően.

A függvény további kulcsszavas argumentumokat is elfogadhat a keresési eredmények szűréséhez (pl. egy adott szolgáltatás keresése, egy adott csatornán, egy adott halmaz szolgáltatásai stb.), valamint a keresés időtartamának és más paramétereknek a befolyásolásához. Ahol lehetséges, a paraméternevek egyezzenek a connect() függvényben szereplőkkel.

status(param: str | None = None) Any

Lekérdezi az interfész dinamikus állapotinformációit. Argumentum nélkül meghívva a visszatérési érték a hálózati kapcsolat állapotát írja le. Egyébként a param egy sztring legyen, amely megnevezi a lekérendő állapotparamétert.

A visszatérési típusok és értékek a hálózati közegtől/technológiától függenek. Néhány támogatott paraméter a következő lehet:

  • WiFi STA: használja az 'rssi' értéket az AP jelének RSSI-jének lekéréséhez

  • WiFi AP: használja a 'stations' értéket az AP-hoz csatlakozott összes STA listájának lekéréséhez. A lista (MAC, RSSI) formájú tuple-öket tartalmaz.

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

Lekérdezi vagy beállítja az interfész-specifikus IP-konfigurációs interfész paramétereket. A támogatott paraméterek a következők (egy adott paraméter elérhetősége a porttól és az adott hálózati interfésztől függ):

  • dhcp4 (True/False) IPv4-cím, átjáró és dns szerver megszerzése DHCP-n keresztül. Ez a metódus nem blokkol és nem vár a cím megszerzésére. Annak ellenőrzéséhez, hogy megszerzésre került-e cím, használja a csak olvasható has_dhcp4 tulajdonságot.

  • gw4 Lekérdezi/beállítja az IPv4 alapértelmezett átjárót.

  • dhcp6 (True/False) DNS szerver megszerzése állapot nélküli DHCPv6-on keresztül. Az IP-címek DHCPv6-on keresztüli megszerzése jelenleg nincs megvalósítva.

  • autoconf6 (True/False) állapot nélküli IPv6-cím megszerzése a router hirdetésekben megosztott hálózati előtag alapján. Annak ellenőrzéséhez, hogy megszerzésre került-e állapot nélküli cím, használja a csak olvasható has_autoconf6 tulajdonságot.

  • addr4 (pl. 192.168.0.4/24) lekéri az aktuális IPv4-címet és hálózati maszkot (ip, subnet)-tuple-ként, függetlenül attól, hogyan szerezték meg ezt a címet. Ezzel a metódussal statikus IPv4-cím is beállítható, akár (ip, subnet)-tuple-ként, akár CIDR-jelölésben.

  • addr6 (pl. fe80::1234:5678) lekéri az aktuális IPv6-címek listáját (ip, state, preferred_lifetime, valid_lifetime)-tuple-ként. Ez magában foglalja a link-local, slaac és statikus címeket. A preferred_lifetime és a valid_lifetime az egyes IPv6-címek fennmaradó érvényes és preferált élettartamát jelöli, másodpercben. A state a cím aktuális állapotát jelzi:

    • 0x08 - 0x0f jelzi, hogy a cím feltételes, és számolja az elküldött próbák számát.

    • 0x10 A cím elavult (de még érvényes)

    • 0x30 A cím preferált (és érvényes)

    • 0x40 A cím duplikált, és nem használható.

    Ezzel a metódussal statikus IPv6-cím is beállítható, ha ezt a paramétert a címre állítja, például fe80::1234:5678.

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

Megjegyzés

Ez a függvény elavult, helyette használja az ipconfig() függvényt.

Lekérdezi/beállítja az IP-szintű hálózati interfész paramétereket: IP-cím, alhálózati maszk, átjáró és DNS szerver. Argumentum nélkül meghívva ez a metódus egy 4 elemű tuple-t ad vissza a fenti információkkal. A fenti értékek beállításához adjon át egy 4 elemű tuple-t a szükséges információkkal. Például:

nic.ifconfig(('192.168.0.4', '255.255.255.0', '192.168.0.1', '8.8.8.8'))
config(param: str) Any
config(**kwargs: Any) None

Lekérdezi vagy beállítja az általános hálózati interfész paramétereket. Ezek a metódusok lehetővé teszik a szabványos IP-konfiguráción (amelyet az ipconfig() kezel) túlmutató további paraméterekkel való munkát. Ezek hálózat-specifikus és hardver-specifikus paramétereket foglalnak magukban. Paraméterek beállításához a kulcsszavas argumentum szintaxist kell használni, és egyszerre több paraméter is beállítható. Lekérdezéshez a paraméternevet sztringként kell idézőjelek közé tenni, és egyszerre csak egy paraméter kérdezhető le:

# Set WiFi access point name (formally known as SSID) and WiFi channel
ap.config(ssid='My AP', channel=11)
# Query params one by one
print(ap.config('ssid'))
print(ap.config('channel'))

Konkrét hálózati osztály implementációk

A következő konkrét osztályok valósítják meg az AbstractNIC interfészt, és lehetővé teszik a különféle hálózati interfészek vezérlését.

Hálózati függvények

A következők a network modulban elérhető függvények.

network.country(code: str | None = None) str | None

Lekérdezi vagy beállítja a rádiós megfelelőséghez használandó kétbetűs ISO 3166-1 Alpha-2 országkódot.

Ha a code paraméter meg van adva, az ország erre az értékre lesz beállítva. Ha a függvényt paraméterek nélkül hívják meg, az aktuális országot adja vissza.

Az alapértelmezett "XX" kód a „világszintű” régiót jelöli.

network.hostname(name: str | None = None) str | None

Lekérdezi vagy beállítja a hosztnevet, amely ezt az eszközt azonosítja a hálózaton. Ezt az összes interfész használni fogja.

Ezt a hosztnevet a következőkre használja:
  • A DHCP szervernek való elküldés a kliens kérésében. (DHCP használata esetén)

  • Sugárzás mDNS-en keresztül. (Ha engedélyezve van)

Ha a name paraméter meg van adva, a hosztnév erre az értékre lesz beállítva. Ha a függvényt paraméterek nélkül hívják meg, az aktuális hosztnevet adja vissza.

A hosztnév változása jellemzően csak a csatlakozás során kerül alkalmazásra. DHCP esetén ez azért van, mert a hosztnév a DHCP kliens kérésének része, és az mDNS implementációja a legtöbb portban csak egyszer, a csatlakozás során inicializálja a hosztnevet. Ezért a hosztnevet a hálózati interfészek aktiválása/csatlakoztatása előtt kell beállítania.

A hosztnév hossza 32 karakterre van korlátozva. A MicroPython portok memóriaokokból választhatnak alacsonyabb korlátot is. Ha a megadott név nem fér el, ValueError kivétel keletkezik.

Az alapértelmezett hosztnév jellemzően a kártya neve.

network.ipconfig(param: str) Any
network.ipconfig(**kwargs: Any) None

Lekérdezi vagy beállítja a globális IP-konfigurációs paramétereket. A támogatott paraméterek a következők (egy adott paraméter elérhetősége a porttól és az adott hálózati interfésztől függ):

  • dns Lekérdezi/beállítja a DNS szervert. Ez a metódus mind IPv4, mind IPv6 címeket támogat.

  • prefer (4/6) Megadja, hogy melyik címtípust adja vissza, ha egy tartománynévhez A és AAAA rekord is tartozik. Vegye figyelembe, hogy ez nem törli a helyi DNS gyorsítótárat, így a korábban megszerzett címek esetleg nem változnak.