ESP8266:Прошивки/Arduino/Библиотеки/Библиотека ESP8266WiFi/Класс станции: различия между версиями
Myagkij (обсуждение | вклад) |
Нет описания правки |
||
Строка 17: | Строка 17: | ||
Переключение [[ESP8266]] в режим станции выполняется при помощи функции begin(). Параметрами для этой функции служат [[SSID]] и пароль к ней, чтобы чип можно было подключить к определенной точке доступа. | Переключение [[ESP8266]] в режим станции выполняется при помощи функции begin(). Параметрами для этой функции служат [[SSID]] и пароль к ней, чтобы чип можно было подключить к определенной точке доступа. | ||
<syntaxhighlight lang="c | <syntaxhighlight lang="c"> | ||
WiFi.begin(ssid, password) | WiFi.begin(ssid, password) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 29: | Строка 29: | ||
Самый простой вариант функции begin() – это... | Самый простой вариант функции begin() – это... | ||
<syntaxhighlight lang="c | <syntaxhighlight lang="c"> | ||
WiFi.begin() | WiFi.begin() | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 37: | Строка 37: | ||
Ниже – синтаксис еще одного варианта функции begin() со всеми возможными параметрами: | Ниже – синтаксис еще одного варианта функции begin() со всеми возможными параметрами: | ||
<syntaxhighlight lang="c | <syntaxhighlight lang="c"> | ||
WiFi.begin(ssid, password, channel, bssid, connect) | WiFi.begin(ssid, password, channel, bssid, connect) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 47: | Строка 47: | ||
Отключает [[DHCP-клиент]] (от '''«dynamic host configuration protocol»''', что значит '''«протокол динамической настройки узла»''') и выставляет [[IP]]-настройки станции на пользовательские значения. Эти [[IP]]-настройки, в отличие от настроек [[DHCP]], будут статическими. | Отключает [[DHCP-клиент]] (от '''«dynamic host configuration protocol»''', что значит '''«протокол динамической настройки узла»''') и выставляет [[IP]]-настройки станции на пользовательские значения. Эти [[IP]]-настройки, в отличие от настроек [[DHCP]], будут статическими. | ||
<syntaxhighlight lang="c | <syntaxhighlight lang="c"> | ||
WiFi.config(local_ip, gateway, subnet, dns1, dns2) | WiFi.config(local_ip, gateway, subnet, dns1, dns2) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 61: | Строка 61: | ||
====Пример:==== | ====Пример:==== | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
#include <ESP8266WiFi.h> | #include <ESP8266WiFi.h> | ||
Строка 94: | Строка 94: | ||
Пример данных, которые могут быть показаны в мониторе порта: | Пример данных, которые могут быть показаны в мониторе порта: | ||
<syntaxhighlight lang="bash | <syntaxhighlight lang="bash"> | ||
Connecting to sensor-net | Connecting to sensor-net | ||
. | . | ||
Строка 108: | Строка 108: | ||
Повторное подключение станции к точке доступа. Чип отключается от точки доступа, а затем инициирует с нею повторное подключение. | Повторное подключение станции к точке доступа. Чип отключается от точки доступа, а затем инициирует с нею повторное подключение. | ||
<syntaxhighlight lang="c | <syntaxhighlight lang="c"> | ||
WiFi.reconnect() | WiFi.reconnect() | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 116: | Строка 116: | ||
# Если функция вернула true, это значит, что последовательность действий для подключения была начата успешно. После этого пользователь должен проверить статус подключения и подождать, пока функция не вернет WL_CONNECTED: | # Если функция вернула true, это значит, что последовательность действий для подключения была начата успешно. После этого пользователь должен проверить статус подключения и подождать, пока функция не вернет WL_CONNECTED: | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
WiFi.reconnect(); | WiFi.reconnect(); | ||
while (WiFi.status() != WL_CONNECTED) | while (WiFi.status() != WL_CONNECTED) | ||
Строка 129: | Строка 129: | ||
Выставляет текущие [[SSID]] и пароль на '''null''', а затем отключает станцию от точки доступа. | Выставляет текущие [[SSID]] и пароль на '''null''', а затем отключает станцию от точки доступа. | ||
<syntaxhighlight lang="c | <syntaxhighlight lang="c"> | ||
WiFi.disconnect(wifioff) | WiFi.disconnect(wifioff) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 138: | Строка 138: | ||
Возвращает true, если станция подключена к точке доступа, или false, если не подключена. | Возвращает true, если станция подключена к точке доступа, или false, если не подключена. | ||
<syntaxhighlight lang="c | <syntaxhighlight lang="c"> | ||
WiFi.isConnected() | WiFi.isConnected() | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 146: | Строка 146: | ||
Настраивает чип, чтобы он при включении питания автоматически подключался к последней использованной точке доступа. | Настраивает чип, чтобы он при включении питания автоматически подключался к последней использованной точке доступа. | ||
<syntaxhighlight lang="c | <syntaxhighlight lang="c"> | ||
WiFi.setAutoConnect(autoConnect) | WiFi.setAutoConnect(autoConnect) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 156: | Строка 156: | ||
Это функция-компаньон для setAutoConnect(). Она возвращает true, если у модуля активировано автоматическое подключение к последней использованной точке доступа, и false, если деактивировано. | Это функция-компаньон для setAutoConnect(). Она возвращает true, если у модуля активировано автоматическое подключение к последней использованной точке доступа, и false, если деактивировано. | ||
<syntaxhighlight lang="c | <syntaxhighlight lang="c"> | ||
WiFi.getAutoConnect() | WiFi.getAutoConnect() | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 164: | Строка 164: | ||
Задает, сделает ли модуль, будучи отключенным, попытку повторного подключения к точке доступа. | Задает, сделает ли модуль, будучи отключенным, попытку повторного подключения к точке доступа. | ||
<syntaxhighlight lang="c | <syntaxhighlight lang="c"> | ||
WiFi.setAutoReconnect(autoReconnect) | WiFi.setAutoReconnect(autoReconnect) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 176: | Строка 176: | ||
Ждет, когда модуль подключится к точке доступа. Для вызова этой функции нужно, чтобы модуль был в режиме станции или станции + точки доступа. | Ждет, когда модуль подключится к точке доступа. Для вызова этой функции нужно, чтобы модуль был в режиме станции или станции + точки доступа. | ||
<syntaxhighlight lang="c | <syntaxhighlight lang="c"> | ||
WiFi.waitForConnectResult() | WiFi.waitForConnectResult() | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 193: | Строка 193: | ||
Извлекает данные о [[MAC-адрес]]е стационарного интерфейса [[ESP8266]]. | Извлекает данные о [[MAC-адрес]]е стационарного интерфейса [[ESP8266]]. | ||
<syntaxhighlight lang="c | <syntaxhighlight lang="c"> | ||
WiFi.macAddress(mac) | WiFi.macAddress(mac) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 201: | Строка 201: | ||
Пример кода: | Пример кода: | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
if (WiFi.status() == WL_CONNECTED) | if (WiFi.status() == WL_CONNECTED) | ||
{ | { | ||
Строка 213: | Строка 213: | ||
Пример данных, которые могут быть показаны в мониторе порта: | Пример данных, которые могут быть показаны в мониторе порта: | ||
<syntaxhighlight lang="bash | <syntaxhighlight lang="bash"> | ||
Mac address: 5C:CF:7F:08:11:17 | Mac address: 5C:CF:7F:08:11:17 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 219: | Строка 219: | ||
Если вы любите работать с указателями, у этой функции есть альтернативная версия. Вместо указателя она возвращает отформатированную строку (тип данных String), содержащую тот же [[MAC-адрес]]. | Если вы любите работать с указателями, у этой функции есть альтернативная версия. Вместо указателя она возвращает отформатированную строку (тип данных String), содержащую тот же [[MAC-адрес]]. | ||
<syntaxhighlight lang="c | <syntaxhighlight lang="c"> | ||
WiFi.macAddress() | WiFi.macAddress() | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 225: | Строка 225: | ||
Пример кода: | Пример кода: | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
if (WiFi.status() == WL_CONNECTED) | if (WiFi.status() == WL_CONNECTED) | ||
{ | { | ||
Строка 237: | Строка 237: | ||
Извлечение [[IP-адрес]]а стационарного интерфейса [[ESP8266]]. | Извлечение [[IP-адрес]]а стационарного интерфейса [[ESP8266]]. | ||
<syntaxhighlight lang="c | <syntaxhighlight lang="c"> | ||
WiFi.localIP() | WiFi.localIP() | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 245: | Строка 245: | ||
Примера кода: | Примера кода: | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
if (WiFi.status() == WL_CONNECTED) | if (WiFi.status() == WL_CONNECTED) | ||
{ | { | ||
Строка 256: | Строка 256: | ||
Пример данных, которые могут быть показаны в мониторе порта: | Пример данных, которые могут быть показаны в мониторе порта: | ||
<syntaxhighlight lang="bash | <syntaxhighlight lang="bash"> | ||
Connected, IP address: 192.168.1.10 | Connected, IP address: 192.168.1.10 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 264: | Строка 264: | ||
Извлечение информации о маске посети из стационарного интерфейса [[ESP8266]]. | Извлечение информации о маске посети из стационарного интерфейса [[ESP8266]]. | ||
<syntaxhighlight lang="c | <syntaxhighlight lang="c"> | ||
WiFi.subnetMask() | WiFi.subnetMask() | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 272: | Строка 272: | ||
Пример кода: | Пример кода: | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
Serial.print("Subnet mask: "); | Serial.print("Subnet mask: "); | ||
// "Маска подсети: " | // "Маска подсети: " | ||
Строка 280: | Строка 280: | ||
Пример данных, которые могут быть показаны в мониторе порта: | Пример данных, которые могут быть показаны в мониторе порта: | ||
<syntaxhighlight lang="bash | <syntaxhighlight lang="bash"> | ||
Subnet mask: 255.255.255.0 | Subnet mask: 255.255.255.0 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 288: | Строка 288: | ||
Извлечение данных об [[IP-адрес]]е шлюза. | Извлечение данных об [[IP-адрес]]е шлюза. | ||
<syntaxhighlight lang="c | <syntaxhighlight lang="c"> | ||
WiFi.gatewayIP() | WiFi.gatewayIP() | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 294: | Строка 294: | ||
Пример кода: | Пример кода: | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
Serial.printf("Gataway IP: %s\n", WiFi.gatewayIP().toString().c_str()); | Serial.printf("Gataway IP: %s\n", WiFi.gatewayIP().toString().c_str()); | ||
// "IP-адрес шлюза: " | // "IP-адрес шлюза: " | ||
Строка 301: | Строка 301: | ||
Пример данных, которые могут быть показаны в мониторе порта: | Пример данных, которые могут быть показаны в мониторе порта: | ||
<syntaxhighlight lang="bash | <syntaxhighlight lang="bash"> | ||
Gataway IP: 192.168.1.9 | Gataway IP: 192.168.1.9 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 309: | Строка 309: | ||
Извлечение данных об [[IP-адрес]]ах [[DNS-сервер]]ов. | Извлечение данных об [[IP-адрес]]ах [[DNS-сервер]]ов. | ||
<syntaxhighlight lang="c | <syntaxhighlight lang="c"> | ||
WiFi.dnsIP(dns_no) | WiFi.dnsIP(dns_no) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 317: | Строка 317: | ||
Примера кода: | Примера кода: | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
Serial.print("DNS #1, #2 IP: "); | Serial.print("DNS #1, #2 IP: "); | ||
// "IP-адреса первого и второго DNS-серверов: " | // "IP-адреса первого и второго DNS-серверов: " | ||
Строка 328: | Строка 328: | ||
Пример данных, которые могут быть показаны в мониторе порта: | Пример данных, которые могут быть показаны в мониторе порта: | ||
<syntaxhighlight lang="bash | <syntaxhighlight lang="bash"> | ||
DNS #1, #2 IP: 62.179.1.60, 62.179.1.61 | DNS #1, #2 IP: 62.179.1.60, 62.179.1.61 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 336: | Строка 336: | ||
Извлечение данных об имени хоста, которое [[DNS-сервер]] присвоил станции [[ESP8266]]. | Извлечение данных об имени хоста, которое [[DNS-сервер]] присвоил станции [[ESP8266]]. | ||
<syntaxhighlight lang="c | <syntaxhighlight lang="c"> | ||
WiFi.hostname() | WiFi.hostname() | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 343: | Строка 343: | ||
Но имя хоста можно поменять, использую следующую функцию: | Но имя хоста можно поменять, использую следующую функцию: | ||
<syntaxhighlight lang="c | <syntaxhighlight lang="c"> | ||
WiFi.hostname(aHostname) | WiFi.hostname(aHostname) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 351: | Строка 351: | ||
Пример кода: | Пример кода: | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
Serial.printf("Default hostname: %s\n", WiFi.hostname().c_str()); | Serial.printf("Default hostname: %s\n", WiFi.hostname().c_str()); | ||
// "Имя хоста по умолчанию: " | // "Имя хоста по умолчанию: " | ||
Строка 361: | Строка 361: | ||
Пример данных, которые могут быть показаны в мониторе порта: | Пример данных, которые могут быть показаны в мониторе порта: | ||
<syntaxhighlight lang="bash | <syntaxhighlight lang="bash"> | ||
Default hostname: ESP_081117 | Default hostname: ESP_081117 | ||
New hostname: Station_Tester_02 | New hostname: Station_Tester_02 | ||
Строка 370: | Строка 370: | ||
Возвращает статус [[WiFi]]-соединения. | Возвращает статус [[WiFi]]-соединения. | ||
<syntaxhighlight lang="c | <syntaxhighlight lang="c"> | ||
WiFi.status() | WiFi.status() | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 385: | Строка 385: | ||
Пример кода: | Пример кода: | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
#include <ESP8266WiFi.h> | #include <ESP8266WiFi.h> | ||
Строка 415: | Строка 415: | ||
Пример данных, которые могут быть показаны в мониторе порта: | Пример данных, которые могут быть показаны в мониторе порта: | ||
<syntaxhighlight lang="bash | <syntaxhighlight lang="bash"> | ||
Connection status: 6 | Connection status: 6 | ||
Connecting to sensor-net | Connecting to sensor-net | ||
Строка 426: | Строка 426: | ||
Подробное описание статусов 3 и 6 можно посмотреть в заголовочном файле '''«wl_definitions.h»''': | Подробное описание статусов 3 и 6 можно посмотреть в заголовочном файле '''«wl_definitions.h»''': | ||
<syntaxhighlight lang="c | <syntaxhighlight lang="c"> | ||
3 - WL_CONNECTED | 3 - WL_CONNECTED | ||
6 - WL_DISCONNECTED | 6 - WL_DISCONNECTED | ||
Строка 437: | Строка 437: | ||
Возвращает название [[WiFi]]-сети или [[SSID]] (от '''«service set identifier»''', что значит '''«идентификатор служебного устройства»'''). | Возвращает название [[WiFi]]-сети или [[SSID]] (от '''«service set identifier»''', что значит '''«идентификатор служебного устройства»'''). | ||
<syntaxhighlight lang="c | <syntaxhighlight lang="c"> | ||
WiFi.SSID() | WiFi.SSID() | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 445: | Строка 445: | ||
Пример кода: | Пример кода: | ||
<syntaxhighlight lang="c | <syntaxhighlight lang="c"> | ||
Serial.printf("SSID: %s\n", WiFi.SSID().c_str()); | Serial.printf("SSID: %s\n", WiFi.SSID().c_str()); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 451: | Строка 451: | ||
Пример данных, которые могут быть показаны в мониторе порта: | Пример данных, которые могут быть показаны в мониторе порта: | ||
<syntaxhighlight lang="bash | <syntaxhighlight lang="bash"> | ||
SSID: sensor-net | SSID: sensor-net | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 459: | Строка 459: | ||
Возвращает [[PSK]] (от '''«pre-shared key»''', т.е. '''«предварительно выданный ключ»'''), привязанный к [[WiFi]]-сети. | Возвращает [[PSK]] (от '''«pre-shared key»''', т.е. '''«предварительно выданный ключ»'''), привязанный к [[WiFi]]-сети. | ||
<syntaxhighlight lang="c | <syntaxhighlight lang="c"> | ||
WiFi.psk() | WiFi.psk() | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 469: | Строка 469: | ||
Возвращает [[MAC-адрес]] точки доступа, к которой подключен модуль [[ESP8266]]. Этот адрес называют, как правило, [[BSSID]] (от '''«basic service set identifier»''', что значит '''«идентификатор базового служебного устройства»'''). | Возвращает [[MAC-адрес]] точки доступа, к которой подключен модуль [[ESP8266]]. Этот адрес называют, как правило, [[BSSID]] (от '''«basic service set identifier»''', что значит '''«идентификатор базового служебного устройства»'''). | ||
<syntaxhighlight lang="c | <syntaxhighlight lang="c"> | ||
WiFi.BSSID() | WiFi.BSSID() | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 477: | Строка 477: | ||
Ниже – альтернативная версия этой функции, у которого возвращаемое значение имеет тип String. | Ниже – альтернативная версия этой функции, у которого возвращаемое значение имеет тип String. | ||
<syntaxhighlight lang="c | <syntaxhighlight lang="c"> | ||
WiFi.BSSIDstr() | WiFi.BSSIDstr() | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 483: | Строка 483: | ||
Пример кода: | Пример кода: | ||
<syntaxhighlight lang="c | <syntaxhighlight lang="c"> | ||
Serial.printf("BSSID: %s\n", WiFi.BSSIDstr().c_str()); | Serial.printf("BSSID: %s\n", WiFi.BSSIDstr().c_str()); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 489: | Строка 489: | ||
Пример данных, которые могут быть показаны в мониторе порта: | Пример данных, которые могут быть показаны в мониторе порта: | ||
<syntaxhighlight lang="bash | <syntaxhighlight lang="bash"> | ||
BSSID: 00:1A:70:DE:C1:68 | BSSID: 00:1A:70:DE:C1:68 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 497: | Строка 497: | ||
Возвращает мощность сигнала [[WiFI]]-сети, которую называют, как правило, [[RSSI]] (от '''«received signal strength indication»''', что значит '''«показатель уровня принимающего сигнала»'''). | Возвращает мощность сигнала [[WiFI]]-сети, которую называют, как правило, [[RSSI]] (от '''«received signal strength indication»''', что значит '''«показатель уровня принимающего сигнала»'''). | ||
<syntaxhighlight lang="c | <syntaxhighlight lang="c"> | ||
WiFi.RSSI() | WiFi.RSSI() | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 505: | Строка 505: | ||
Пример кода: | Пример кода: | ||
<syntaxhighlight lang="c | <syntaxhighlight lang="c"> | ||
Serial.printf("RSSI: %d dBm\n", WiFi.RSSI()); | Serial.printf("RSSI: %d dBm\n", WiFi.RSSI()); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 511: | Строка 511: | ||
Пример данных, которые могут быть показаны в мониторе порта: | Пример данных, которые могут быть показаны в мониторе порта: | ||
<syntaxhighlight lang="bash | <syntaxhighlight lang="bash"> | ||
RSSI: -68 dBm | RSSI: -68 dBm | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 523: | Строка 523: | ||
Функция beginWPSConfig() позволяет подключаться к [[WiFi]]-сети при помощи стандарта [[WPS]] (от '''«WiFi protected setup»''', что значит '''«защищенная настройка WiFi»'''). На данный момент ('''SDK 1.5.4''') поддерживается только режим '''WPS_TYPE_PBC''' (настройка нажатием одной кнопки). | Функция beginWPSConfig() позволяет подключаться к [[WiFi]]-сети при помощи стандарта [[WPS]] (от '''«WiFi protected setup»''', что значит '''«защищенная настройка WiFi»'''). На данный момент ('''SDK 1.5.4''') поддерживается только режим '''WPS_TYPE_PBC''' (настройка нажатием одной кнопки). | ||
<syntaxhighlight lang="c | <syntaxhighlight lang="c"> | ||
WiFi.beginWPSConfig() | WiFi.beginWPSConfig() | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 531: | Строка 531: | ||
Пример кода: | Пример кода: | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
#include <ESP8266WiFi.h> | #include <ESP8266WiFi.h> | ||
Строка 563: | Строка 563: | ||
Пример данных, которые могут быть показаны в мониторе порта: | Пример данных, которые могут быть показаны в мониторе порта: | ||
<syntaxhighlight lang="bash | <syntaxhighlight lang="bash"> | ||
Wi-Fi mode set to WIFI_STA | Wi-Fi mode set to WIFI_STA | ||
Begin WPS (press WPS button on your router) ... Success | Begin WPS (press WPS button on your router) ... Success | ||
Строка 578: | Строка 578: | ||
Первая – для того, чтобы запустить режим [[Smart Config]], который начнет прослушивать специальные пакеты, содержащие [[SSID]] и пароль к точке доступа. В зависимости от результата функция вернет true или false. | Первая – для того, чтобы запустить режим [[Smart Config]], который начнет прослушивать специальные пакеты, содержащие [[SSID]] и пароль к точке доступа. В зависимости от результата функция вернет true или false. | ||
<syntaxhighlight lang="c | <syntaxhighlight lang="c"> | ||
beginSmartConfig() | beginSmartConfig() | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 584: | Строка 584: | ||
Вторая – для запроса статуса [[Smart Config]], чтобы понять, когда остановить настройку. Возвращает true или false. | Вторая – для запроса статуса [[Smart Config]], чтобы понять, когда остановить настройку. Возвращает true или false. | ||
<syntaxhighlight lang="c | <syntaxhighlight lang="c"> | ||
smartConfigDone() | smartConfigDone() | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 590: | Строка 590: | ||
Третья – для остановки [[Smart Config]]. Очищает буфер, занятый beginSmartConfig(). В зависимости от результата возвращает true или false. | Третья – для остановки [[Smart Config]]. Очищает буфер, занятый beginSmartConfig(). В зависимости от результата возвращает true или false. | ||
<syntaxhighlight lang="c | <syntaxhighlight lang="c"> | ||
stopSmartConfig() | stopSmartConfig() | ||
</syntaxhighlight> | </syntaxhighlight> |
Версия от 19:56, 23 мая 2023
![]() |
Черновик |
Класс станции в библиотеке ESP8266WiFi[1]
Количество функций, которые ESP8266 может выполнять в стационарном режиме, гораздо больше, чем есть в оригинальной библиотеке для IDE Arduino. Поэтому вместо дополнения первоначальной документации мы решили написать новую с нуля.
Описание класса станции будет разбито на четыре части. В первой будут описаны функции для подключения к точке доступа. Во второй – функции для управления подключением вроде reconnect() и isConnected(). Третья – функции для получения информации о подключении вроде MAC-адреса или IP-адреса. Наконец, четвертая – это альтернативные функции для подключения вроде стандарта Wi-Fi Protected Setup (WPS).
К каждой функции прилагается описание и фрагменты кода, демонстрирующие ее использование. Другие примеры использования функций, входящих в класс станции, ищите по [ссылка этой ссылке].
Подключение
Переключение ESP8266 в режим станции выполняется при помощи функции begin(). Параметрами для этой функции служат SSID и пароль к ней, чтобы чип можно было подключить к определенной точке доступа.
WiFi.begin(ssid, password)
По умолчанию, если ESP8266 будет отключен от WiFi-сети, то потом снова попробует к ней подключиться. Писать для этого отдельный код не нужно. Имитировать отключение можно, к примеру, просто сбросив точку доступа. ESP8266 сообщит об отключении, а потом попробует автоматически подключиться.
begin()
В библиотеке ESP8266WiFi представлено несколько вариантов функции begin(). Процесс совмещения нескольких функций в одной называют «перегрузкой функции». Один вариант был показан выше – это WiFi.begin(ssid, password). Перегрузка дает гибкость в количестве и типе параметров, задаваемых в функции.
Самый простой вариант функции begin() – это...
WiFi.begin()
Вызов этой функции скомандует ESP8266 переключиться в режим станции и подключиться к последней использованной точке доступа на основе данных, сохраненных во flash-памяти.
Ниже – синтаксис еще одного варианта функции begin() со всеми возможными параметрами:
WiFi.begin(ssid, password, channel, bssid, connect)
Параметр ssid – символьная строка, содержащая SSID точки доступа, к которой мы хотим подключиться (может содержать не более 32 символов). Параметр password – это пароль к точке доступа в виде символьной строки, которая может содержать от 8 до 64 символов. Параметр channel – канал точки доступа; на тот случай, если вы хотите работать через специальный канал (в противном случае этот параметр нужно проигнорировать). Параметр bssid – MAC-адрес точки доступа (тоже опционально). Параметр connect – это параметр с булевым значением; если задать в нем false, это скомандует модулю сохранить другие параметры, не подключаясь к точке доступа.
config()
Отключает DHCP-клиент (от «dynamic host configuration protocol», что значит «протокол динамической настройки узла») и выставляет IP-настройки станции на пользовательские значения. Эти IP-настройки, в отличие от настроек DHCP, будут статическими.
WiFi.config(local_ip, gateway, subnet, dns1, dns2)
При успешном изменении настроек функция вернет true. Если настройки задать нельзя (например, если чип не переключен в режим станции или станции + точки доступа), функция вернет false.
В функции можно указать следующую информацию:
- local_ip – IP-адрес для стационарного интерфейса ESP8266
- gateway – IP-адрес шлюза (роутера) для доступа к внешним сетям
- subnet – маска подсети, диапазон IP-адресов в локальной сети
- dns1, dns2 – опциональные параметры для IP-адресов DNS-серверов, которые хранят директории доменных имен (вроде www.google.co.uk) и преобразовывают их в IP-адреса
Пример:
#include <ESP8266WiFi.h>
const char* ssid = "********";
const char* password = "********";
IPAddress staticIP(192,168,1,22);
IPAddress gateway(192,168,1,9);
IPAddress subnet(255,255,255,0);
void setup(void)
{
Serial.begin(115200);
Serial.println();
Serial.printf("Connecting to %s\n", ssid); // "Подключение к "
WiFi.begin(ssid, password);
WiFi.config(staticIP, gateway, subnet);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println();
Serial.print("Connected, IP address: "); // "Подключено, IP-адрес: "
Serial.println(WiFi.localIP());
}
void loop() {}
Пример данных, которые могут быть показаны в мониторе порта:
Connecting to sensor-net
.
Connected, IP address: 192.168.1.22
Станции с статическими IP-адресами, как правило, быстрее подключаются к сети. У кода выше подключение занимает примерно 500 мс (в мониторе порта показана только одна точка). Дело в том, что получение IP-настроек при помощи DHCP-клиента отнимает время, а в нашем случае этот шаг попросту пропущен. Если во всех трех параметрах (local_ip, gateway и subnet) указать «0.0.0.0», это снова активирует DHCP. Снова подключитесь к устройству, чтобы получить новые IP-адреса.
Управление подключением
reconnect()
Повторное подключение станции к точке доступа. Чип отключается от точки доступа, а затем инициирует с нею повторное подключение.
WiFi.reconnect()
Примечания:
- Станция должна быть уже подключена к точке доступа. Если не подключена, функция ничего не сделает и вернет false.
- Если функция вернула true, это значит, что последовательность действий для подключения была начата успешно. После этого пользователь должен проверить статус подключения и подождать, пока функция не вернет WL_CONNECTED:
WiFi.reconnect();
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
disconnect()
Выставляет текущие SSID и пароль на null, а затем отключает станцию от точки доступа.
WiFi.disconnect(wifioff)
Параметр wifioff – опциональное булево значение. Если выставить в нем true, это выключит режим станции.
isConnected()
Возвращает true, если станция подключена к точке доступа, или false, если не подключена.
WiFi.isConnected()
setAutoConnect()
Настраивает чип, чтобы он при включении питания автоматически подключался к последней использованной точке доступа.
WiFi.setAutoConnect(autoConnect)
Параметр autoConnect – опциональный. Если выставить в нем false, автоматическое подключение будет деактивировано. Если пропустить его или выставить на true, автоматическое подключение будет активировано.
getAutoConnect()
Это функция-компаньон для setAutoConnect(). Она возвращает true, если у модуля активировано автоматическое подключение к последней использованной точке доступа, и false, если деактивировано.
WiFi.getAutoConnect()
setAutoReconnect()
Задает, сделает ли модуль, будучи отключенным, попытку повторного подключения к точке доступа.
WiFi.setAutoReconnect(autoReconnect)
Если параметр autoReconnect выставлен на true, модуль сделает повторное подключение, а если false, то нет.
Примечание: Если вызвать функцию setAutoReconnect() при отключенном модуле, он не подключится к точке доступа. В таком случае используйте reconnect().
waitForConnectResult()
Ждет, когда модуль подключится к точке доступа. Для вызова этой функции нужно, чтобы модуль был в режиме станции или станции + точки доступа.
WiFi.waitForConnectResult()
Эта функция может вернуть следующие значения:
- WL_CONNECTED – если подключение выполнено успешно
- WL_NO_SSID_AVAIL – если заданный SSID находится вне зоны доступа
- WL_CONNECT_FAILED – если неправильный пароль
- WL_IDLE_STATUS – когда WiFi-сеть переключается с одного статуса на другой
- WL_DISCONNECTED – если модуль не находится в режиме станции
Получение информации о настройках
macAddress()
Извлекает данные о MAC-адресе стационарного интерфейса ESP8266.
WiFi.macAddress(mac)
Параметр mac – это указатель на место в памяти (массив uint8_t размером в 6 элементов), где хранится MAC-адрес. Такое же значение указателя возвращается самой функцией.
Пример кода:
if (WiFi.status() == WL_CONNECTED)
{
uint8_t macAddr[6];
WiFi.macAddress(macAddr);
Serial.printf("Connected, mac address: %02x:%02x:%02x:%02x:%02x:%02x\n", macAddr[0], macAddr[1], macAddr[2], macAddr[3], macAddr[4], macAddr[5]);
// "Подключено, MAC-адрес: "
}
Пример данных, которые могут быть показаны в мониторе порта:
Mac address: 5C:CF:7F:08:11:17
Если вы любите работать с указателями, у этой функции есть альтернативная версия. Вместо указателя она возвращает отформатированную строку (тип данных String), содержащую тот же MAC-адрес.
WiFi.macAddress()
Пример кода:
if (WiFi.status() == WL_CONNECTED)
{
Serial.printf("Connected, mac address: %s\n", WiFi.macAddress().c_str());
// "Подключено, MAC-адрес: "
}
localIP()
Извлечение IP-адреса стационарного интерфейса ESP8266.
WiFi.localIP()
Тип возвращаемого значения – IPAddress, описанный в этом заголовочном файле. Есть несколько способов для того, чтобы показать этот тип данных в мониторе порта. Примеры их использования показаны ниже – в разделах, описывающих функции subnetMask(), gateway() и dnsIP(), которые тоже возвращают данные типа IPAddress.
Примера кода:
if (WiFi.status() == WL_CONNECTED)
{
Serial.print("Connected, IP address: ");
// "Подключено, MAC-адрес: "
Serial.println(WiFi.localIP());
}
Пример данных, которые могут быть показаны в мониторе порта:
Connected, IP address: 192.168.1.10
subnetMask()
Извлечение информации о маске посети из стационарного интерфейса ESP8266.
WiFi.subnetMask()
Чтобы извлечь данные о маске подсети, модуль должен быть подключен к точке доступа.
Пример кода:
Serial.print("Subnet mask: ");
// "Маска подсети: "
Serial.println(WiFi.subnetMask());
Пример данных, которые могут быть показаны в мониторе порта:
Subnet mask: 255.255.255.0
gatewayIP()
Извлечение данных об IP-адресе шлюза.
WiFi.gatewayIP()
Пример кода:
Serial.printf("Gataway IP: %s\n", WiFi.gatewayIP().toString().c_str());
// "IP-адрес шлюза: "
Пример данных, которые могут быть показаны в мониторе порта:
Gataway IP: 192.168.1.9
dnsIP()
Извлечение данных об IP-адресах DNS-серверов.
WiFi.dnsIP(dns_no)
При помощи параметра dns_no указывается то, IP-адрес какого DNS-сервера вам нужен. Допустимые значения для этого параметра – «0», «1» или никакого. Если параметр не указать, функция вернет IP-адрес первого DNS-сервера.
Примера кода:
Serial.print("DNS #1, #2 IP: ");
// "IP-адреса первого и второго DNS-серверов: "
WiFi.dnsIP().printTo(Serial);
Serial.print(", ");
WiFi.dnsIP(1).printTo(Serial);
Serial.println();
Пример данных, которые могут быть показаны в мониторе порта:
DNS #1, #2 IP: 62.179.1.60, 62.179.1.61
hostname()
Извлечение данных об имени хоста, которое DNS-сервер присвоил станции ESP8266.
WiFi.hostname()
Эта функция возвращает данные типа String. По умолчанию имя хоста выражено в формате «ESP_24xMAC», где «24xMAC» – это последние 24 бита MAC-адреса модуля. Но имя хоста можно поменять, использую следующую функцию:
WiFi.hostname(aHostname)
Данные в параметре aHostname могут быть типа char*, const char* или String. Максимальный размер для имени хоста – 32 символа. В зависимости от результата функция возвращает false или true. Например, если ограничение в 32 символа будет превышено, функция вернет false, не присвоив ESP8266 нового имени хоста.
Пример кода:
Serial.printf("Default hostname: %s\n", WiFi.hostname().c_str());
// "Имя хоста по умолчанию: "
WiFi.hostname("Station_Tester_02");
Serial.printf("New hostname: %s\n", WiFi.hostname().c_str());
// "Новое имя хоста: "
Пример данных, которые могут быть показаны в мониторе порта:
Default hostname: ESP_081117
New hostname: Station_Tester_02
status()
Возвращает статус WiFi-соединения.
WiFi.status()
Эта функция может вернуть следующие значения:
- WL_CONNECTED – если подключение выполнено успешно
- WL_NO_SSID_AVAIL – если заданный SSID находится вне зоны доступа
- WL_CONNECT_FAILED – если неправильный пароль
- WL_IDLE_STATUS – когда WiFi-сеть переключается с одного статуса на другой
- WL_DISCONNECTED – если модуль не находится в режиме станции
Возвращаемый тип данных – это wl_status_t, заданный в этом заголовочном файле.
Пример кода:
#include <ESP8266WiFi.h>
void setup(void)
{
Serial.begin(115200);
Serial.printf("Connection status: %d\n", WiFi.status());
// "Статус подключения: "
Serial.printf("Connecting to %s\n", ssid);
// "Подключение к "
WiFi.begin(ssid, password);
Serial.printf("Connection status: %d\n", WiFi.status());
// "Статус подключения: "
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.printf("\nConnection status: %d\n", WiFi.status());
// "Статус подключения: "
Serial.print("Connected, IP address: ");
// "Подключено, IP-адрес: "
Serial.println(WiFi.localIP());
}
void loop() {}
Пример данных, которые могут быть показаны в мониторе порта:
Connection status: 6
Connecting to sensor-net
Connection status: 6
......
Connection status: 3
Connected, IP address: 192.168.1.10
Подробное описание статусов 3 и 6 можно посмотреть в заголовочном файле «wl_definitions.h»:
3 - WL_CONNECTED
6 - WL_DISCONNECTED
Диагностическая информация выше означает, что модуль изначально был отключен от сети, поэтому скетч возвращает статус 6 - WL_DISCONNECTED. Затем модуль был отключен сразу же после вызова функции WiFi.begin(ssid, password). Спустя 3 секунды (об этом можно судить по количеству точек, каждая из которых означает 500 мс) модуль, наконец, подключается к сети и возвращает статус 3 - WL_CONNECTED.
SSID()
Возвращает название WiFi-сети или SSID (от «service set identifier», что значит «идентификатор служебного устройства»).
WiFi.SSID()
Тип возвращаемого значения – String.
Пример кода:
Serial.printf("SSID: %s\n", WiFi.SSID().c_str());
Пример данных, которые могут быть показаны в мониторе порта:
SSID: sensor-net
psk()
Возвращает PSK (от «pre-shared key», т.е. «предварительно выданный ключ»), привязанный к WiFi-сети.
WiFi.psk()
Возвращаемое значение имеет тип данных String.
BSSID()
Возвращает MAC-адрес точки доступа, к которой подключен модуль ESP8266. Этот адрес называют, как правило, BSSID (от «basic service set identifier», что значит «идентификатор базового служебного устройства»).
WiFi.BSSID()
Возвращает указатель к месту в памяти (массив uint8_t размером в 6 элементов), куда сохранен BSSID.
Ниже – альтернативная версия этой функции, у которого возвращаемое значение имеет тип String.
WiFi.BSSIDstr()
Пример кода:
Serial.printf("BSSID: %s\n", WiFi.BSSIDstr().c_str());
Пример данных, которые могут быть показаны в мониторе порта:
BSSID: 00:1A:70:DE:C1:68
RSSI()
Возвращает мощность сигнала WiFI-сети, которую называют, как правило, RSSI (от «received signal strength indication», что значит «показатель уровня принимающего сигнала»).
WiFi.RSSI()
RSSI – это значение в дБм (децибел/милливатт). Тип возвращаемого значения – int32_t.
Пример кода:
Serial.printf("RSSI: %d dBm\n", WiFi.RSSI());
Пример данных, которые могут быть показаны в мониторе порта:
RSSI: -68 dBm
Альтернативные функции для подключения к WiFi
SDK ESP8266 предусматривает альтернативные методы для подключения станции ESP8266 к точке доступа. Аддон ESP8266 для IDE Arduino поддерживает два из них – WPS и Smart Config.
WPS
Функция beginWPSConfig() позволяет подключаться к WiFi-сети при помощи стандарта WPS (от «WiFi protected setup», что значит «защищенная настройка WiFi»). На данный момент (SDK 1.5.4) поддерживается только режим WPS_TYPE_PBC (настройка нажатием одной кнопки).
WiFi.beginWPSConfig()
В зависимости от результата функция вернет true или false (возвращаемое значение имеет тип boolean).
Пример кода:
#include <ESP8266WiFi.h>
void setup(void)
{
Serial.begin(115200);
Serial.println();
Serial.printf("Wi-Fi mode set to WIFI_STA %s\n", WiFi.mode(WIFI_STA) ? "" : "Failed!");
// "WiFi переключен в режим станции" :
// "Переключиться не удалось!"
Serial.print("Begin WPS (press WPS button on your router) ... ");
// "Запуск WPS (нажмите кнопку WPS на роутере) ... "
Serial.println(WiFi.beginWPSConfig() ? "Success" : "Failed");
// "Успешно" :
// "Запустить WPS не удалось"
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println();
Serial.print("Connected, IP address: ");
// "Подключено, IP-адрес: "
Serial.println(WiFi.localIP());
}
void loop() {}
Пример данных, которые могут быть показаны в мониторе порта:
Wi-Fi mode set to WIFI_STA
Begin WPS (press WPS button on your router) ... Success
.........
Connected, IP address: 192.168.1.102
Smart Config
Smart Config (можно перевести как «умная настройка») – это тип подключения модуля ESP8266 к точке доступа, который выполняется путем прослушки специальных пакетов, содержащих SSID и пароль. Для этого у мобильного устройства или компьютера должен быть функционал для трансляции зашифрованных SSID и пароля.
Для Smart Config в библиотеке ESP8266WiFi есть три функции.
Первая – для того, чтобы запустить режим Smart Config, который начнет прослушивать специальные пакеты, содержащие SSID и пароль к точке доступа. В зависимости от результата функция вернет true или false.
beginSmartConfig()
Вторая – для запроса статуса Smart Config, чтобы понять, когда остановить настройку. Возвращает true или false.
smartConfigDone()
Третья – для остановки Smart Config. Очищает буфер, занятый beginSmartConfig(). В зависимости от результата возвращает true или false.
stopSmartConfig()
Более подробно о Smart Config читайте в документации к протоколу ESP-TOUCH, который можно скачать по этой ссылке.