Працюємо з 09:00 до 20:00 без вихідних.
Самовивіз - Київ біля ТЦ Квадрат бул.Перова

Как задать статический IP адрес контроллеру ESP8266?

Будем рассматривать этот вопрос на примере платы контроллера NodeMcu 0.9 ESP-12 WIFI ESP8266.

Изучая стандартные примеры скетчей, которые прилагаются к библиотекам ESP8266WiFi при настройке Arduino IDE для работы с WiFi контроллером ESP8266, все останавливаются на вопросе: "а как же мне узнавать IP-адрес, который во всех примерах получается динамически, без использования монитора порта?"

Максимум удобства для обнаружения нашего контроллера, которые предлагаются в примерах - это предложение испоьзовать технологию mDNS. Это типа локальный способ назначения устройствам в сети своих символьных имен для доступа к ним по протоколу http на tcp.

Первый способ - технология mDNS

Давайте для начала рассмотрим этот способ удобного обращения к нашему WiFi контроллеру при помощи придуманных символьных адресов. Тем более, что в примерах приведен не полный и неправильный синтаксис обращения к классу mDNS.

Действительно, задумка очень интересная. Работает это так: мы в программном коде своей программы указываем символьное название сервера, который будет крутиться в ESP8266. Например мы назовем его "teplica1" (теплица1). И чтобы обратиться к web-странице этого сервера, мы просто в адресной строке браузера нашего компьютера или гаджета пишем

http://teplica1.local/

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

Вот изменённый код web-сервера, взятый со стандартного библиотечного примера, который поддерживает сетевое назначение имен mDNS.

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h> //подгружаем библиотеку mDNS
const char* ssid = "****";
const char* password = "******";
ESP8266WebServer server(80);
MDNSResponder mdns; //назначаем экземпляр класса ESP8266mDNS
const int led = 13;
void handleRoot() {
  digitalWrite(led, 1);
  server.send(200, "text/plain", "hello from esp8266!");
  digitalWrite(led, 0);
}
void setup(void){
  pinMode(led, OUTPUT);
  digitalWrite(led, 0);
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  Serial.println("");
  // ожидание соединения
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
  //назначаем символьное имя mDNS нашему серверу опираясь на его динамически полученный IP
 if (MDNS.begin("esp8266", WiFi.localIP())) {
    Serial.println("MDNS responder started");
  }
  server.on("/", handleRoot);
  server.begin();
  Serial.println("HTTP server started"); //активируем сервис MDNS
  MDNS.addService("http", "tcp", 80);
}
void loop(void){
  server.handleClient();
}

Вобщем к обычному коду сервера добавляются всего 4 строки обращения к классу MDNS. К позитиву так же можно отнести и то, что библиотека забирает не очень много памяти контроллера, при её подключении.
Теперь, чтобы обратиться к серверу нам не обязательно знать его IP. Просто достаточно ввести в строку браузера http://esp8266.local/ и получим доступ к веб-страничке контроллера и получим ответ "hello from esp8266!". Красота и великолепие не правда ли!?
Но теперь вернемся к реальности. Технология MDNS на данный момент по умолчанию поддерживается только гаджетами с операционками фирмы Apple. На гаджеты иных операционных систем необходимо устанавливать специальные утилиты, с андроидом вообще плачевнее всего. Вобщем мне такое не подходит, честно говоря.

Хочу статический IP на ESP8266

Раз предыдущий способ не годится для использования на различных гаджетах, давайте разкопаем припрятанные функции библиотеки ESP8266WiFi. Представляю вам функцию, зашитую в стандартную библиотеку, для назначения параметров сетевого соединения контроллера. Её синтаксис выглядит следующим образом.

config (ip, gateway, subnet)

Эта функция принимает следующие параметры: IP-адрес, гейтвей и маску подсети. У них довольно интересный тип переменной (посмотрим в примере). config активируют после функции begin.

Я взял предыдущий пример с mDNS и переделал его под задаваемый IP адрес без класса mDNS.

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
const char* ssid = "*****";
const char* password = "*****";
IPAddress ip(192,168,1,17);  //статический IP
IPAddress gateway(192,168,1,1);
IPAddress subnet(255,255,255,0);
ESP8266WebServer server(80);
const int led = 13;
void handleRoot() {
  digitalWrite(led, 1);
  server.send(200, "text/plain", "hello from esp8266!");
  digitalWrite(led, 0);
}
void setup(void){
  pinMode(led, OUTPUT);
  digitalWrite(led, 0);
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  WiFi.config(ip, gateway, subnet);
  Serial.println("");
  // ожидание соединения
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
  server.on("/", handleRoot);
  server.begin();
  Serial.println("HTTP server started");
}
void loop(void){
  server.handleClient();
}

После загрузки этой программы в плату контроллера, можно любым браузером в WiFi сети перейти по адресу

http://192.168.1.17

и получим ответ hello from esp8266!

Тоесть мы получаем контроллер, строго привязанный к осязаемому IP адресу. Это дает нам рычаги для организации более сложных конфигураций сети умного дома. Можно работать над организацией клиент-серверных обменов полезной информацией между контроллерами.

Ну что же, продолжим и дальше разкапывать запрятанные возможности нашей родной WiFi библиотеки и отображать результаты разкопок в статьях!

Написать отзыв

Примечание: HTML разметка не поддерживается! Используйте обычный текст.
    Плохо           Хорошо
Панель для камеры

Панель для камеры

Подвес для механизированного поворота камеры при помощи серво-двигателей SG90Позволяет удаленно..

46.85грн.

Понижающий преобразователь напряжения с 4,5...40В до 5В 2А

Понижающий преобразователь напряжения с 4,5...40В до 5В 2А

Понижающий преобразователь и стабилизатор напряжения в 5 В с вольтметром входного напряженияВольтмет..

87.44грн.

Усилитель PAM8610 10x2Вт с регулировкой громкости и разъемами

Усилитель PAM8610 10x2Вт с регулировкой громкости и разъемами

Стерео усилитель звуковой частоты класса D с переменным резистором регулирования громкости, разъемам..

102.70грн.

Реле 12В 2А с двумя группами переключающихся контактов

Реле 12В 2А с двумя группами переключающихся контактов

Электромагнитное реле с двумя группами переключающихся контактов. Рабочее напряжение на катушке..

23.19грн.

Стабилизатор напряжения 5В 2А микросхема L78S05CV

Стабилизатор напряжения 5В 2А микросхема L78S05CV

Микросхема стабилизатор напряжения L78S05CVПрименяется для стабилизации пульсирующего напряжени..

18.67грн.