Как установить статический или фиксированный IP-адрес на ESP32

Как установить статический или фиксированный IP-адрес на ESP32

Если вы когда-либо пробовали запускать веб-сервер на ESP32, вы, вероятно, замечали кое-что раздражающее — каждый раз при перезагрузке ESP32 IP-адрес может измениться, в зависимости от того, что роутер решит назначить в данный момент. Это означает, что вам всегда приходится проверять монитор порта, чтобы узнать этот новый IP-адрес. Довольно хлопотно, правда?

Именно здесь на помощь приходят статические IP-адреса. Установив статический IP-адрес, вы можете обращаться к веб-серверу, используя один и тот же IP-адрес, даже после перезагрузки ESP32. Это также полезно для избежания путаницы, когда к вашей сети подключено несколько ESP32.

К счастью, как только вы разберётесь, это довольно простой и быстрый процесс — установить статический IP-адрес. Мы проведём вас шаг за шагом по настройке статического IP-адреса на вашем ESP32. Давайте начнём!

Шаг 1 – Настройка Arduino IDE

Мы будем использовать Arduino IDE для программирования ESP32, поэтому, пожалуйста, убедитесь, что у вас установлено дополнение ESP32, прежде чем продолжить:

Установка платы ESP32 в Arduino IDE

Микроконтроллер ESP32 быстро стал одной из самых популярных плат среди любителей, инженеров и людей, интересующихся Интернетом вещей (IoT)…

/lastminuteengineers/esp32-arduino-ide-tutorial/index

Шаг 2 – Подключение ESP32 к компьютеру

Используйте кабель micro-USB для подключения платы ESP32 к компьютеру.

ESP32 подключён к компьютеру с помощью USB-кабеля

Шаг 3 – Получение текущих сетевых настроек

Прежде чем устанавливать статический IP, рекомендуется проверить текущие сетевые настройки (IP, шлюз, маску подсети и DNS), назначенные вашим роутером. Эта информация поможет избежать конфликтов IP-адресов. Чтобы узнать текущий IP-адрес ESP32 и другие сетевые настройки, вам нужно загрузить следующий скетч на ESP32.

Перед этим необходимо внести одно важное изменение. Обновите следующие две переменные, указав ваш реальный SSID и пароль WiFi.

const char* ssid = "YourNetworkName";  // Enter SSID here
const char* password = "YourPassword";  //Enter Password here

После внесения этих изменений загрузите код.

#include <WiFi.h>

// Replace with your network credentials
const char* ssid = "YourNetworkName";  // Enter SSID here
const char* password = "YourPassword";  //Enter Password here

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

  Serial.print("Connecting to ");
  Serial.println(ssid);

  // Connect to Wi-Fi
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("Connected..!");

  Serial.print("Current ESP32 IP: ");
  Serial.println(WiFi.localIP());
  Serial.print("Gateway (router) IP: ");
  Serial.println(WiFi.gatewayIP());
  Serial.print("Subnet Mask: " );
  Serial.println(WiFi.subnetMask());
  Serial.print("Primary DNS: ");
  Serial.println(WiFi.dnsIP(0));
  Serial.print("Secondary DNS: ");
  Serial.println(WiFi.dnsIP(1));
}

void loop() {
}

После загрузки кода откройте монитор порта и установите скорость передачи 115200 бод. Затем нажмите кнопку EN на ESP32. Подключение к сети может занять несколько секунд, после чего текущие сетевые настройки ESP32 будут выведены в монитор порта. Запишите их.

Вывод текущих сетевых настроек ESP32 в мониторе порта

Шаг 4 – Установка статического IP-адреса

После получения текущих сетевых настроек вы можете установить статический IP-адрес.

Измените скетч ниже, включив в него конфигурацию статического IP. Вам нужно будет указать статический IP-адрес, шлюз, маску подсети и настройки DNS (необязательно).

IPAddress staticIP(192, 168, 1, 100); // ESP32 static IP
IPAddress gateway(192, 168, 1, 1);    // IP Address of your network gateway (router)
IPAddress subnet(255, 255, 255, 0);   // Subnet mask
IPAddress primaryDNS(192, 168, 1, 1); // Primary DNS (optional)
IPAddress secondaryDNS(0, 0, 0, 0);   // Secondary DNS (optional)

На основе текущих сетевых настроек выберите подходящий статический IP-адрес для вашего ESP32. Этот адрес должен находиться в той же подсети, что и ваша текущая сеть, но за пределами диапазона, который обычно назначает ваш роутер (чтобы избежать конфликтов IP-адресов).

После изменения скетча загрузите его на ESP32.

#include <WiFi.h>

// Replace with your network credentials
const char* ssid = "Your_SSID";
const char* password = "Your_PASSWORD";

