kelas WLAN -- mengendalikan antarmuka WiFi bawaan

Kelas WLAN mengendalikan radio WiFi yang terpasang di OpenMV Cam modern. Kelas yang sama membungkus dua driver yang berbeda tergantung pada MCU WiFi board:

  • CYW43 (modul WiFi Infineon CYW43xxx Murata). Digunakan oleh OpenMV Cam N6, OpenMV Cam RT1062, Arduino Portenta H7, Arduino Nicla Vision, dan Arduino Giga R1 WiFi.

  • NINA W10 (u-blox NINA-W10 / ESP32-WROOM). Digunakan oleh Arduino Nano RP2040 Connect.

Kedua driver memiliki nama metode yang sama tetapi berbeda dalam beberapa argumen dan kumpulan kunci config() yang diterima. Perbedaan ditandai di bawah ini.

Kamera OpenMV dengan perisai WiFi WINC1500 lama (M4 / M7 / H7 / H7 Plus / Pure Thermal) menggunakan WINC sebagai gantinya.

Contoh penggunaan:

import network

# Enable the station interface and connect to a WiFi AP.
nic = network.WLAN(network.WLAN.IF_STA)
nic.active(True)
nic.connect("your-ssid", "your-key")
while not nic.isconnected():
    pass

print(nic.ipconfig("addr4"))

Konstruktor

class network.WLAN(interface_id: int = WLAN.IF_STA) None

Buat objek antarmuka WLAN.

interface_id memilih antarmuka yang akan dioperasikan:

  • WLAN.IF_STA -- mode stasiun / klien. Sambungkan ke titik akses hulu dengan connect(). Ini adalah mode default.

  • WLAN.IF_AP -- mode titik akses. Konfigurasikan AP dengan config() dan terima koneksi klien.

Radio fisik yang sama mendukung kedua antarmuka; membuat satu tidak menghalangi yang lain.

Metode

active(is_active: bool | None = None) bool

Aktifkan atau nonaktifkan radio WiFi.

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

active(True) mengaktifkan MCU WiFi, memuat firmware-nya (CYW43 mengambil blob firmware dari flash; NINA memvalidasi versi firmware yang sedang di-flash) dan menjalankan lwIP netif untuk antarmuka ini. Semua metode lain -- connect(), scan(), ipconfig() dan lainnya -- mengharuskan antarmuka aktif.

active(False) mematikan radio kembali. Pada antarmuka STA ini juga memutus asosiasi dari AP saat ini dan merilis netif.

connect(ssid: str, key: str | None = None, *, security: int = -1, bssid: bytes | None = None, channel: int = -1) None

Hubungkan antarmuka STA dengan titik akses yang diberikan.

ssid -- SSID jaringan (string atau bytes).

key -- kata sandi / kunci yang telah dibagikan sebelumnya. Berikan None untuk jaringan terbuka.

security (hanya kata kunci) -- salah satu dari konstanta SEC_*. -1 (default) memilih otomatis: SEC_OPEN saat key kosong, SEC_WPA_WPA2 jika tidak.

bssid (hanya kata kunci, khusus CYW43) -- batasi asosiasi ke AP dengan alamat MAC 6-byte ini. Diabaikan oleh driver NINA.

channel (hanya kata kunci) -- saluran radio yang diinginkan. Default adalah "biarkan driver memilih".

disconnect() None

Dalam mode STA, putuskan asosiasi dari titik akses yang sedang diasosiasikan. Antarmuka tetap aktif; panggil connect() lagi untuk mengasosiasikan ulang, atau active() (False) untuk mematikan radio sepenuhnya. Tidak melakukan apa-apa saat tidak sedang diasosiasikan.

isconnected() bool

Dalam mode STA, kembalikan True saat diasosiasikan dengan titik akses dan alamat IPv4 telah diperoleh dari DHCP (atau ditetapkan secara statis melalui ipconfig()). Mengembalikan False saat tautan masih dalam fase autentikasi/asosiasi/DHCP.

Dalam mode AP, kembalikan True saat setidaknya satu stasiun telah bergabung.

scan(*, passive: bool = False, ssid: bytes | None = None, bssid: bytes | None = None) List[Tuple[bytes, bytes, int, int, int, int]]

