Главная chevron_right Функции chevron_right Wi-Fi chevron_right WiFi Network

WiFi Network

Класс WiFi управляет Wi-Fi-подключением на Arduino: инициализация через WiFi.begin(), статический IP через WiFi.config(), сканирование сетей и получение данных о соединении.

Полная статья

Класс Wi-Fi

WiFi — основной класс библиотеки Wi-Fi для Arduino. Он отвечает за инициализацию сетевых параметров, подключение к точке доступа и отключение от неё, а также предоставляет набор вспомогательных функций для получения информации о сети.

WiFi.begin()

Описание

Инициализирует Wi-Fi-модуль и запускает подключение к сети. Это первая функция, которую нужно вызвать в скетче, прежде чем работать с сетью. Она возвращает текущий статус соединения, поэтому её результат удобно проверять в цикле ожидания.

Синтаксис

WiFi.begin(ssid);
WiFi.begin(ssid, pass);
WiFi.begin(ssid, keyIndex, key);

Параметры

  • ssid — имя сети Wi-Fi (SSID), к которой нужно подключиться.
  • keyIndex — индекс ключа для WEP-сетей (от 0 до 3): такие сети могут хранить до четырёх ключей одновременно, и этот параметр указывает, какой из них использовать.
  • ключ — шестнадцатеричная строка, используемая как ключ безопасности в WEP-сетях.
  • pass — пароль для WPA/WPA2-сетей в виде обычной строки.

Возвращает

WL_CONNECTED — если подключение установлено; WL_IDLE_STATUS — если модуль включён, но к сети не подключён.

Пример

#include <WiFi.h>

//SSID вашей сети
char ssid[] = "yourNetwork";
//пароль вашей WPA-сети
char pass[] = "secretPassword";

void setup()
{
 WiFi.begin(ssid, pass);
}

void loop () {}

---

WiFi.disconnect()

Описание

Отключает WiFi Shield от текущей Wi-Fi-сети. Используйте эту функцию, когда нужно явно разорвать соединение, например перед переходом в режим энергосбережения или перед подключением к другой сети.

Синтаксис

WiFi.disconnect();

Параметры

Нет.

Возвращает

Ничего.

---

WiFi.config()

Описание

WiFi.config() позволяет задать статический IP-адрес и при необходимости вручную указать адреса DNS-сервера, шлюза и маску подсети. По умолчанию WiFi.begin() настраивает модуль через DHCP — WiFi.config() отключает это поведение и фиксирует сетевые параметры.

Если вызвать WiFi.config() до WiFi.begin(), то begin() сразу применит указанные адреса. Если вызвать WiFi.config() после WiFi.begin(), модуль сначала инициализируется в режиме DHCP, а затем переключится на статические параметры.

Статический IP удобен, когда нужно обращаться к устройству по фиксированному адресу — например, при создании веб-сервера на Arduino.

Синтаксис

WiFi.config(ip);
WiFi.config(ip, dns);
WiFi.config(ip, dns, gateway);
WiFi.config(ip, dns, gateway, subnet);

Параметры

  • ip — IP-адрес устройства (массив из 4 байт).
  • DNS — адрес DNS-сервера.
  • шлюз — IP-адрес сетевого шлюза (массив из 4 байт); необязательный параметр, по умолчанию совпадает с ip, но с последним октетом 1.
  • подсеть — маска подсети (массив из 4 байт); необязательный параметр, по умолчанию 255.255.255.0.

Возвращает

Ничего.

Пример

This example shows how to set the static IP address, 192.168.0.177, of the LAN network to the WiFi shield:

#include <SPI.h>
#include <WiFi.h>

// IP-адрес шилда:
IPAddress ip(192, 168, 0, 177);    

char ssid[] = "yourNetwork";    // SSID вашей сети (имя)
char pass[] = "secretPassword"; // пароль сети (для WPA или ключ для WEP)

int status = WL_IDLE_STATUS;

void setup()
{  
  // Инициализация serial и ожидание открытия порта:
  Serial.begin(9600);
  while (!Serial) {
    ; // ожидание подключения serial-порта. Нужно только для Leonardo
  }

  // проверка наличия шилда:
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println("WiFi shield not present");
    while(true);  // не продолжать
  }

  WiFi.config(ip);

  // попытка подключения к WiFi-сети:
  while ( status != WL_CONNECTED) {
    Serial.print("Attempting to connect to SSID: ");
    Serial.println(ssid);
    // Подключение к WPA/WPA2-сети. Измените эту строку при использовании открытой сети или WEP:    
    status = WiFi.begin(ssid, pass);

    // ожидание подключения 10 секунд:
    delay(10000);
  }

  // вывод IP-адреса WiFi-шилда:
  Serial.print("IP Address: ");
  Serial.println(WiFi.localIP());
}

void loop () {}

---

