цифровая электроника
вычислительная техника
встраиваемые системы

 

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

Автор: Mike(admin) от 15-11-2018, 03:55

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


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

Скопируйте приведенный ниже код веб-сервера ESP32 в свою среду разработки Arduino IDE, но не загружайте его пока что в ESP32. Вам нужно внести некоторые изменения, чтобы заставить код работать для вас. Если вы загрузите следующий скетч в свой ESP32, он должен автоматически назначить фиксированный IP-адрес 192.168.1.184.



#include <WiFi.h>

// Замените сетевые учетные данные
const char* ssid     = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

// Установить номер порта веб-сервера на 80
WiFiServer server(80);

// Переменная для хранения HTTP-запроса
String header;

// Вспомогательные переменные для сохранения текущего состояния вывода
String output26State = "off";
String output27State = "off";

// Назначение выходных переменных для контактов GPIO
const int output26 = 26;
const int output27 = 27;

// Задайте свой статический IP-адрес
IPAddress local_IP(192, 168, 1, 184);
// Укажите IP-адрес шлюза
IPAddress gateway(192, 168, 1, 1);

IPAddress subnet(255, 255, 0, 0);
IPAddress primaryDNS(8, 8, 8, 8);   // опционально
IPAddress secondaryDNS(8, 8, 4, 4); // опционально

void setup() {
  Serial.begin(115200);
  // Инициализировать выходные переменные в качестве выходов
  pinMode(output26, OUTPUT);
  pinMode(output27, OUTPUT);
  // Установите выходы на "0"
  digitalWrite(output26, LOW);
  digitalWrite(output27, LOW);

  // Настраивает статический IP-адрес
  if (!WiFi.config(local_IP, gateway, subnet, primaryDNS, secondaryDNS)) {
    Serial.println("STA Failed to configure");
  }
  
  // Подключение к сети Wi-Fi с SSID и паролем
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  // Печать локального IP-адреса и запуск веб-сервера
  Serial.println("");
  Serial.println("WiFi connected.");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
  server.begin();
}