Pindai titik akses di sekitar dan kembalikan daftar 6-tuple:

  • [0] SSID (bytes; kosong untuk jaringan tersembunyi).

  • [1] BSSID (MAC 6-byte, bytes). Konversi dengan binascii.hexlify().

  • [2] Nomor saluran.

  • [3] RSSI dalam dBm.

  • [4] Mode keamanan (salah satu dari konstanta SEC_*).

  • [5] Dicadangkan (selalu 1).

Semua argumen kata kunci hanya untuk CYW43:

  • passive -- jika True, gunakan pemindaian pasif daripada pemindaian probe-request aktif default.

  • ssid -- batasi pemindaian ke satu SSID.

  • bssid -- batasi pemindaian ke satu BSSID.

Pemindaian hanya bermakna pada antarmuka STA.

status() int
status(param: str) Any

Kueri status koneksi.

Tanpa argumen, kembalikan status tautan sebagai bilangan bulat kecil (pengkodean spesifik driver -- nilai truthy berarti "diasosiasikan").

Dengan argumen string:

  • "rssi" -- dalam mode STA, kembalikan RSSI saat ini dalam dBm.

  • "stations" -- dalam mode AP, kembalikan daftar stasiun yang terhubung. CYW43 mengembalikan [(mac_bytes,), ...]; NINA mengembalikan [ip_string, ...].

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

Dapatkan atau tetapkan parameter antarmuka IPv4 sebagai 4-tuple dari string dotted-quad (ip, subnet, gateway, dns).

Catatan

Pilih ipconfig() untuk kode baru:

nic.ipconfig(addr4="192.168.0.4/24", gw4="192.168.0.1")
network.ipconfig(dns="8.8.8.8")
ipconfig(param: str) Any
ipconfig(**kwargs: Any) None

Dapatkan atau tetapkan parameter antarmuka IPv4 / IPv6. Driver CYW43 mendelegasikan ke implementasi lwIP standar dan mendukung kumpulan kunci lengkap yang didokumentasikan pada AbstractNIC.ipconfig(). Driver NINA mengimplementasikan subset per-antarmuka yang lebih kecil -- dhcp4 dan has_dhcp4 (hanya-baca), ditambah addr4 dan gw4 untuk get / set.

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

Dapatkan atau tetapkan parameter antarmuka spesifik WiFi.

Dengan satu argumen string posisional, kembalikan nilai parameter tersebut. Dengan argumen kata kunci, tetapkan satu atau lebih parameter sekaligus -- perubahan yang mempengaruhi AP yang sedang berjalan menyebabkan AP dimatikan dan dinyalakan kembali secara otomatis.

Contoh:

# Set up the access-point name and channel.
ap.config(ssid="My AP", channel=11)
# Query params one at a time.
print(ap.config("ssid"))
print(ap.config("mac"))

Driver CYW43 -- parameter yang dapat dibaca:

  • "antenna" -- pemilih antena (int).

  • "channel" -- saluran saat ini.

  • "ssid" / "essid" -- SSID saat ini (string).

  • "security" -- mode auth AP (salah satu dari SEC_*).

  • "mac" -- alamat MAC antarmuka (6 bytes).

  • "pm" -- nilai manajemen daya.

  • "txpower" -- daya pancar dalam dBm.

  • "hostname" -- nama host DHCP/mDNS. Tidak dianjurkan; gunakan network.hostname() sebagai gantinya.

Driver CYW43 -- parameter yang dapat diatur:

  • antenna=<int> -- pemilih antena.

  • channel=<int> -- saluran AP.

  • ssid=<str> / essid=<str> -- SSID AP.

  • key=<str> / password=<str> -- kunci yang telah dibagikan sebelumnya untuk AP.

  • security=<int> -- mode auth AP (salah satu dari SEC_*).

  • pm=<int> -- mode manajemen daya (salah satu dari PM_NONE, PM_PERFORMANCE, PM_POWERSAVE).

  • monitor=<int> -- aktifkan mode monitor / all-multicast.

  • txpower=<int> -- daya pancar dalam dBm.

  • trace=<int> -- bitmask jejak driver internal.

  • hostname=<str> -- nama host DHCP/mDNS. Tidak dianjurkan; gunakan network.hostname() sebagai gantinya.