WiFi.setDNS()

Описание

WiFi.setDNS() задаёт адреса DNS-серверов отдельно от остальных сетевых параметров. Это полезно, когда IP-адрес получается через DHCP, но DNS-серверы нужно переопределить вручную — например, использовать публичный DNS вместо предоставленного провайдером.

Синтаксис

WiFi.setDNS(dns_server1)
WiFi.setDNS(dns_server1, dns_server2)

Параметры

  • dns_server1 — IP-адрес основного DNS-сервера.
  • dns_server2 — IP-адрес резервного DNS-сервера.

Возвращает

Ничего.

Пример

This example shows how to set the Google DNS (8.8.8.8). You can set it as an object IPAddress.

#include <SPI.h>
#include <WiFi.h>

// IP-адрес шилда:
IPAddress dns(8, 8, 8, 8);  // DNS Google  

char ssid[] = "yourNetwork";    // SSID вашей сети (имя)
char pass[] = "secretPassword"; // пароль сети (для WPA или ключ для WEP)

int status = WL_IDLE_STATUS;

void setup()
{  
  // Инициализация serial и ожидание открытия порта:
  Serial.begin(9600);
  while (!Serial) {
    ; // ожидание подключения serial-порта. Нужно только для Leonardo
  }

  // проверка наличия шилда:
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println("WiFi shield not present");
    while(true);  // не продолжать
  }

  // попытка подключения к WiFi-сети:
  while ( status != WL_CONNECTED) {
    Serial.print("Attempting to connect to SSID: ");
    Serial.println(ssid);
    // Подключение к WPA/WPA2-сети. Измените эту строку при использовании открытой сети или WEP:    
    status = WiFi.begin(ssid, pass);

    // ожидание подключения 10 секунд:
    delay(10000);
  }

  // вывод IP-адреса WiFi-шилда:
  WiFi.setDNS(dns);
  Serial.print("Dns configured.");
}

void loop () {
}

---

WiFi.SSID()

Описание

Возвращает SSID сети, к которой в данный момент подключён модуль, или имя конкретной сети из результатов последнего сканирования.

Синтаксис

WiFi.SSID();
WiFi.SSID(wifiAccessPoint)

Параметры

  • wifiAccessPoint — индекс сети из результатов WiFi.scanNetworks(), если нужно получить имя конкретной найденной сети.

Возвращает

Строка (String) с именем текущей сети или сети с указанным индексом.

Пример

#include <SPI.h>
#include <WiFi.h>

//SSID вашей сети
char ssid[] = "yourNetwork";
int status = WL_IDLE_STATUS;     // статус WiFi-модуля

void setup()
{
  // инициализация serial:
  Serial.begin(9600);

  // сканирование существующих сетей:
  Serial.println("Scanning available networks...");
  scanNetworks();

  // попытка подключения с шифрованием WEP:
  Serial.println("Attempting to connect to open network...");
  status = WiFi.begin(ssid);

  Serial.print("SSID: ");
  Serial.println(ssid);

}

void loop () {}

void scanNetworks() {
  // сканирование ближайших сетей:
  Serial.println("** Scan Networks **");
  byte numSsid = WiFi.scanNetworks();

  // вывод списка найденных сетей:
  Serial.print("SSID List:");
  Serial.println(numSsid);
  // вывод номера и имени каждой найденной сети:
  for (int thisNet = 0; thisNet<numSsid; thisNet++) {
    Serial.print(thisNet);
    Serial.print(") Network: ");
    Serial.println(WiFi.SSID(thisNet));
  }
}

---

WiFi.BSSID()

Описание

Возвращает MAC-адрес маршрутизатора (точки доступа), к которому подключён модуль. Это BSSID — идентификатор конкретной точки доступа, не путайте его с MAC-адресом самой Wi-Fi-платы.

Синтаксис

WiFi.BSSID(bssid);

Параметры

  • bssid — массив из 6 байт, в который будет записан MAC-адрес.

Возвращает

Массив байтов (6 байт) с MAC-адресом маршрутизатора.

Пример

#include <WiFi.h>

//SSID вашей сети
char ssid[] = "yourNetwork";
//пароль вашей WPA-сети
char pass[] = "secretPassword";

void setup()
{
 WiFi.begin(ssid, pass);

  if ( status != WL_CONNECTED) {
    Serial.println("Couldn't get a wifi connection");
    while(true);
  }
  // если подключены — вывести информацию о соединении:
  else {
  // вывод MAC-адреса роутера, к которому подключены:
  byte bssid[6];
  WiFi.BSSID(bssid);    
  Serial.print("BSSID: ");
  Serial.print(bssid[5],HEX);
  Serial.print(":");
  Serial.print(bssid[4],HEX);
  Serial.print(":");
  Serial.print(bssid[3],HEX);
  Serial.print(":");
  Serial.print(bssid[2],HEX);
  Serial.print(":");
  Serial.print(bssid[1],HEX);
  Serial.print(":");
  Serial.println(bssid[0],HEX);
  }
}

