network — configurarea rețelei

Acest modul furnizează drivere de rețea și configurarea rutării. Pentru a folosi acest modul, trebuie instalată o variantă/un build de MicroPython cu capabilități de rețea. Driverele de rețea pentru hardware specific sunt disponibile în acest modul și sunt folosite pentru a configura interfața (interfețele) de rețea hardware. Serviciile de rețea furnizate de interfețele configurate sunt apoi disponibile pentru utilizare prin modulul socket.

De exemplu:

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

Înlocuiți WLAN cu WINC (shield WiFi mai vechi) sau LAN (Ethernet integrat), după cum este potrivit pentru cameră. Tiparul de nivel înalt construire -> activare -> conectare -> utilizare socket-uri este același în toate cele trei cazuri.

Interfața comună a adaptorului de rețea

Această secțiune descrie o clasă de bază abstractă (implicită) pentru toate clasele de interfață de rețea implementate de porturile MicroPython pentru hardware diferit. Aceasta înseamnă că MicroPython nu furnizează efectiv clasa AbstractNIC, dar orice clasă NIC reală, așa cum este descrisă în secțiunile următoare, implementează metodele descrise aici.

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

Instanțiază un obiect de interfață de rețea. Parametrii depind de interfața de rețea. Dacă există mai multe interfețe de același tip, primul parametru ar trebui să fie id.

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

Pornește sau oprește interfața de rețea.

Fără argument, returnează starea curentă – True cât timp interfața este activă, False în caz contrar.

Treceți True pentru a activa interfața: alimentează / resetează controlerul de rețea subiacent, încarcă firmware-ul acolo unde este cazul și pornește stiva IP pe această interfață. Apelurile ulterioare care comunică cu rețeaua (connect(), scan(), ipconfig(), …) necesită ca interfața să fie activă.

Treceți False pentru a dezactiva interfața: dezasamblează stiva IP și eliberează resursele driverului. Pe interfețele wireless, aceasta se și deasociază de la orice rețea la care este conectată în prezent.

Comportamentul apelării altor metode pe o interfață inactivă este nedefinit.

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

Conectează interfața la o rețea. Această metodă este opțională și disponibilă doar pentru interfețele care nu sunt „întotdeauna conectate”. Dacă nu se dau parametri, se conectează la serviciul implicit (sau singurul). Dacă se dă un singur parametru, acesta este identificatorul principal al unui serviciu la care să se conecteze. El poate fi însoțit de o cheie (parolă) necesară pentru a accesa serviciul respectiv. Pot exista alți parametri arbitrari, doar cu nume, în funcție de tipul de mediu de rețea și/sau de dispozitivul particular. Parametrii pot fi folosiți pentru: a) a specifica tipuri alternative de identificatori de serviciu; b) a furniza parametri suplimentari de conexiune. Pentru diverse tipuri de mediu există seturi diferite de parametri predefiniți/recomandați, printre care:

  • WiFi: argumentul cu nume bssid pentru a vă conecta la un BSSID specific (adresă MAC)

disconnect() None

Se deconectează de la rețea.

isconnected() bool

Returnează True dacă este conectat la rețea, altfel returnează False.

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

Scanează după serviciile/conexiunile de rețea disponibile. Returnează o listă de tupluri cu parametrii serviciilor descoperite. Pentru diverse medii de rețea există variante diferite de formate de tupluri predefinite/recomandate, printre care:

  • WiFi: (ssid, bssid, channel, RSSI, security, hidden). Pot exista alte câmpuri, specifice unui dispozitiv particular.

Funcția poate accepta argumente cu nume suplimentare pentru a filtra rezultatele scanării (de exemplu, scanare după un anumit serviciu, pe un anumit canal, după servicii dintr-un anumit set etc.) și pentru a afecta durata scanării și alți parametri. Acolo unde este posibil, numele parametrilor ar trebui să corespundă cu cele din connect().

status(param: str | None = None) Any

Interoghează informațiile dinamice de stare ale interfeței. Când este apelată fără argument, valoarea returnată descrie starea legăturii de rețea. În caz contrar, param ar trebui să fie un string care denumește parametrul de stare particular de obținut.

Tipurile și valorile returnate depind de mediul/tehnologia de rețea. Unii dintre parametrii care pot fi suportați sunt:

  • WiFi STA: folosiți 'rssi' pentru a obține RSSI-ul semnalului AP-ului

  • WiFi AP: folosiți 'stations' pentru a obține o listă cu toate STA-urile conectate la AP. Lista conține tupluri de forma (MAC, RSSI).

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

