network --- konfigurasi jaringan

Modul ini menyediakan driver jaringan dan konfigurasi routing. Untuk menggunakan modul ini, varian/build MicroPython dengan kemampuan jaringan harus diinstal. Driver jaringan untuk hardware tertentu tersedia dalam modul ini dan digunakan untuk mengonfigurasi antarmuka jaringan hardware. Layanan jaringan yang disediakan oleh antarmuka yang dikonfigurasi kemudian tersedia untuk digunakan melalui modul socket.

Contoh:

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

Ganti WLAN dengan WINC (perisai WiFi lama) atau LAN (Ethernet bawaan) sesuai kebutuhan kamera. Pola tingkat tinggi dari construct -> activate -> connect -> use sockets sama di ketiga kasus.

Antarmuka adapter jaringan umum

Bagian ini menjelaskan kelas dasar abstrak (yang tersirat) untuk semua kelas antarmuka jaringan yang diimplementasikan oleh port MicroPython untuk hardware yang berbeda. Ini berarti bahwa MicroPython sebenarnya tidak menyediakan kelas AbstractNIC, tetapi setiap kelas NIC yang sebenarnya, seperti yang dijelaskan di bagian berikut, mengimplementasikan metode seperti yang dijelaskan di sini.

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

Buat instance objek antarmuka jaringan. Parameter bergantung pada antarmuka jaringan. Jika ada lebih dari satu antarmuka dengan jenis yang sama, parameter pertama harus berupa id.

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

Aktifkan atau nonaktifkan antarmuka jaringan.

Tanpa argumen, kembalikan status saat ini -- True saat antarmuka aktif, False jika tidak.

Berikan True untuk mengaktifkan antarmuka: nyalakan / reset kontroler jaringan yang mendasarinya, muat firmware jika berlaku, dan jalankan tumpukan IP pada antarmuka ini. Panggilan selanjutnya yang berbicara ke jaringan (connect(), scan(), ipconfig(), ...) mengharuskan antarmuka aktif.

Berikan False untuk menonaktifkan antarmuka: hentikan tumpukan IP dan lepaskan sumber daya driver. Pada antarmuka nirkabel ini juga memutus asosiasi dari jaringan yang sedang bergabung.

Perilaku memanggil metode lain pada antarmuka yang tidak aktif tidak terdefinisi.

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

Hubungkan antarmuka ke jaringan. Metode ini opsional, dan hanya tersedia untuk antarmuka yang tidak "selalu terhubung". Jika tidak ada parameter yang diberikan, sambungkan ke layanan default (atau satu-satunya). Jika satu parameter diberikan, itu adalah pengidentifikasi utama layanan yang akan disambungkan. Parameter ini dapat disertai dengan kunci (kata sandi) yang diperlukan untuk mengakses layanan tersebut. Mungkin ada parameter hanya-kata-kunci tambahan, tergantung pada jenis media jaringan dan/atau perangkat tertentu. Parameter dapat digunakan untuk: a) menentukan jenis pengidentifikasi layanan alternatif; b) menyediakan parameter koneksi tambahan. Untuk berbagai jenis medium, ada kumpulan parameter yang berbeda yang telah ditentukan/disarankan, di antaranya:

  • WiFi: kata kunci bssid untuk menyambungkan ke BSSID tertentu (alamat MAC)

disconnect() None

Putuskan dari jaringan.

isconnected() bool

Mengembalikan True jika terhubung ke jaringan, jika tidak mengembalikan False.

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

Pindai layanan/koneksi jaringan yang tersedia. Mengembalikan daftar tuple dengan parameter layanan yang ditemukan. Untuk berbagai media jaringan, ada format tuple yang telah ditentukan/disarankan yang berbeda, di antaranya:

  • WiFi: (ssid, bssid, channel, RSSI, security, hidden). Mungkin ada lebih banyak bidang, spesifik untuk perangkat tertentu.

Fungsi ini dapat menerima argumen kata kunci tambahan untuk memfilter hasil pemindaian (misalnya pindai layanan tertentu, pada saluran tertentu, untuk layanan dari kumpulan tertentu, dll.), dan untuk mempengaruhi durasi pemindaian dan parameter lainnya. Jika memungkinkan, nama parameter harus cocok dengan yang ada di connect().

status(param: str | None = None) Any

Kueri informasi status dinamis antarmuka. Ketika dipanggil tanpa argumen, nilai yang dikembalikan menggambarkan status tautan jaringan. Jika tidak, param harus berupa string yang menamai parameter status tertentu yang akan diambil.

Jenis dan nilai yang dikembalikan bergantung pada medium/teknologi jaringan. Beberapa parameter yang mungkin didukung adalah:

  • WiFi STA: gunakan 'rssi' untuk mengambil RSSI sinyal AP

  • WiFi AP: gunakan 'stations' untuk mengambil daftar semua STA yang terhubung ke AP. Daftar berisi tuple dalam bentuk (MAC, RSSI).

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