void loop () {}

---

WiFi.RSSI()

Описание

Возвращает уровень сигнала текущего соединения или конкретной сети из результатов сканирования. Значение RSSI (Received Signal Strength Indicator) выражается в дБм и обычно находится в диапазоне от −30 (очень сильный сигнал) до −90 дБм (слабый сигнал). Чем меньше абсолютное значение, тем лучше приём.

Синтаксис

WiFi.RSSI();
WiFi.RSSI(wifiAccessPoint);

Параметры

  • wifiAccessPoint — индекс сети из результатов WiFi.scanNetworks(), если нужно узнать уровень сигнала конкретной найденной сети.

Возвращает

long — уровень сигнала в дБм.

Пример

#include <SPI.h>
#include <WiFi.h>

//SSID вашей сети
char ssid[] = "yourNetwork";
//пароль вашей WPA-сети
char pass[] = "secretPassword";

void setup()
{
 WiFi.begin(ssid, pass);

  if (WiFi.status() != WL_CONNECTED) {
    Serial.println("Couldn't get a wifi connection");
    while(true);
  }
  // если подключены — вывести информацию о соединении:
  else {
   // вывод уровня принимаемого сигнала:
  long rssi = WiFi.RSSI();
  Serial.print("RSSI:");
  Serial.println(rssi);
  }
}

void loop () {}

---

WiFi.encryptionType()

Описание

Возвращает тип шифрования текущей сети или сети с указанным индексом из результатов сканирования. Это полезно при анализе доступных сетей — например, чтобы отфильтровать незащищённые точки доступа.

Синтаксис

WiFi.encryptionType();
WiFi.encryptionType(wifiAccessPoint);

Параметры

  • wifiAccessPoint — индекс сети из результатов WiFi.scanNetworks().

Возвращает

byte — числовой код типа шифрования:

ЗначениеТип шифрования
2TKIP (WPA)
4CCMP (WPA)
5WEP
7Нет (открытая сеть)
8AUTO

Пример

#include <SPI.h>
#include <WiFi.h>

//SSID вашей сети
char ssid[] = "yourNetwork";
//пароль вашей WPA-сети
char pass[] = "secretPassword";

void setup()
{
 WiFi.begin(ssid, pass);

  if ( status != WL_CONNECTED) {
    Serial.println("Couldn't get a wifi connection");
    while(true);
  }
  // если подключены — вывести информацию о соединении:
  else {
   // вывод типа шифрования:
  byte encryption = WiFi.encryptionType();
  Serial.print("Encryption Type:");
  Serial.println(encryption,HEX);
  }
}

void loop () {}

---

WiFi.scanNetworks()

Описание

Сканирует эфир и возвращает количество найденных Wi-Fi-сетей. После вызова этой функции можно использовать WiFi.SSID(), WiFi.RSSI() и WiFi.encryptionType() с индексом сети, чтобы получить подробную информацию о каждой из них.

Синтаксис

WiFi.scanNetworks();

Параметры

Нет.

Возвращает

byte — количество обнаруженных сетей.

Пример

#include <SPI.h>
#include <WiFi.h>

char ssid[] = "yourNetwork";  // название вашей сети

void setup() {
  Serial.begin(9600);

  int status = WiFi.begin(ssid);

  if (status != WL_CONNECTED) {
    Serial.println("Couldn't get a WiFi connection");
    while (true);
  }
  else {
    // если подключены, сканировать доступные WiFi-сети и вывести их количество:
    Serial.println("** Scan Networks **");
    byte numSsid = WiFi.scanNetworks();

    Serial.print("Number of available WiFi networks discovered:");
    Serial.println(numSsid);
  }
}

void loop() {}

---

WiFi.status()

Описание

Возвращает текущий статус Wi-Fi-соединения. Эту функцию удобно вызывать в цикле while, ожидая установления соединения, а также для диагностики — чтобы понять, почему подключение не удалось.

Синтаксис

WiFi.status();

Параметры

Нет.

Возвращает

Одна из констант статуса:

  • WL_CONNECTED — соединение с сетью установлено.
  • WL_NO_SHIELD — Wi-Fi-модуль или библиотека не обнаружены.
  • WL_IDLE_STATUS — временный статус после вызова WiFi.begin(): модуль пытается подключиться, пока не исчерпает попытки (тогда переходит в WL_CONNECT_FAILED) или не установит соединение (WL_CONNECTED).
  • WL_NO_SSID_AVAIL — указанный SSID не найден в эфире.
  • WL_SCAN_COMPLETED — сканирование сетей завершено.
  • WL_CONNECT_FAILED — все попытки подключения исчерпаны.
  • WL_CONNECTION_LOST — соединение было потеряно.
  • WL_DISCONNECTED — модуль отключён от сети.

