network — налаштування мережі¶
Цей модуль надає мережеві драйвери та конфігурацію маршрутизації. Для використання цього модуля необхідно встановити варіант/збірку MicroPython з мережевими можливостями. Мережеві драйвери для конкретного обладнання доступні в цьому модулі та використовуються для налаштування апаратних мережевих інтерфейсів. Мережеві служби, що надаються налаштованими інтерфейсами, стають доступними для використання через модуль socket.
Наприклад:
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()
Замініть WLAN на WINC (старий WiFi-щит) або LAN (вбудований Ethernet) відповідно до камери. Загальна схема побудова -> активація -> підключення -> використання сокетів однакова в усіх трьох випадках.
Загальний інтерфейс мережевого адаптера¶
Цей розділ описує (неявний) абстрактний базовий клас для всіх класів мережевих інтерфейсів, реалізованих портами MicroPython для різного обладнання. Це означає, що MicroPython насправді не надає клас AbstractNIC, але будь-який реальний клас NIC, описаний у наступних розділах, реалізує методи, описані тут.
- class network.AbstractNIC(id: int | None = None, *args: Any, **kwargs: Any) None¶
Створює об’єкт мережевого інтерфейсу. Параметри залежать від мережевого інтерфейсу. Якщо є більше одного інтерфейсу одного типу, першим параметром має бути
id.- active(is_active: bool | None = None, /) bool¶
Вмикає або вимикає мережевий інтерфейс.
Без аргументу повертає поточний стан –
True, якщо інтерфейс активний,Falseінакше.Передайте
Trueдля активації інтерфейсу: увімкнення / скидання базового мережевого контролера, завантаження мікропрограми де необхідно та підняття IP-стеку на цьому інтерфейсі. Подальші виклики, що звертаються до мережі (connect(),scan(),ipconfig(), …), вимагають, щоб інтерфейс був активний.Передайте
Falseдля деактивації інтерфейсу: вимкнення IP-стеку та звільнення ресурсів драйвера. На бездротових інтерфейсах це також від’єднує від будь-якої поточно приєднаної мережі.Поведінка при виклику інших методів на неактивному інтерфейсі не визначена.
- connect(service_id: str | None = None, key: str | None = None, *, bssid: bytes | None = None, **kwargs: Any) None¶
Підключає інтерфейс до мережі. Цей метод необов’язковий і доступний лише для інтерфейсів, які не є «завжди підключеними». Якщо параметри не задані, підключається до служби за замовчуванням (або єдиної). Якщо задано один параметр, це основний ідентифікатор служби для підключення. Він може супроводжуватись ключем (паролем), необхідним для доступу до цієї служби. Можуть бути додаткові довільні параметри лише у вигляді ключових слів, залежно від типу мережевого середовища та/або конкретного пристрою. Параметри можуть використовуватись для: а) зазначення альтернативних типів ідентифікатора служби; б) надання додаткових параметрів підключення. Для різних типів середовищ існують різні набори попередньо визначених/рекомендованих параметрів, серед них:
WiFi: ключове слово bssid для підключення до конкретного BSSID (MAC-адреса)
- scan(**kwargs: Any) List[Tuple]¶
Сканує доступні мережеві служби/з’єднання. Повертає список кортежів з виявленими параметрами служб. Для різних мережевих середовищ існують різні варіанти попередньо визначених/рекомендованих форматів кортежів, серед них:
WiFi: (ssid, bssid, channel, RSSI, security, hidden). Можуть бути додаткові поля, специфічні для конкретного пристрою.
Функція може приймати додаткові ключові аргументи для фільтрації результатів сканування (наприклад, сканування конкретної служби, на конкретному каналі, для служб конкретного набору тощо) та для впливу на тривалість сканування та інші параметри. Де можливо, назви параметрів мають відповідати тим, що у connect().
- status(param: str | None = None) Any¶
Запит динамічної інформації про стан інтерфейсу. При виклику без аргументу повертане значення описує статус мережевого з’єднання. Інакше param має бути рядком, що вказує конкретний параметр стану для отримання.
Типи та значення, що повертаються, залежать від мережевого середовища/технології. Деякі з параметрів, які можуть підтримуватись:
WiFi STA: використовуйте
'rssi'для отримання RSSI сигналу APWiFi AP: використовуйте
'stations'для отримання списку всіх STА, підключених до AP. Список містить кортежі виду (MAC, RSSI).
- ipconfig(param: str) Any¶
- ipconfig(**kwargs: Any) None
Отримує або задає специфічні для інтерфейсу параметри IP-конфігурації. Підтримувані параметри наведено нижче (доступність конкретного параметра залежить від порту та конкретного мережевого інтерфейсу):
dhcp4(True/False) отримати адресу IPv4, шлюз та DNS-сервер через DHCP. Цей метод не блокує і не чекає на отримання адреси. Щоб перевірити, чи отримано адресу, використовуйте властивість лише для читанняhas_dhcp4.gw4Отримати/задати шлюз IPv4 за замовчуванням.dhcp6(True/False) отримати DNS-сервер через stateless DHCPv6. Отримання IP-адрес через DHCPv6 наразі не реалізовано.autoconf6(True/False) отримати stateless адресу IPv6 через мережевий префікс, що надається у повідомленнях Router Advertisement. Щоб перевірити, чи отримано stateless адресу, використовуйте властивість лише для читанняhas_autoconf6.addr4(наприклад,192.168.0.4/24) отримати поточну адресу IPv4 та маску мережі у вигляді кортежу(ip, subnet)незалежно від способу отримання цієї адреси. Цей метод можна використовувати для задання статичної адреси IPv4 у вигляді кортежу(ip, subnet)або в нотації CIDR.addr6(наприклад,fe80::1234:5678) отримати список поточних адрес IPv6 у вигляді кортежу(ip, state, preferred_lifetime, valid_lifetime). Це включає link-local, slaac та статичні адреси.preferred_lifetimeтаvalid_lifetimeпредставляють залишковий дійсний та бажаний термін служби кожної адреси IPv6 в секундах.stateвказує поточний стан адреси:0x08-0x0fвказує, що адреса є тимчасовою (tentative), рахуючи кількість відправлених probe-запитів.0x10Адреса є застарілою (але ще дійсною)0x30Адреса є бажаною (та дійсною)0x40Адреса є продубльованою і не може бути використана.
Цей метод можна використовувати для задання статичної адреси IPv6, встановивши цей параметр на адресу, наприклад
fe80::1234:5678.
- ifconfig(config: Tuple[str, str, str, str] | None = None) Tuple[str, str, str, str] | None¶
Примітка
Ця функція застаріла, використовуйте натомість
ipconfig().Отримує/задає мережеві параметри інтерфейсу на рівні IP: IP-адресу, маску підмережі, шлюз та DNS-сервер. При виклику без аргументів цей метод повертає 4-кортеж з наведеною вище інформацією. Для встановлення наведених вище значень передайте 4-кортеж з необхідною інформацією. Наприклад:
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
Отримує або задає загальні параметри мережевого інтерфейсу. Ці методи дозволяють працювати з додатковими параметрами поза стандартною IP-конфігурацією (яку забезпечує
ipconfig()). Вони включають мережеві та апаратно-специфічні параметри. Для встановлення параметрів слід використовувати синтаксис ключових аргументів, і кілька параметрів можна задати одночасно. Для запиту назва параметра має бути задана у вигляді рядка, і одночасно можна запитати лише один параметр:# 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'))
Конкретні реалізації класів мережі¶
Наступні конкретні класи реалізують інтерфейс AbstractNIC і надають спосіб керування мережевими інтерфейсами різних видів.
Мережеві функції¶
Нижче наведено функції, доступні в модулі network.
- network.country(code: str | None = None) str | None¶
Отримує або задає двобуквений код країни ISO 3166-1 Alpha-2 для дотримання радіочастотних норм.
Якщо параметр code задано, країна буде встановлена на це значення. Якщо функція викликається без параметрів, вона повертає поточний код країни.
Код за замовчуванням
"XX"представляє «всесвітній» регіон.
- network.hostname(name: str | None = None) str | None¶
Отримує або задає ім’я хоста, яке ідентифікуватиме цей пристрій у мережі. Воно використовуватиметься всіма інтерфейсами.
- Це ім’я хоста використовується для:
Надсилання DHCP-серверу у запиті клієнта. (При використанні DHCP)
Широкомовлення через mDNS. (Якщо увімкнено)
Якщо параметр name задано, ім’я хоста буде встановлено на це значення. Якщо функція викликається без параметрів, вона повертає поточне ім’я хоста.
Зміна імені хоста зазвичай застосовується лише під час підключення. Для DHCP це пов’язано з тим, що ім’я хоста є частиною запиту DHCP-клієнта, а реалізація mDNS у більшості портів ініціалізує ім’я хоста лише один раз під час підключення. З цієї причини необхідно задати ім’я хоста до активації/підключення мережевих інтерфейсів.
Довжина імені хоста обмежена 32 символами. Порти MicroPython можуть встановити нижчий ліміт з міркувань пам’яті. Якщо задане ім’я не вміщується, виникає
ValueError.Ім’я хоста за замовчуванням зазвичай є назвою плати.
- network.ipconfig(param: str) Any¶
- network.ipconfig(**kwargs: Any) None
Отримує або задає глобальні параметри IP-конфігурації. Підтримувані параметри наведено нижче (доступність конкретного параметра залежить від порту та конкретного мережевого інтерфейсу):
dnsОтримати/задати DNS-сервер. Цей метод підтримує як адреси IPv4, так і IPv6.prefer(4/6) Вказати, який тип адреси повертати, якщо доменне ім’я має записи A і AAAA. Зверніть увагу, що це не очищає локальний кеш DNS, тому раніше отримані адреси можуть не змінитися.