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

Подключает интерфейс к сети. Этот метод необязателен и доступен только для интерфейсов, которые не являются «всегда подключёнными». Если параметры не заданы, подключается к сервису по умолчанию (или единственному). Если задан один параметр, это основной идентификатор сервиса, к которому нужно подключиться. Он может сопровождаться ключом (паролем), необходимым для доступа к указанному сервису. Могут быть и дополнительные произвольные параметры, передаваемые только по ключевому слову, в зависимости от типа сетевой среды и/или конкретного устройства. Параметры можно использовать для того, чтобы: a) указать альтернативные типы идентификаторов сервиса; b) предоставить дополнительные параметры подключения. Для различных типов сред существуют разные наборы предопределённых/рекомендуемых параметров, среди них:

  • WiFi: ключевое слово bssid для подключения к конкретному BSSID (MAC-адресу)

disconnect() None

Отключается от сети.

isconnected() bool

Возвращает True, если есть подключение к сети, иначе возвращает False.

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

Сканирует доступные сетевые сервисы/соединения. Возвращает список кортежей с параметрами обнаруженных сервисов. Для различных сетевых сред существуют разные варианты предопределённых/рекомендуемых форматов кортежей, среди них:

  • WiFi: (ssid, bssid, channel, RSSI, security, hidden). Могут быть и дополнительные поля, специфичные для конкретного устройства.

Функция может принимать дополнительные именованные аргументы для фильтрации результатов сканирования (например, сканирование конкретного сервиса, на конкретном канале, для сервисов конкретного набора и т. д.), а также для влияния на длительность сканирования и другие параметры. Где это возможно, имена параметров должны совпадать с именами в connect().

status(param: str | None = None) Any

Запрашивает динамическую информацию о состоянии интерфейса. При вызове без аргументов возвращаемое значение описывает состояние сетевого соединения. В противном случае param должен быть строкой с именем конкретного параметра состояния, который нужно получить.

Возвращаемые типы и значения зависят от сетевой среды/технологии. Некоторые из параметров, которые могут поддерживаться:

  • WiFi STA: используйте 'rssi', чтобы получить RSSI сигнала точки доступа

  • WiFi AP: используйте 'stations', чтобы получить список всех STA, подключённых к точке доступа. Список содержит кортежи вида (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-сервер через DHCPv6 без сохранения состояния. Получение IP-адресов через DHCPv6 в настоящее время не реализовано.

  • autoconf6 (True/False) получить IPv6-адрес без сохранения состояния через сетевой префикс, передаваемый в анонсах маршрутизатора. Чтобы проверить, был ли получен адрес без сохранения состояния, используйте свойство только для чтения 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 указывает, что адрес является предварительным, и считает количество отправленных проб.

    • 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, поэтому любые ранее полученные адреса могут не измениться.