Пример

#include <SPI.h>
#include <WiFi.h>

char ssid[] = "yourNetwork";                     // SSID вашей сети (название)
char key[] = "D0D0DEADF00DABBADEAFBEADED";       // ключ вашей сети
int keyIndex = 0;                                // индекс ключа вашей сети
int status = WL_IDLE_STATUS;                     // статус WiFi-модуля

void setup() {
  //инициализация Serial и ожидание открытия порта:
  Serial.begin(9600);
  while (!Serial) {
    ; // ожидание подключения к последовательному порту. Нужно только для Leonardo
  }

  // проверка наличия шилда:
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println("WiFi shield not present");
    // не продолжать:
    while (true);
  }

  // попытка подключиться к WiFi-сети:
  while ( status != WL_CONNECTED) {
    Serial.print("Attempting to connect to WEP network, SSID: ");
    Serial.println(ssid);
    status = WiFi.begin(ssid, keyIndex, key);

    // ожидание подключения 10 секунд:
    delay(10000);
  }

  // после подключения:
  Serial.print("You're connected to the network");
}

void loop() {
  // проверять статус подключения каждые 10 секунд:
  delay(10000);
 Serial.println(WiFi.status());
}

---

WiFi.getSocket()

Описание

Возвращает номер первого свободного сокета. Используется внутри библиотеки при создании соединений; в большинстве пользовательских скетчей вызывать эту функцию напрямую не нужно.

Синтаксис

WiFi.getSocket();

Параметры

Нет.

Возвращает

int — индекс первого доступного сокета.

---

WiFi.macAddress()

Описание

Записывает MAC-адрес самой Wi-Fi-платы в переданный массив. Это не адрес маршрутизатора — для его получения используйте WiFi.BSSID(). MAC-адрес платы уникален и не меняется; его удобно использовать как идентификатор устройства в сети.

Синтаксис

WiFi.macAddress(mac);

Параметры

  • mac — массив из 6 байт, в который будет записан MAC-адрес Wi-Fi-платы.

Возвращает

Массив из 6 байт с MAC-адресом Wi-Fi-платы.

Пример

#include <SPI.h>
#include <WiFi.h>

char ssid[] = "yourNetwork";     // название вашей сети
int status = WL_IDLE_STATUS;     // статус WiFi-модуля

byte mac[6];                     // MAC-адрес вашего WiFi-шилда

void setup()
{
 Serial.begin(9600);

 status = WiFi.begin(ssid);

 if ( status != WL_CONNECTED) {
    Serial.println("Couldn't get a wifi connection");
    while(true);
  }
  // если подключены, вывести MAC-адрес:
  else {
  WiFi.macAddress(mac);
  Serial.print("MAC: ");
  Serial.print(mac[5],HEX);
  Serial.print(":");
  Serial.print(mac[4],HEX);
  Serial.print(":");
  Serial.print(mac[3],HEX);
  Serial.print(":");
  Serial.print(mac[2],HEX);
  Serial.print(":");
  Serial.print(mac[1],HEX);
  Serial.print(":");
  Serial.println(mac[0],HEX);
  }
}

void loop () {}

---

Где применяется

  • Подключение к домашней или офисной сетиWiFi.begin() с паролем WPA/WPA2 для доступа к интернету или локальным сервисам.
  • Веб-сервер на ArduinoWiFi.config() со статическим IP позволяет всегда обращаться к устройству по одному и тому же адресу.
  • Диагностика окруженияWiFi.scanNetworks() вместе с WiFi.SSID(), WiFi.RSSI() и WiFi.encryptionType() помогают отобразить список доступных сетей и их параметры.
  • Мониторинг соединения — периодический вызов WiFi.status() позволяет обнаружить потерю связи и автоматически переподключиться.

Практические замечания

  • После вызова WiFi.begin() соединение устанавливается не мгновенно. Используйте цикл while (WiFi.status() != WL_CONNECTED) с небольшой задержкой, чтобы дождаться подключения.
  • Если WiFi.status() постоянно возвращает WL_CONNECT_FAILED или WL_NO_SSID_AVAIL, проверьте правильность SSID и пароля, а также убедитесь, что сеть находится в зоне уверенного приёма.
  • WiFi.config() нужно вызывать до WiFi.begin(), если хотите, чтобы статический IP применился сразу при инициализации.
  • RSSI, возвращаемый WiFi.RSSI(), — отрицательное число в дБм. Значения ближе к нулю означают более сильный сигнал: −50 дБм — хороший сигнал, −80 дБм и ниже — слабый.
  • Не путайте WiFi.macAddress() (MAC самой Wi-Fi-платы) и WiFi.BSSID() (MAC точки доступа, к которой подключена плата).