MicroPython:Библиотеки/network: различия между версиями
Myagkij (обсуждение | вклад) (Новая страница: «{{MicroPython/Панель перехода}} {{Перевод от Сubewriter}} {{Myagkij-редактор}} <syntaxhighlight lang="python" enclose="div"> =...») |
Myagkij (обсуждение | вклад) Нет описания правки |
||
Строка 3: | Строка 3: | ||
{{Myagkij-редактор}} | {{Myagkij-редактор}} | ||
=Модуль network – настройки сети<ref>[http://docs.micropython.org/en/latest/library/network.html docs.micropython.org - network — network configuration]</ref>= | |||
В этом модуле реализованы сетевые драйверы и настройки маршрутизации. Чтобы использовать этот модуль, у вас должна быть установлена версия/билд MicroPython с возможностями работы с сетью. Сетевые драйверы для различного сетевого оборудования, входящие в этот модуль, используются для настройки аппаратного сетевого интерфейса (или интерфейсов). После того, как настроенные сетевые интерфейсы предоставят доступ к сетевым службам, вы сможете воспользоваться ими с помощью модуля usocket. | |||
Например: | |||
<syntaxhighlight lang="python" enclose="div"> | |||
# Подключение и печать IP-настроек сетевого интерфейса. | |||
# Примеры специфических драйверов смотрите ниже. | |||
import network | |||
import utime | |||
nic = network.Driver(...) | |||
if not nic.isconnected(): | |||
nic.connect() | |||
print("Ждем соединения...") | |||
while not nic.isconnected(): | |||
utime.sleep(1) | |||
print(nic.ifconfig()) | |||
# Теперь используем «usocket» как обычно: | |||
import usocket as socket | |||
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() | |||
</syntaxhighlight> | |||
== Общий интерфейс сетевого адаптера == | |||
В этом разделе описывается (скрытый) абстрактный базовый класс для всех классов сетевого интерфейса, реализованных в MicroPython для разных платформ. Это значит, что в MicroPython нет класса AbstractNIC, но при этом описанные ниже методы реализованы во всех NIC-классах (от англ. «network interface», то есть «сетевой интерфейс»). | |||
* Класс network.AbstractNIC(id=None, ...) – инстанцинирует объект сетевого интерфейса. Аргументы зависят от используемого сетевого интерфейса. Если интерфейсов одного и того же типа больше одного, первым аргументом должен быть id. | |||
* AbstractNIC.active([is_active]) – если в аргументе is_active задано булево значение, этот метод активирует или деактивирует сетевой интерфейс. Если аргумента is_active задано не будет, он возвращает текущее состояние сетевого интерфейса. Большинству других методов требуется активное состояние интерфейса (их поведение в ситуации, когда они будут вызваны при неактивном интерфейсе, не задано). | |||
* AbstractNIC.connect([service_id, key=None, *, ...]) – подключает интерфейс к сети. Это опциональный метод, доступный только на интерфейсах, которые не всегда находятся в подключенном состоянии. Если никаких параметров задано не будет, метод подключается к сервису, заданному по умолчанию, или к единственному доступному сервису. Если задать только один аргумент, то он будет главным идентификатором сервиса, к которому надо подключиться. Вместе с ним можно также задать аргумент key (пароль) для доступа к сервису. В этом методе можно задать и другие именованные аргументы – это зависит от типа коммуникации и/или используемого устройства. Эти аргументы могут быть использованы: | |||
** …чтобы задать альтернативный идентификатор сервиса. | |||
** …чтобы задать дополнительные параметры соединения. | |||
У разных типов соединений разный перечень стандартных/рекомендованных аргументов, например: | |||
** Для WiFi - это: bssid – это название BSSID, к которой надо подключиться (MAC-адрес). | |||
* AbstractNIC.disconnect() – отключает устройство от сети. | |||
* AbstractNIC.isconnected() – возвращает True, если подключение к сети установлено, и False, если нет. | |||
* AbstractNIC.scan(*, ...) – сканирует доступные соединения и сетевые сервисы. Возвращает список кортежей с параметрами найденных сервисов. У разных типов соединений – разные варианты стандартных/рекомендованных форматов кортежей. Например: | |||
** Для WiFi – это: (ssid, bssid, channel, RSSI, authmode, hidden). В кортеже могут быть заданы и другие параметры – это зависит от используемого устройства. | |||
Кроме того, в этой функции можно задать дополнительные именованные аргументы, чтобы отфильтровать результаты сканирования (например, чтобы найти конкретный сервис, конкретный канал, сервисы конкретного типа и т.д.), задать время сканирования и т.д. Где это возможно, названия аргументов должны совпадать с названиями аргументов в connect(). | |||
* AbstractNIC.status([param]) – запрашивает информацию о динамическом статусе интерфейса. Если вызвать эту функцию без аргумента, возвращаемое значение будет обозначать состояние связи. Если вам нужно узнать значение конкретного параметра, задайте этот параметр в аргументе param (он должен быть строкой). | |||
Возвращаемые значения зависят от типа/технологии сети. Вот некоторые из поддерживаемых параметров: | |||
** WiFi в режиме станции: rssi – чтобы узнать RSSI сигнала точки доступа. | |||
** WiFi в режиме точки доступа: stations – чтобы узнать список всех станций, подключенных к точке доступа. Этот список будет состоять из кортежей в виде (MAC, RSSI). | |||
* AbstractNIC.ifconfig([(ip, subnet, gateway, dns)]) – считывает/задает параметры IP-уровня: IP-адрес, маску подсети, сетевой шлюз и DNS-сервер. Если вызвать эту функцию без аргументов, она вернет 4-элементный кортеж с вышеперечисленными параметрами. Чтобы задать эти параметры, передайте методу 4-элементный кортеж с ними. Например: | |||
nic.ifconfig(('192.168.0.4', '255.255.255.0', '192.168.0.1', '8.8.8.8')) | |||
* AbstractNIC.config('param') и AbstractNIC.config(param=value, ...) – задает или считывает общие параметры сетевого интерфейса. Эти методы позволяют работать не только со стандартными IP-настройками (как в методе ifconfig()), но и с дополнительными параметрами. Сюда входят параметры, специфичные для используемой сети и платформы. Чтобы задать параметры, нужно воспользоваться синтаксисом именованных аргументов. Кроме того, за раз можно задать несколько параметров. Чтобы прочесть параметр, его строковое название нужно взять в кавычки, и за раз можно прочесть только один параметр. | |||
# Задаем название для точки WiFi-доступа (ESSID) и WiFi-канал: | |||
ap.config(essid='My AP', channel=11) | |||
# Считываем параметры по одному: | |||
print(ap.config('essid')) | |||
print(ap.config('channel')) | |||
Специфические реализации класса | |||
В классах ниже в разных вариациях реализован интерфейс AbstractNIC – каждая из этих вариаций позволяет управлять разными типами сетевых интерфейсов: | |||
* Класс WLAN – управление встроенными WiFi-интерфейсами | |||
* Класс WLANWiPy – управление WiFi-интерфейсом с особенностями WiPy | |||
* Класс CC3K – управление WiFi-модулями CC3000 | |||
* Класс WIZNET5K – управление Ethernet-модулями WIZnet5x00 | |||
Сетевые функции | |||
Здесь описаны дополнительные функции модуля network: | |||
* network.phy_mode([mode]) – задает или считывает PHY-режим. | |||
Если аргумент mode задан, эта функция устанавливает PHY-режим. Если аргумента mode не задано, функция возвращает текущий PHY-режим. Режимы, которые можно задать (в виде констант): | |||
** MODE_11B – IEEE 802.11b. | |||
** MODE_11G – IEEE 802.11g. | |||
** MODE_11N – IEEE 802.11n. | |||
Доступность: ESP8266. | |||
Версия от 19:48, 20 сентября 2020
Модуль network – настройки сети[1]
В этом модуле реализованы сетевые драйверы и настройки маршрутизации. Чтобы использовать этот модуль, у вас должна быть установлена версия/билд MicroPython с возможностями работы с сетью. Сетевые драйверы для различного сетевого оборудования, входящие в этот модуль, используются для настройки аппаратного сетевого интерфейса (или интерфейсов). После того, как настроенные сетевые интерфейсы предоставят доступ к сетевым службам, вы сможете воспользоваться ими с помощью модуля usocket.
Например:
# Подключение и печать IP-настроек сетевого интерфейса.
# Примеры специфических драйверов смотрите ниже.
import network
import utime
nic = network.Driver(...)
if not nic.isconnected():
nic.connect()
print("Ждем соединения...")
while not nic.isconnected():
utime.sleep(1)
print(nic.ifconfig())
# Теперь используем «usocket» как обычно:
import usocket as socket
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()
Общий интерфейс сетевого адаптера
В этом разделе описывается (скрытый) абстрактный базовый класс для всех классов сетевого интерфейса, реализованных в MicroPython для разных платформ. Это значит, что в MicroPython нет класса AbstractNIC, но при этом описанные ниже методы реализованы во всех NIC-классах (от англ. «network interface», то есть «сетевой интерфейс»).
- Класс network.AbstractNIC(id=None, ...) – инстанцинирует объект сетевого интерфейса. Аргументы зависят от используемого сетевого интерфейса. Если интерфейсов одного и того же типа больше одного, первым аргументом должен быть id.
- AbstractNIC.active([is_active]) – если в аргументе is_active задано булево значение, этот метод активирует или деактивирует сетевой интерфейс. Если аргумента is_active задано не будет, он возвращает текущее состояние сетевого интерфейса. Большинству других методов требуется активное состояние интерфейса (их поведение в ситуации, когда они будут вызваны при неактивном интерфейсе, не задано).
- AbstractNIC.connect([service_id, key=None, *, ...]) – подключает интерфейс к сети. Это опциональный метод, доступный только на интерфейсах, которые не всегда находятся в подключенном состоянии. Если никаких параметров задано не будет, метод подключается к сервису, заданному по умолчанию, или к единственному доступному сервису. Если задать только один аргумент, то он будет главным идентификатором сервиса, к которому надо подключиться. Вместе с ним можно также задать аргумент key (пароль) для доступа к сервису. В этом методе можно задать и другие именованные аргументы – это зависит от типа коммуникации и/или используемого устройства. Эти аргументы могут быть использованы:
- …чтобы задать альтернативный идентификатор сервиса.
- …чтобы задать дополнительные параметры соединения.
У разных типов соединений разный перечень стандартных/рекомендованных аргументов, например:
- Для WiFi - это: bssid – это название BSSID, к которой надо подключиться (MAC-адрес).
- AbstractNIC.disconnect() – отключает устройство от сети.
- AbstractNIC.isconnected() – возвращает True, если подключение к сети установлено, и False, если нет.
- AbstractNIC.scan(*, ...) – сканирует доступные соединения и сетевые сервисы. Возвращает список кортежей с параметрами найденных сервисов. У разных типов соединений – разные варианты стандартных/рекомендованных форматов кортежей. Например:
- Для WiFi – это: (ssid, bssid, channel, RSSI, authmode, hidden). В кортеже могут быть заданы и другие параметры – это зависит от используемого устройства.
Кроме того, в этой функции можно задать дополнительные именованные аргументы, чтобы отфильтровать результаты сканирования (например, чтобы найти конкретный сервис, конкретный канал, сервисы конкретного типа и т.д.), задать время сканирования и т.д. Где это возможно, названия аргументов должны совпадать с названиями аргументов в connect().
- AbstractNIC.status([param]) – запрашивает информацию о динамическом статусе интерфейса. Если вызвать эту функцию без аргумента, возвращаемое значение будет обозначать состояние связи. Если вам нужно узнать значение конкретного параметра, задайте этот параметр в аргументе param (он должен быть строкой).
Возвращаемые значения зависят от типа/технологии сети. Вот некоторые из поддерживаемых параметров:
- WiFi в режиме станции: rssi – чтобы узнать RSSI сигнала точки доступа.
- WiFi в режиме точки доступа: stations – чтобы узнать список всех станций, подключенных к точке доступа. Этот список будет состоять из кортежей в виде (MAC, RSSI).
- AbstractNIC.ifconfig([(ip, subnet, gateway, dns)]) – считывает/задает параметры IP-уровня: IP-адрес, маску подсети, сетевой шлюз и DNS-сервер. Если вызвать эту функцию без аргументов, она вернет 4-элементный кортеж с вышеперечисленными параметрами. Чтобы задать эти параметры, передайте методу 4-элементный кортеж с ними. Например:
nic.ifconfig(('192.168.0.4', '255.255.255.0', '192.168.0.1', '8.8.8.8'))
- AbstractNIC.config('param') и AbstractNIC.config(param=value, ...) – задает или считывает общие параметры сетевого интерфейса. Эти методы позволяют работать не только со стандартными IP-настройками (как в методе ifconfig()), но и с дополнительными параметрами. Сюда входят параметры, специфичные для используемой сети и платформы. Чтобы задать параметры, нужно воспользоваться синтаксисом именованных аргументов. Кроме того, за раз можно задать несколько параметров. Чтобы прочесть параметр, его строковое название нужно взять в кавычки, и за раз можно прочесть только один параметр.
- Задаем название для точки WiFi-доступа (ESSID) и WiFi-канал:
ap.config(essid='My AP', channel=11)
- Считываем параметры по одному:
print(ap.config('essid')) print(ap.config('channel')) Специфические реализации класса В классах ниже в разных вариациях реализован интерфейс AbstractNIC – каждая из этих вариаций позволяет управлять разными типами сетевых интерфейсов:
- Класс WLAN – управление встроенными WiFi-интерфейсами
- Класс WLANWiPy – управление WiFi-интерфейсом с особенностями WiPy
- Класс CC3K – управление WiFi-модулями CC3000
- Класс WIZNET5K – управление Ethernet-модулями WIZnet5x00
Сетевые функции Здесь описаны дополнительные функции модуля network:
- network.phy_mode([mode]) – задает или считывает PHY-режим.
Если аргумент mode задан, эта функция устанавливает PHY-режим. Если аргумента mode не задано, функция возвращает текущий PHY-режим. Режимы, которые можно задать (в виде констант):
- MODE_11B – IEEE 802.11b.
- MODE_11G – IEEE 802.11g.
- MODE_11N – IEEE 802.11n.
Доступность: ESP8266.
<syntaxhighlight lang="python" enclose="div">