// Static IP configuration
IPAddress staticIP(192, 168, 1, 100); // ESP32 static IP
IPAddress gateway(192, 168, 1, 1);    // IP Address of your network gateway (router)
IPAddress subnet(255, 255, 255, 0);   // Subnet mask
IPAddress primaryDNS(192, 168, 1, 1); // Primary DNS (optional)
IPAddress secondaryDNS(0, 0, 0, 0);   // Secondary DNS (optional)

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

  // Connect to Wi-Fi
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi...");
  }

  // Configuring static IP
  if(!WiFi.config(staticIP, gateway, subnet, primaryDNS, secondaryDNS)) {
    Serial.println("Failed to configure Static IP");
  } else {
    Serial.println("Static IP configured!");
  }

  Serial.print("ESP32 IP Address: ");
  Serial.println(WiFi.localIP());  // Print the ESP32 IP address to Serial Monitor
}

void loop() {
  // Nothing to do here
}

Шаг 6 – Тестирование

После загрузки кода на ESP32 используйте монитор порта, чтобы убедиться, что ESP32 теперь использует установленный вами статический IP-адрес.

Статический IP-адрес ESP32 настроен

Статический IP против mDNS

Хотя установка статического IP для ESP32 эффективна, стоит рассмотреть и другой подход: mDNS (Multicast DNS). Этот метод предлагает значительные преимущества по сравнению со статическим IP.

mDNS позволяет обращаться к веб-серверу, работающему на вашем ESP32, используя удобное имя хоста, например «esp32.local», вместо того чтобы возиться с IP-адресом. Более того, даже если IP-адрес вашего ESP32 изменится, mDNS автоматически разрешает новый IP-адрес на то же самое имя хоста. Это означает, что вы можете продолжать использовать то же имя хоста, не беспокоясь об отслеживании изменений IP-адреса.

Чтобы узнать больше о том, как реализовать mDNS на вашем ESP32, ознакомьтесь с нашим подробным руководством здесь:

Как настроить mDNS на ESP32

Если у вас один ESP32 в сети, вы можете подключиться к нему по IP-адресу. Но представьте, что у вас несколько…

/lastminuteengineers/esp32-mdns-tutorial/index

Подробное объяснение кода

Скетч начинается с подключения библиотеки WiFi.h. Эта библиотека предоставляет функции, необходимые для подключения ESP32 к сети Wi-Fi и настройки его IP-конфигурации.

#include <WiFi.h>

Далее определяются константы для SSID Wi-Fi (ssid) и пароля (password). Вам нужно будет заменить их на реальное имя и пароль вашей сети Wi-Fi.

const char* ssid = "Your_SSID";
const char* password = "Your_PASSWORD";

Затем создаются объекты IPAddress для статического IP, шлюза, маски подсети и, опционально, первичного и вторичного DNS-серверов. Эти объекты будут хранить соответствующие адреса и используются позже для настройки сетевых параметров ESP32.

// Static IP configuration
IPAddress staticIP(192, 168, 1, 100); // ESP32 static IP
IPAddress gateway(192, 168, 1, 1);    // IP Address of your network gateway (router)
IPAddress subnet(255, 255, 255, 0);   // Subnet mask
IPAddress primaryDNS(192, 168, 1, 1); // Primary DNS (optional)
IPAddress secondaryDNS(0, 0, 0, 0);   // Secondary DNS (optional)

Внутри функции setup() инициализируется последовательная связь с компьютером.

Serial.begin(115200);

ESP32 пытается подключиться к сети Wi-Fi с помощью WiFi.begin(ssid, password). Цикл while гарантирует, что ESP32 будет продолжать попытки подключения до тех пор, пока не подключится успешно.

WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
  delay(1000);
  Serial.print(".");
}

После подключения к Wi-Fi ESP32 настраивается на использование ранее определённого статического IP, шлюза, маски подсети и DNS-серверов с помощью функции WiFi.config(). Если при настройке статического IP возникнет проблема, в монитор порта будет выведено сообщение «Failed to configure Static IP».

if(!WiFi.config(staticIP, gateway, subnet, primaryDNS, secondaryDNS)) {
  Serial.println("Failed to configure Static IP");
} else {
  Serial.println("Static IP configured!");
}

После установки IP-конфигурации текущий IP-адрес ESP32 выводится в монитор порта с помощью WiFi.localIP(). Если всё пройдёт по плану, должен отобразиться установленный вами статический IP-адрес.

Serial.print("ESP32 IP Address: ");
Serial.println(WiFi.localIP());

IP-адрес устанавливается в функции setup(), и поскольку больше ничего делать не нужно, функция loop() остаётся пустой.

void loop() {
}