Dapatkan atau tetapkan parameter konfigurasi IP antarmuka. Parameter yang didukung adalah sebagai berikut (ketersediaan parameter tertentu bergantung pada port dan antarmuka jaringan tertentu):

  • dhcp4 (True/False) mendapatkan alamat IPv4, gateway, dan server DNS melalui DHCP. Metode ini tidak memblokir dan menunggu alamat diperoleh. Untuk memeriksa apakah alamat telah diperoleh, gunakan properti hanya-baca has_dhcp4.

  • gw4 Dapatkan/tetapkan gateway default IPv4.

  • dhcp6 (True/False) mendapatkan server DNS melalui DHCPv6 stateless. Mendapatkan Alamat IP melalui DHCPv6 saat ini belum diimplementasikan.

  • autoconf6 (True/False) mendapatkan alamat IPv6 stateless melalui awalan jaringan yang dibagikan dalam pengumuman router. Untuk memeriksa apakah alamat stateless telah diperoleh, gunakan properti hanya-baca has_autoconf6.

  • addr4 (misalnya 192.168.0.4/24) mendapatkan alamat IPv4 dan masker jaringan saat ini sebagai tuple (ip, subnet), terlepas dari bagaimana alamat ini diperoleh. Metode ini dapat digunakan untuk menetapkan alamat IPv4 statis baik sebagai tuple (ip, subnet) atau dalam notasi CIDR.

  • addr6 (misalnya fe80::1234:5678) mendapatkan daftar alamat IPv6 saat ini sebagai tuple (ip, state, preferred_lifetime, valid_lifetime). Ini mencakup alamat link-local, slaac, dan statis. preferred_lifetime dan valid_lifetime mewakili sisa masa berlaku dan masa berlaku yang diinginkan dari setiap alamat IPv6, dalam detik. state menunjukkan status alamat saat ini:

    • 0x08 - 0x0f menunjukkan alamat bersifat tentative, menghitung jumlah probe yang dikirim.

    • 0x10 Alamat sudah tidak digunakan (tetapi masih valid)

    • 0x30 Alamat diutamakan (dan valid)

    • 0x40 Alamat diduplikasi dan tidak dapat digunakan.

    Metode ini dapat digunakan untuk menetapkan alamat IPv6 statis, dengan menetapkan parameter ini ke alamat, seperti fe80::1234:5678.

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

Catatan

Fungsi ini sudah tidak dianjurkan, gunakan ipconfig() sebagai gantinya.

Dapatkan/tetapkan parameter antarmuka jaringan tingkat IP: alamat IP, subnet mask, gateway, dan server DNS. Ketika dipanggil tanpa argumen, metode ini mengembalikan 4-tuple dengan informasi di atas. Untuk menetapkan nilai di atas, berikan 4-tuple dengan informasi yang diperlukan. Contoh:

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

Dapatkan atau tetapkan parameter antarmuka jaringan umum. Metode ini memungkinkan untuk bekerja dengan parameter tambahan di luar konfigurasi IP standar (seperti yang ditangani oleh ipconfig()). Ini mencakup parameter spesifik jaringan dan spesifik hardware. Untuk menetapkan parameter, sintaks argumen kata kunci harus digunakan, dan beberapa parameter dapat ditetapkan sekaligus. Untuk kueri, nama parameter harus dikutip sebagai string, dan hanya satu parameter yang dapat dikueri sekaligus:

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

Implementasi kelas jaringan tertentu

Kelas konkret berikut mengimplementasikan antarmuka AbstractNIC dan menyediakan cara untuk mengendalikan antarmuka jaringan dari berbagai jenis.

Fungsi jaringan

Berikut ini adalah fungsi yang tersedia dalam modul network.

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

Dapatkan atau tetapkan kode negara ISO 3166-1 Alpha-2 dua huruf yang akan digunakan untuk kepatuhan radio.

Jika parameter code disediakan, negara akan ditetapkan ke nilai ini. Jika fungsi dipanggil tanpa parameter, fungsi mengembalikan negara saat ini.

Kode default "XX" mewakili wilayah "worldwide".

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

Dapatkan atau tetapkan nama host yang akan mengidentifikasi perangkat ini di jaringan. Akan digunakan oleh semua antarmuka.

Nama host ini digunakan untuk:
  • Mengirim ke server DHCP dalam permintaan klien. (Jika menggunakan DHCP)

  • Menyiarkan melalui mDNS. (Jika diaktifkan)

Jika parameter name disediakan, nama host akan ditetapkan ke nilai ini. Jika fungsi dipanggil tanpa parameter, fungsi mengembalikan nama host saat ini.

Perubahan nama host biasanya hanya diterapkan selama koneksi. Untuk DHCP ini karena nama host adalah bagian dari permintaan klien DHCP, dan implementasi mDNS di sebagian besar port hanya menginisialisasi nama host sekali selama koneksi. Untuk alasan ini, Anda harus menetapkan nama host sebelum mengaktifkan/menyambungkan antarmuka jaringan Anda.

Panjang nama host dibatasi hingga 32 karakter. Port MicroPython dapat memilih untuk menetapkan batas yang lebih rendah karena alasan memori. Jika nama yang diberikan tidak muat, sebuah ValueError akan dimunculkan.

Nama host default biasanya adalah nama board.

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

Dapatkan atau tetapkan parameter konfigurasi IP global. Parameter yang didukung adalah sebagai berikut (ketersediaan parameter tertentu bergantung pada port dan antarmuka jaringan tertentu):

  • dns Dapatkan/tetapkan server DNS. Metode ini dapat mendukung alamat IPv4 dan IPv6.

  • prefer (4/6) Tentukan jenis alamat mana yang akan dikembalikan, jika nama domain memiliki rekaman A dan AAAA. Perhatikan, bahwa ini tidak menghapus cache DNS lokal, sehingga alamat yang telah diperoleh sebelumnya mungkin tidak berubah.