Driver NINA -- parameter yang dapat dibaca:

  • "ssid" -- SSID saat ini (string).

  • "security" -- mode auth AP.

  • "mac" / "bssid" -- alamat MAC antarmuka (6 bytes).

  • "fw_version" -- 3-tuple (major, minor, patch).

Driver NINA -- parameter yang dapat diatur: panggilan diteruskan ke connect() dan menerima argumen kata kunci yang sama (ssid, key, security, channel). Hanya valid pada antarmuka AP.

deinit() None

Matikan daya MCU WiFi dan lepaskan setiap sumber daya yang dipegang driver (buffer firmware, lwIP netif, bus SPI/SDIO). Setelah memanggil ini, objek WLAN harus direkonstruksi sebelum digunakan. Gunakan ini daripada active() (False) saat Anda membutuhkan reset penuh (misalnya, sebelum me-reflash firmware radio atau untuk memulihkan dari status driver yang tersangkut). Hanya CYW43.

send_ethernet(buf: bytes) None

Injeksikan frame Ethernet mentah buf langsung ke jalur transmisi driver, melewati tumpukan IP. Ditujukan untuk konsumen hanya-L2 -- bridging, protokol EtherType kustom, dan sejenisnya. Frame harus mencakup MAC tujuan/sumber dan EtherType (tanpa FCS -- hardware menambahkannya). Hanya CYW43.

ioctl(cmd: int, buf: bytearray) None

Keluarkan perintah kontrol spesifik driver. cmd adalah kode ioctl numerik yang didefinisikan oleh firmware radio yang mendasarinya dan buf adalah buffer yang dapat diubah yang digunakan untuk payload perintah dan respons. Kumpulan nilai cmd yang valid spesifik untuk driver dan tidak portabel antara CYW43 dan NINA. Digunakan sebagian besar oleh skrip uji level rendah dan kode chip-bring-up.

Konstanta

IF_STA: int

Pengidentifikasi antarmuka stasiun / klien. Berikan ke konstruktor untuk memilih mode STA.

IF_AP: int

Pengidentifikasi antarmuka titik akses. Berikan ke konstruktor untuk memilih mode AP.

SEC_OPEN: int

Nilai keamanan untuk jaringan tidak terenkripsi. Tersedia di kedua driver.

SEC_WPA_WPA2: int

Nilai keamanan untuk WPA / WPA2 dengan kunci yang telah dibagikan sebelumnya. Default saat kunci disediakan ke connect(). Tersedia di kedua driver.

SEC_WPA3: int

Nilai keamanan untuk WPA3 (SAE) dengan kunci yang telah dibagikan sebelumnya. Hanya CYW43.

SEC_WPA2_WPA3: int

Nilai keamanan untuk mode transisi WPA2 / WPA3. Hanya CYW43.

SEC_WEP: int

Nilai keamanan untuk WEP (Wired Equivalent Privacy). Disediakan untuk kompatibilitas dengan titik akses lama -- WEP telah rusak secara kriptografis dan tidak boleh digunakan pada penerapan baru. Hanya NINA.

OPEN: int

Alias kompatibilitas untuk SEC_OPEN. Kode baru harus menggunakan SEC_OPEN. Hanya NINA.

WEP: int

Alias kompatibilitas untuk SEC_WEP. Kode baru harus menggunakan SEC_WEP. Hanya NINA.

WPA_PSK: int

Alias kompatibilitas untuk SEC_WPA_WPA2. Kode baru harus menggunakan SEC_WPA_WPA2. Hanya NINA.

PM_NONE: int

Berikan ke config(pm=...) untuk menonaktifkan manajemen daya WiFi. Hanya CYW43.

PM_PERFORMANCE: int

Berikan ke config(pm=...) untuk mengaktifkan manajemen daya WiFi yang disetel untuk kinerja. Hanya CYW43.

PM_POWERSAVE: int

Berikan ke config(pm=...) untuk mengaktifkan manajemen daya WiFi yang disetel untuk masa pakai baterai maksimum. Hanya CYW43.