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