Obține sau setează parametrii de configurare IP specifici interfeței. Parametrii suportați sunt următorii (disponibilitatea unui parametru particular depinde de port și de interfața de rețea specifică):

  • dhcp4 (True/False) obține o adresă IPv4, un gateway și un server DNS prin DHCP. Această metodă nu se blochează și nu așteaptă să fie obținută o adresă. Pentru a verifica dacă a fost obținută o adresă, folosiți proprietatea de doar citire has_dhcp4.

  • gw4 Obține/setează gateway-ul implicit IPv4.

  • dhcp6 (True/False) obține un server DNS prin DHCPv6 fără stare. Obținerea adreselor IP prin DHCPv6 nu este implementată în prezent.

  • autoconf6 (True/False) obține o adresă IPv6 fără stare prin prefixul de rețea partajat în anunțurile routerului. Pentru a verifica dacă a fost obținută o adresă fără stare, folosiți proprietatea de doar citire has_autoconf6.

  • addr4 (de exemplu 192.168.0.4/24) obține adresa IPv4 curentă și masca de rețea ca tuplu (ip, subnet), indiferent de modul în care a fost obținută această adresă. Această metodă poate fi folosită pentru a seta o adresă IPv4 statică fie ca tuplu (ip, subnet), fie în notație CIDR.

  • addr6 (de exemplu fe80::1234:5678) obține o listă cu adresele IPv6 curente ca tuplu (ip, state, preferred_lifetime, valid_lifetime). Aceasta include adresele link-local, slaac și statice. preferred_lifetime și valid_lifetime reprezintă durata de viață rămasă validă și preferată a fiecărei adrese IPv6, în secunde. state indică starea curentă a adresei:

    • 0x08 - 0x0f indică faptul că adresa este provizorie, numărând numărul de sondări trimise.

    • 0x10 Adresa este învechită (dar încă validă)

    • 0x30 Adresa este preferată (și validă)

    • 0x40 Adresa este duplicată și nu poate fi folosită.

    Această metodă poate fi folosită pentru a seta o adresă IPv6 statică, prin setarea acestui parametru la adresă, precum fe80::1234:5678.

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

Notă

Această funcție este învechită, folosiți în schimb ipconfig().

Obține/setează parametrii interfeței de rețea la nivel IP: adresa IP, masca de subrețea, gateway-ul și serverul DNS. Când este apelată fără argumente, această metodă returnează un tuplu cu 4 elemente cu informațiile de mai sus. Pentru a seta valorile de mai sus, treceți un tuplu cu 4 elemente cu informațiile necesare. De exemplu:

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

Obține sau setează parametrii generali ai interfeței de rețea. Aceste metode permit lucrul cu parametri suplimentari dincolo de configurarea IP standard (gestionată de ipconfig()). Aceștia includ parametri specifici rețelei și specifici hardware-ului. Pentru setarea parametrilor, ar trebui folosită sintaxa cu argumente cu nume, iar mai mulți parametri pot fi setați deodată. Pentru interogare, un nume de parametru ar trebui scris între ghilimele ca string, iar un singur parametru poate fi interogat la un moment dat:

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

Implementări specifice ale claselor de rețea

Următoarele clase concrete implementează interfața AbstractNIC și oferă o modalitate de a controla interfețele de rețea de diverse tipuri.

Funcții de rețea

Următoarele sunt funcțiile disponibile în modulul network.

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

Obține sau setează codul de țară din două litere ISO 3166-1 Alpha-2 care va fi folosit pentru conformitatea radio.

Dacă parametrul code este furnizat, țara va fi setată la această valoare. Dacă funcția este apelată fără parametri, returnează țara curentă.

Codul implicit "XX" reprezintă regiunea „mondială”.

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

Obține sau setează numele de gazdă care va identifica acest dispozitiv în rețea. El va fi folosit de toate interfețele.

Acest nume de gazdă este folosit pentru:
  • Trimiterea către serverul DHCP în cererea clientului. (Dacă se folosește DHCP)

  • Difuzarea prin mDNS. (Dacă este activată)

Dacă parametrul name este furnizat, numele de gazdă va fi setat la această valoare. Dacă funcția este apelată fără parametri, returnează numele de gazdă curent.

O modificare a numelui de gazdă este de obicei aplicată doar în timpul conexiunii. Pentru DHCP, acest lucru se întâmplă deoarece numele de gazdă face parte din cererea clientului DHCP, iar implementarea mDNS în majoritatea porturilor inițializează numele de gazdă o singură dată în timpul conexiunii. Din acest motiv, trebuie să setați numele de gazdă înainte de a activa/conecta interfețele de rețea.

Lungimea numelui de gazdă este limitată la 32 de caractere. Porturile MicroPython pot alege să stabilească o limită mai mică din motive de memorie. Dacă numele dat nu se încadrează, se ridică o eroare ValueError.

Numele de gazdă implicit este de obicei numele plăcii.

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

Obține sau setează parametrii globali de configurare IP. Parametrii suportați sunt următorii (disponibilitatea unui parametru particular depinde de port și de interfața de rețea specifică):

  • dns Obține/setează serverul DNS. Această metodă poate suporta atât adrese IPv4, cât și IPv6.

  • prefer (4/6) Specifică ce tip de adresă să se returneze, dacă un nume de domeniu are atât înregistrări A, cât și AAAA. Rețineți că acest lucru nu golește memoria cache DNS locală, astfel încât orice adrese obținute anterior s-ar putea să nu se schimbe.