void loop(){
  WiFiClient client = server.available();   // Слушаем входящих клиентов

  if (client) {                             // Если новый клиент подключается,
    Serial.println("New Client.");          // распечатать сообщение в последовательный порт
    String currentLine = "";                // сделать строку для хранения входящих данных от клиента
    while (client.connected()) {            // повторят пока клиент подключается
      if (client.available()) {             // если есть байты для чтения от клиента,
        char c = client.read();             // прочитать байт, затем
        Serial.write(c);                    // вывести его в последовательный монитор
        header += c;
        if (c == '\n') {                    // если байт является символом новой строки
          // если текущая строка пуста, у вас есть два символа новой строки подряд.
          // это конец HTTP-запроса клиента, поэтому отправим ответ:
          if (currentLine.length() == 0) {
            // Заголовки HTTP всегда начинаются с кода ответа (например, HTTP / 1.1 200 OK)
            // и тип контента, чтобы клиент знал, что ждет, затем пустая строка:
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");
            client.println("Connection: close");
            client.println();
            
            // включаем и выключаем GPIO
            if (header.indexOf("GET /26/on") >= 0) {
              Serial.println("GPIO 26 on");
              output26State = "on";
              digitalWrite(output26, HIGH);
            } else if (header.indexOf("GET /26/off") >= 0) {
              Serial.println("GPIO 26 off");
              output26State = "off";
              digitalWrite(output26, LOW);
            } else if (header.indexOf("GET /27/on") >= 0) {
              Serial.println("GPIO 27 on");
              output27State = "on";
              digitalWrite(output27, HIGH);
            } else if (header.indexOf("GET /27/off") >= 0) {
              Serial.println("GPIO 27 off");
              output27State = "off";
              digitalWrite(output27, LOW);
            }
            
            // Отображение веб-страницы HTML
            client.println("<!DOCTYPE html><html>");
            client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");
            client.println("<link rel=\"icon\" href=\"data:,\">");
            // CSS для стилизации кнопок включения / выключения
            // Не стесняйтесь изменять атрибуты фона и шрифта в соответствии с вашими предпочтениями
            client.println("<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}");
            client.println(".button { background-color: #4CAF50; border: none; color: white; padding: 16px 40px;");
            client.println("text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}");
            client.println(".button2 {background-color: #555555;}</style></head>");
            
            // Заголовок веб-страницы
            client.println("<body><h1>ESP32 Web Server</h1>");
            
            // Отобразить текущее состояние и кнопки ON / OFF для GPIO 26
            client.println("<p>GPIO 26 - State " + output26State + "</p>");
            // Если output26State выключен, ображаем кнопку ON  
            if (output26State=="off") {
              client.println("<p><a href=\"/26/on\"><button class=\"button\">ON</button></a></p>");
            } else {
              client.println("<p><a href=\"/26/off\"><button class=\"button button2\">OFF</button></a></p>");
            } 
               
            // Отобразить текущее состояние и кнопки ON / OFF для GPIO 27
            client.println("<p>GPIO 27 - State " + output27State + "</p>");
            // Если output27State выключен, ображаем кнопку ON        
            if (output27State=="off") {
              client.println("<p><a href=\"/27/on\"><button class=\"button\">ON</button></a></p>");
            } else {
              client.println("<p><a href=\"/27/off\"><button class=\"button button2\">OFF</button></a></p>");
            }
            client.println("</body></html>");
            
            // Ответ HTTP заканчивается другой пустой строкой
            client.println();
            // Уход из цикла while
            break;
          } else { // если вы получили новую строку, то очистим currentLine
            currentLine = "";
          }
        } else if (c != '\r') {  // если у вас есть что-то еще, кроме символа возврата каретки,
          currentLine += c;      // добавьте его в конец currentLine
        }
      }
    }
    // Очистить переменную заголовка
    header = "";
    // Закрыть соединение
    client.stop();
    Serial.println("Client disconnected.");
    Serial.println("");
  }
}

Вам необходимо изменить следующие строки с вашими сетевыми учетными данными: SSID и пароль.



const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

Затем, вне функций setup() и loop(), вы определяете следующие переменные с вашим собственным статическим IP-адресом и соответствующим IP-адресом шлюза. По умолчанию следующий код назначает IP-адрес 192.168.1.184, который работает на шлюзе 192.168.1.1.



IPAddress local_IP(192, 168, 1, 184);
IPAddress gateway(192, 168, 1, 1);

IPAddress subnet(255, 255, 0, 0);
IPAddress primaryDNS(8, 8, 8, 8);
IPAddress secondaryDNS(8, 8, 4, 4);

Параметры (192, 168, 1, 184) и (192, 168, 1, 1) - это те, которые вам нужно изменить, если вы хотите назначить желаемый IP-адрес ESP32. Вам необходимо использовать доступный IP-адрес в локальной сети и соответствующий шлюз. В функции setup() вам необходимо вызвать метод WiFi.config(), чтобы назначить конфигурации для ESP32. Параметры primaryDNS и secondaryDNS являются необязательными, и вы можете удалить их.



if (!WiFi.config(local_IP, gateway, subnet, primaryDNS, secondaryDNS)) {
  Serial.println("STA Failed to configure");
}

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


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

Как вы можете видеть, он выводит IP-адрес 192.168.1.184. Вы можете взять этот пример и добавить его во все ваши скетчи Wi-Fi, чтобы назначить фиксированный IP-адрес для вашего ESP32.




© digitrode.ru


Теги: ESP32, Wi-Fi, WiFi



   Благодарим Вас за интерес к информационному проекту digitrode.ru.
   Если Вы хотите, чтобы интересные и полезные материалы выходили чаще, и было меньше рекламы,
   Вы можее поддержать наш проект, пожертвовав любую сумму на его развитие.


Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий