Как установить статический или фиксированный IP-адрес на ESP32
Если вы когда-либо пробовали запускать веб-сервер на ESP32, вы, вероятно, замечали кое-что раздражающее — каждый раз при перезагрузке ESP32 IP-адрес может измениться, в зависимости от того, что роутер решит назначить в данный момент. Это означает, что вам всегда приходится проверять монитор порта, чтобы узнать этот новый IP-адрес. Довольно хлопотно, правда?
Именно здесь на помощь приходят статические IP-адреса. Установив статический IP-адрес, вы можете обращаться к веб-серверу, используя один и тот же IP-адрес, даже после перезагрузки ESP32. Это также полезно для избежания путаницы, когда к вашей сети подключено несколько ESP32.
К счастью, как только вы разберётесь, это довольно простой и быстрый процесс — установить статический IP-адрес. Мы проведём вас шаг за шагом по настройке статического IP-адреса на вашем ESP32. Давайте начнём!
Шаг 1 – Настройка Arduino IDE
Мы будем использовать Arduino IDE для программирования ESP32, поэтому, пожалуйста, убедитесь, что у вас установлено дополнение ESP32, прежде чем продолжить:
Микроконтроллер ESP32 быстро стал одной из самых популярных плат среди любителей, инженеров и людей, интересующихся Интернетом вещей (IoT)…
Шаг 2 – Подключение ESP32 к компьютеру
Используйте кабель micro-USB для подключения платы ESP32 к компьютеру.
Шаг 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 будут выведены в монитор порта. Запишите их.
Шаг 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 против mDNS
Хотя установка статического IP для ESP32 эффективна, стоит рассмотреть и другой подход: mDNS (Multicast DNS). Этот метод предлагает значительные преимущества по сравнению со статическим IP.
mDNS позволяет обращаться к веб-серверу, работающему на вашем ESP32, используя удобное имя хоста, например «esp32.local», вместо того чтобы возиться с IP-адресом. Более того, даже если IP-адрес вашего ESP32 изменится, mDNS автоматически разрешает новый IP-адрес на то же самое имя хоста. Это означает, что вы можете продолжать использовать то же имя хоста, не беспокоясь об отслеживании изменений IP-адреса.
Чтобы узнать больше о том, как реализовать mDNS на вашем ESP32, ознакомьтесь с нашим подробным руководством здесь:
Если у вас один ESP32 в сети, вы можете подключиться к нему по IP-адресу. Но представьте, что у вас несколько…
Подробное объяснение кода
Скетч начинается с подключения библиотеки 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() {
}