network — konfiguracja sieci¶
Ten moduł udostępnia sterowniki sieciowe i konfigurację routingu. Aby z niego korzystać, musi być zainstalowany wariant/kompilacja MicroPython z funkcjami sieciowymi. W module tym dostępne są sterowniki sieciowe dla konkretnego sprzętu, które służą do konfiguracji sprzętowych interfejsów sieciowych. Usługi sieciowe udostępniane przez skonfigurowane interfejsy są następnie dostępne do użytku za pośrednictwem modułu socket.
Na przykład:
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()
Zastąp WLAN przez WINC (starsza nakładka WiFi) lub LAN (wbudowany Ethernet), zależnie od kamery. Ogólny schemat: utworzenie -> aktywacja -> połączenie -> użycie gniazd jest taki sam we wszystkich trzech przypadkach.
Wspólny interfejs adaptera sieciowego¶
Ta sekcja opisuje (domniemaną) abstrakcyjną klasę bazową dla wszystkich klas interfejsów sieciowych implementowanych przez porty MicroPython dla różnego sprzętu. Oznacza to, że MicroPython w rzeczywistości nie udostępnia klasy AbstractNIC, lecz każda rzeczywista klasa NIC, opisana w kolejnych sekcjach, implementuje metody opisane tutaj.
- class network.AbstractNIC(id: int | None = None, *args: Any, **kwargs: Any) None¶
Tworzy obiekt interfejsu sieciowego. Parametry zależą od interfejsu sieciowego. Jeśli istnieje więcej niż jeden interfejs tego samego typu, pierwszym parametrem powinno być
id.- active(is_active: bool | None = None, /) bool¶
Włącza lub wyłącza interfejs sieciowy.
Bez argumentu zwraca bieżący stan –
True, gdy interfejs jest aktywny,Falsew przeciwnym razie.Przekaż
True, aby aktywować interfejs: włączyć zasilanie / zresetować bazowy kontroler sieciowy, załadować oprogramowanie układowe tam, gdzie ma to zastosowanie, oraz uruchomić stos IP na tym interfejsie. Kolejne wywołania komunikujące się z siecią (connect(),scan(),ipconfig(), …) wymagają, aby interfejs był aktywny.Przekaż
False, aby dezaktywować interfejs: wyłączyć stos IP i zwolnić zasoby sterownika. Na interfejsach bezprzewodowych powoduje to także odłączenie od każdej aktualnie połączonej sieci.Zachowanie przy wywoływaniu innych metod na nieaktywnym interfejsie jest niezdefiniowane.
- connect(service_id: str | None = None, key: str | None = None, *, bssid: bytes | None = None, **kwargs: Any) None¶
Łączy interfejs z siecią. Ta metoda jest opcjonalna i dostępna tylko dla interfejsów, które nie są „zawsze połączone”. Jeśli nie podano parametrów, łączy się z domyślną (lub jedyną) usługą. Jeśli podano pojedynczy parametr, jest to główny identyfikator usługi, z którą należy się połączyć. Może mu towarzyszyć klucz (hasło) wymagany do uzyskania dostępu do tej usługi. Mogą występować kolejne dowolne parametry przekazywane wyłącznie jako słowa kluczowe, w zależności od typu medium sieciowego i/lub konkretnego urządzenia. Parametry mogą służyć do: a) określenia alternatywnych typów identyfikatorów usług; b) podania dodatkowych parametrów połączenia. Dla różnych typów medium istnieją różne zestawy predefiniowanych/zalecanych parametrów, między innymi:
WiFi: słowo kluczowe bssid, aby połączyć się z konkretnym BSSID (adresem MAC)
- isconnected() bool¶
Zwraca
True, jeśli istnieje połączenie z siecią, w przeciwnym razie zwracaFalse.
- scan(**kwargs: Any) List[Tuple]¶
Skanuje dostępne usługi/połączenia sieciowe. Zwraca listę krotek z wykrytymi parametrami usług. Dla różnych mediów sieciowych istnieją różne warianty predefiniowanych/zalecanych formatów krotek, między innymi:
WiFi: (ssid, bssid, channel, RSSI, security, hidden). Mogą występować dodatkowe pola, specyficzne dla konkretnego urządzenia.
Funkcja może przyjmować dodatkowe argumenty słów kluczowych w celu filtrowania wyników skanowania (np. skanowanie konkretnej usługi, na konkretnym kanale, dla usług z konkretnego zestawu itp.) oraz w celu wpływania na czas trwania skanowania i inne parametry. Tam, gdzie to możliwe, nazwy parametrów powinny odpowiadać tym w connect().
- status(param: str | None = None) Any¶
Sprawdza dynamiczne informacje o stanie interfejsu. Wywołana bez argumentu zwraca wartość opisującą stan łącza sieciowego. W przeciwnym razie param powinien być ciągiem znaków nazywającym konkretny parametr stanu do pobrania.
Typy i wartości zwracane zależą od medium/technologii sieciowej. Niektóre z parametrów, które mogą być obsługiwane, to:
WiFi STA: użyj
'rssi', aby pobrać RSSI sygnału APWiFi AP: użyj
'stations', aby pobrać listę wszystkich stacji STA połączonych z AP. Lista zawiera krotki w postaci (MAC, RSSI).
- ipconfig(param: str) Any¶
- ipconfig(**kwargs: Any) None
Pobiera lub ustawia parametry konfiguracji IP specyficzne dla interfejsu. Obsługiwane są następujące parametry (dostępność konkretnego parametru zależy od portu i konkretnego interfejsu sieciowego):
dhcp4(True/False) uzyskuje adres IPv4, bramę i serwer dns za pośrednictwem DHCP. Ta metoda nie blokuje i nie czeka na uzyskanie adresu. Aby sprawdzić, czy adres został uzyskany, użyj właściwości tylko do odczytuhas_dhcp4.gw4Pobiera/ustawia domyślną bramę IPv4.dhcp6(True/False) uzyskuje serwer DNS za pośrednictwem bezstanowego DHCPv6. Uzyskiwanie adresów IP za pośrednictwem DHCPv6 nie jest obecnie zaimplementowane.autoconf6(True/False) uzyskuje bezstanowy adres IPv6 za pośrednictwem prefiksu sieci udostępnianego w komunikatach rozgłoszeniowych routera. Aby sprawdzić, czy uzyskano adres bezstanowy, użyj właściwości tylko do odczytuhas_autoconf6.addr4(np.192.168.0.4/24) uzyskuje bieżący adres IPv4 i maskę sieci jako krotkę(ip, subnet), niezależnie od tego, w jaki sposób uzyskano ten adres. Tej metody można użyć do ustawienia statycznego adresu IPv4 jako krotki(ip, subnet)albo w notacji CIDR.addr6(np.fe80::1234:5678) uzyskuje listę bieżących adresów IPv6 jako krotki(ip, state, preferred_lifetime, valid_lifetime). Obejmuje to adresy link-local, slaac i statyczne.preferred_lifetimeivalid_lifetimereprezentują pozostały ważny i preferowany czas życia każdego adresu IPv6, w sekundach.statewskazuje bieżący stan adresu:0x08-0x0fwskazuje, że adres jest wstępny, zliczając liczbę wysłanych sond.0x10Adres jest przestarzały (ale wciąż ważny)0x30Adres jest preferowany (i ważny)0x40Adres jest zduplikowany i nie może być używany.
Tej metody można użyć do ustawienia statycznego adresu IPv6 poprzez ustawienie tego parametru na adres, na przykład
fe80::1234:5678.
- ifconfig(config: Tuple[str, str, str, str] | None = None) Tuple[str, str, str, str] | None¶
Informacja
Ta funkcja jest przestarzała, zamiast niej użyj
ipconfig().Pobiera/ustawia parametry interfejsu sieciowego na poziomie IP: adres IP, maskę podsieci, bramę i serwer DNS. Wywołana bez argumentów zwraca 4-elementową krotkę z powyższymi informacjami. Aby ustawić powyższe wartości, przekaż 4-elementową krotkę z wymaganymi informacjami. Na przykład:
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
Pobiera lub ustawia ogólne parametry interfejsu sieciowego. Metody te pozwalają pracować z dodatkowymi parametrami wykraczającymi poza standardową konfigurację IP (którą zajmuje się
ipconfig()). Obejmują one parametry specyficzne dla sieci i sprzętu. Do ustawiania parametrów należy używać składni argumentów słów kluczowych, przy czym można ustawić wiele parametrów naraz. Do zapytań nazwę parametru należy podać jako ciąg znaków w cudzysłowie, a jednorazowo można odpytać tylko jeden parametr:# 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'))
Implementacje konkretnych klas sieciowych¶
Następujące konkretne klasy implementują interfejs AbstractNIC i zapewniają sposób sterowania różnego rodzaju interfejsami sieciowymi.
Funkcje sieciowe¶
Poniżej znajdują się funkcje dostępne w module network.
- network.country(code: str | None = None) str | None¶
Pobiera lub ustawia dwuliterowy kod kraju ISO 3166-1 Alpha-2 używany do zgodności radiowej.
Jeśli podano parametr code, kraj zostanie ustawiony na tę wartość. Jeśli funkcja jest wywoływana bez parametrów, zwraca bieżący kraj.
Domyślny kod
"XX"reprezentuje region „ogólnoświatowy”.
- network.hostname(name: str | None = None) str | None¶
Pobiera lub ustawia nazwę hosta, która będzie identyfikować to urządzenie w sieci. Będzie używana przez wszystkie interfejsy.
- Ta nazwa hosta jest używana do:
Wysyłania do serwera DHCP w żądaniu klienta. (Jeśli używany jest DHCP)
Rozgłaszania za pośrednictwem mDNS. (Jeśli włączone)
Jeśli podano parametr name, nazwa hosta zostanie ustawiona na tę wartość. Jeśli funkcja jest wywoływana bez parametrów, zwraca bieżącą nazwę hosta.
Zmiana nazwy hosta jest zazwyczaj stosowana dopiero podczas połączenia. W przypadku DHCP wynika to z tego, że nazwa hosta jest częścią żądania klienta DHCP, a implementacja mDNS w większości portów inicjalizuje nazwę hosta tylko raz, podczas połączenia. Z tego powodu nazwę hosta należy ustawić przed aktywacją/połączeniem interfejsów sieciowych.
Długość nazwy hosta jest ograniczona do 32 znaków. Porty MicroPython mogą ustawić niższy limit ze względów pamięciowych. Jeśli podana nazwa się nie zmieści, zgłaszany jest błąd
ValueError.Domyślną nazwą hosta jest zazwyczaj nazwa płytki.
- network.ipconfig(param: str) Any¶
- network.ipconfig(**kwargs: Any) None
Pobiera lub ustawia globalne parametry konfiguracji IP. Obsługiwane są następujące parametry (dostępność konkretnego parametru zależy od portu i konkretnego interfejsu sieciowego):
dnsPobiera/ustawia serwer DNS. Ta metoda może obsługiwać zarówno adresy IPv4, jak i IPv6.prefer(4/6) Określa, który typ adresu zwrócić, jeśli nazwa domeny ma zarówno rekordy A, jak i AAAA. Należy pamiętać, że nie czyści to lokalnej pamięci podręcznej DNS, więc wcześniej uzyskane adresy mogą się nie zmienić.