Если вы когда-либо пытались запустить веб-сервер на ESP32, вы, вероятно, заметили нечто раздражающее — каждый раз, когда вы перезапускаете ESP32, IP-адрес может меняться в зависимости от того, что маршрутизатор решает назначить в данный момент. Это означает, что вам всегда придется проверять последовательный монитор, чтобы узнать этот новый IP-адрес. Это довольно хлопотно, не так ли?
Вот тут-то и вступают в игру статические IP-адреса. Установив статический IP-адрес, вы сможете получить доступ к веб-серверу, используя тот же IP-адрес, даже после перезапуска ESP32. Это также полезно, чтобы избежать путаницы, когда к вашей сети подключено несколько модулей ESP32.
К счастью, есть довольно простой и быстрый процесс установки статического IP-адреса. Мы пошагово расскажем вам, как установить статический IP-адрес на вашем ESP32.
Шаг 1. Настройка Arduino IDE
Мы будем использовать Arduino IDE для программирования ESP32, поэтому, прежде чем продолжить, убедитесь, что у вас в данной IDE установлено дополнение для работы с ESP32.
Шаг 2. Подключите ESP32 к компьютеру
Для подключения платы ESP32 к компьютеру используйте кабель micro-USB.
Шаг 3. Настройка сетевых учетных данных
Перед настройкой статического IP-адреса рекомендуется проверить текущие сетевые настройки (IP, шлюз, подсеть и DNS), назначенные вашим маршрутизатором. Эта информация может помочь избежать конфликтов IP-адресов. Чтобы узнать текущий IP-адрес ESP32 и другие сетевые настройки, вам необходимо загрузить следующий скетч на ваш ESP32.
Но перед этим вам нужно сделать одно важное изменение. Обновите следующие две переменные, указав ваш фактический SSID и пароль WiFi.
1 2 |
const char* ssid = "YourNetworkName"; // Enter SSID here const char* password = "YourPassword"; //Enter Password here |
После внесения этих изменений загрузите код.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
#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 (необязательно).
1 2 3 4 5 |
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
#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 } |
Шаг 5. Тестирование работы проекта
После загрузки кода в ESP32 используйте последовательный монитор (Serial Monitor), чтобы убедиться, что ESP32 теперь использует заданный вами статический IP-адрес.
Подробное пояснение кода
Скетч начинается с подключения библиотеки WiFi.h
. Эта библиотека предоставляет функции, необходимые для подключения ESP32 к сети Wi-Fi и настройки его IP-конфигурации.
1 |
#include <WiFi.h> |
Далее определяются константы для SSID Wi-Fi (ssid
) и пароля (password
). Вам нужно будет заменить их на имя и пароль вашей фактической сети Wi-Fi.
1 2 |
const char* ssid = "Your_SSID"; const char* password = "Your_PASSWORD"; |
Затем создаются объекты IPAddress
для статического IP, шлюза, маски подсети и, опционально, первичного и вторичного DNS-серверов. Эти объекты будут хранить соответствующие адреса и будут использоваться позже для настройки сетевых параметров ESP32.
1 2 3 4 5 6 |
// 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() инициируется последовательная связь с компьютером.
1 |
Serial.begin(115200); |
ESP32 пытается подключиться к сети Wi-Fi с помощью WiFi.begin(ssid, password)
. Цикл while гарантирует, что ESP32 будет продолжать попытки подключения до тех пор, пока это не удастся.
1 2 3 4 5 |
WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.print("."); } |
После подключения к Wi-Fi ESP32 настраивается на использование ранее определенного статического IP, шлюза, маски подсети и DNS-серверов с помощью функции WiFi.config()
. Если при настройке статического IP-адреса возникает проблема, на последовательный монитор выводится сообщение «Не удалось настроить статический IP-адрес».
1 2 3 4 5 |
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-адрес.
1 2 |
Serial.print("ESP32 IP Address: "); Serial.println(WiFi.localIP()); |
IP-адрес задается в функции setup(), и поскольку больше ничего не нужно делать, функция loop() остается пустой.
1 2 |
void loop() { } |
Статический IP против mDNS
Хотя настройка статического IP для вашего ESP32 эффективна, есть еще один подход, который стоит рассмотреть — это mDNS (Multicast DNS). Этот метод предлагает значительные преимущества по сравнению со статическим IP.
mDNS позволяет вам получить доступ к веб-серверу, работающему на вашем ESP32, используя удобное имя хоста, например «esp32.local», вместо того, чтобы возиться с IP-адресом. Более того, даже если IP-адрес вашего ESP32 изменится, mDNS автоматически преобразует новый IP-адрес в то же имя хоста. Это означает, что вы можете продолжать использовать то же имя хоста, не беспокоясь об отслеживании изменений IP-адреса.
Более подробно об этом вы можете прочитать в данной статье — как настроить mDNS на ESP32.