клас WLAN – керування вбудованими WiFi-інтерфейсами¶
Клас WLAN керує вбудованими WiFi-радіомодулями на сучасних OpenMV Cam. Один і той самий клас обгортає два різних базових драйвери залежно від WiFi-мікросхеми плати:
CYW43 (модуль Infineon CYW43xxx Murata WiFi). Використовується на OpenMV Cam N6, OpenMV Cam RT1062, Arduino Portenta H7, Arduino Nicla Vision та Arduino Giga R1 WiFi.
NINA W10 (u-blox NINA-W10 / ESP32-WROOM). Використовується на Arduino Nano RP2040 Connect.
Обидва драйвери надають однакові назви методів, але відрізняються деякими аргументами та набором підтримуваних ключів config(). Відмінності позначено нижче.
Камери OpenMV зі старим WiFi-щитом WINC1500 (M4 / M7 / H7 / H7 Plus / Pure Thermal) використовують WINC замість цього класу.
Приклад використання:
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"))
Конструктори¶
- class network.WLAN(interface_id: int = WLAN.IF_STA) None¶
Створює об’єкт інтерфейсу
WLAN.interface_idвибирає інтерфейс для роботи:WLAN.IF_STA– режим станції / клієнта. Підключення до зовнішньої точки доступу за допомогоюconnect(). Це режим за замовчуванням.WLAN.IF_AP– режим точки доступу. Налаштуйте AP за допомогоюconfig()і приймайте підключення клієнтів.
Обидва інтерфейси використовують один і той самий фізичний радіомодуль; створення одного не перешкоджає іншому.
Методи¶
- active(is_active: bool | None = None) bool¶
Вмикає або вимикає WiFi-радіомодуль.
Без аргументу повертає поточний стан –
True, якщо радіомодуль активний,Falseінакше.active(True)вмикає живлення WiFi-мікросхеми, завантажує її мікропрограму (CYW43 отримує blob мікропрограми з флеш-пам’яті; NINA перевіряє версію вже прошитої мікропрограми) та піднімає lwIP netif для цього інтерфейсу. Всі інші методи –connect(),scan(),ipconfig()та інші – вимагають, щоб інтерфейс був активний.active(False)вимикає радіомодуль. На STA-інтерфейсі це також від’єднує від поточної AP та звільняє netif.
- connect(ssid: str, key: str | None = None, *, security: int = -1, bssid: bytes | None = None, channel: int = -1) None¶
Підключає STA-інтерфейс до зазначеної точки доступу.
ssid– SSID мережі (рядок або байти).key– пароль / попередньо узгоджений ключ. ПередайтеNoneдля відкритої мережі.security(лише ключове слово) – одна з константSEC_*.-1(за замовчуванням) обирає автоматично:SEC_OPEN, якщоkeyпорожній, абоSEC_WPA_WPA2інакше.bssid(лише ключове слово, лише CYW43) – обмежує підключення до AP з цією 6-байтовою MAC-адресою. Драйвером NINA ігнорується.channel(лише ключове слово) – бажаний радіоканал. За замовчуванням «дозволити драйверу вибрати».
- disconnect() None¶
У режимі STA від’єднується від поточної точки доступу. Інтерфейс залишається активним; викличте
connect()знову для повторного підключення абоactive()(False)для повного вимкнення радіомодуля. Не виконує жодних дій, якщо зараз не підключено.
- isconnected() bool¶
У режимі STA повертає
True, якщо підключено до точки доступу і отримано адресу IPv4 від DHCP (або призначено статично черезipconfig()). ПовертаєFalseпоки тривають фази аутентифікації/асоціації/DHCP.У режимі AP повертає
True, якщо до нього приєдналась хоча б одна станція.
- scan(*, passive: bool = False, ssid: bytes | None = None, bssid: bytes | None = None) List[Tuple[bytes, bytes, int, int, int, int]]¶
Сканує навколишні точки доступу та повертає список 6-кортежів:
[0]SSID (байти; порожньо для прихованих мереж).[1]BSSID (6-байтова MAC,bytes). Перетворіть за допомогоюbinascii.hexlify().[2]Номер каналу.[3]RSSI в дБм.[4]Режим безпеки (одна з константSEC_*).[5]Зарезервовано (завжди1).
Усі ключові аргументи стосуються лише CYW43:
passive– якщоTrue, використовує пасивне сканування замість активного сканування з probe-request за замовчуванням.ssid– обмежує сканування одним SSID.bssid– обмежує сканування одним BSSID.
Сканування має сенс лише на STA-інтерфейсі.
- status() int¶
- status(param: str) Any
Запит статусу підключення.
Без аргументу повертає статус з’єднання як мале ціле число (кодування, специфічне для драйвера – ненульове значення означає «підключено»).
З рядковим аргументом:
"rssi"– у режимі STA повертає поточний RSSI в дБм."stations"– у режимі AP повертає список підключених станцій. CYW43 повертає[(mac_bytes,), ...]; NINA повертає[ip_string, ...].
- ifconfig(config: Tuple[str, str, str, str] | None = None) Tuple[str, str, str, str] | None¶
Отримує або задає параметри IPv4-інтерфейсу у вигляді 4-кортежу рядків
(ip, subnet, gateway, dns)у форматі dotted-quad.Примітка
Для нового коду надавайте перевагу
ipconfig()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
Отримує або задає параметри інтерфейсу IPv4 / IPv6. Драйвер CYW43 делегує до стандартної реалізації lwIP та підтримує повний набір ключів, задокументованих у
AbstractNIC.ipconfig(). Драйвер NINA реалізує менший підмножину на рівні інтерфейсу –dhcp4таhas_dhcp4(лише читання), а такожaddr4таgw4для отримання / встановлення.
- config(param: str) Any¶
- config(**kwargs: Any) None
Отримує або задає специфічні для WiFi параметри інтерфейсу.
З одним позиційним рядковим аргументом повертає значення цього параметра. З ключовими аргументами встановлює один або кілька параметрів одночасно – зміни, що впливають на працюючу AP, призводять до автоматичного перезапуску AP.
Приклад:
# 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"))
Драйвер CYW43 – параметри, що можна отримати:
"antenna"– селектор антени (int)."channel"– поточний канал."ssid"/"essid"– поточний SSID (рядок)."security"– режим аутентифікації AP (одна зSEC_*)."mac"– MAC-адреса інтерфейсу (6bytes)."pm"– значення керування живленням."txpower"– потужність передачі в дБм."hostname"– ім’я хоста DHCP/mDNS. Застаріло; використовуйте натомістьnetwork.hostname().
Драйвер CYW43 – параметри, що можна встановити:
antenna=<int>– селектор антени.channel=<int>– канал AP.ssid=<str>/essid=<str>– SSID AP.key=<str>/password=<str>– попередньо узгоджений ключ AP.security=<int>– режим аутентифікації AP (одна зSEC_*).pm=<int>– режим керування живленням (одне зPM_NONE,PM_PERFORMANCE,PM_POWERSAVE).monitor=<int>– увімкнення режиму монітора / all-multicast.txpower=<int>– потужність передачі в дБм.trace=<int>– внутрішня маска трасування драйвера.hostname=<str>– ім’я хоста DHCP/mDNS. Застаріло; використовуйте натомістьnetwork.hostname().
Драйвер NINA – параметри, що можна отримати:
"ssid"– поточний SSID (рядок)."security"– режим аутентифікації AP."mac"/"bssid"– MAC-адреса інтерфейсу (6bytes)."fw_version"– 3-кортеж(major, minor, patch).
Драйвер NINA – параметри, що можна встановити: виклик перенаправляється до
connect()і приймає ті самі ключові аргументи (ssid,key,security,channel). Дійсно лише для AP-інтерфейсу.
- deinit() None¶
Перезапускає WiFi-мікросхему та звільняє всі ресурси, що утримує драйвер (буфери мікропрограми, lwIP netif, шина SPI/SDIO). Після виклику об’єкт
WLANнеобхідно відтворити перед використанням. Використовуйте це замістьactive()(False), коли потрібне повне скидання (наприклад, перед повторним прошиванням мікропрограми радіомодуля або для відновлення після зависання драйвера). Лише CYW43.
- send_ethernet(buf: bytes) None¶
Вводить необроблений кадр Ethernet
bufбезпосередньо в шлях передачі драйвера, обходячи IP-стек. Призначено для споживачів лише рівня L2 – мостування, власні протоколи EtherType тощо. Кадр повинен містити MAC призначення/джерела та EtherType (без FCS – апаратне забезпечення додає його). Лише CYW43.
- ioctl(cmd: int, buf: bytearray) None¶
Виконує специфічну для драйвера керуючу команду.
cmd– це числовий код ioctl, визначений базовою мікропрограмою радіомодуля, аbuf– мутований буфер, що використовується як для корисного навантаження команди, так і для відповіді. Набір допустимих значеньcmdє специфічним для драйвера і не є переносимим між CYW43 та NINA. Використовується переважно низькорівневими тестовими скриптами та кодом початкового запуску мікросхеми.
Константи¶
- IF_STA: int¶
Ідентифікатор інтерфейсу станції / клієнта. Передайте конструктору для вибору режиму STA.
- SEC_WPA_WPA2: int¶
Значення безпеки для WPA / WPA2 з попередньо узгодженим ключем. Використовується за замовчуванням, коли ключ передається до
connect(). Доступне на обох драйверах.
- SEC_WEP: int¶
Значення безпеки для WEP (Wired Equivalent Privacy). Надається для сумісності зі старими точками доступу – WEP криптографічно зламаний і не повинен використовуватись у нових розгортаннях. Лише NINA.
- WPA_PSK: int¶
Псевдонім для сумісності з
SEC_WPA_WPA2. Новий код має використовуватиSEC_WPA_WPA2. Лише NINA.