Як задати статичну 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();
}
Хочу статический 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 библиотеки и отображать результаты разкопок в статьях!
Модуль розширення входів-виходів 4 реле та 4 DI I2C
Цікавий модуль розширення 4-х входів та 4 релейних виходів з комунікацією I2C на основі мікросхеми M..
475.88грн.
Припой з каніфоллю 0,5мм 30г
Нитка припою для тонкої пайки мілких радіодеталей, що містить флюсСвинця 40 %Олова 60 %Флюса 1,2 %На..
211.57грн.
Розумний дім #11: Комунікаційні мережі
Розумний дім #11: Комунікаційні мережі Жодна система розумного дому неможлива без надій..
Які види датчиків можна підключити до Arduino для вимірювання параметрів навколишнього середовища
Які види датчиків можна підключити до Arduino для вимірювання параметрів навколишнього середовищ..
Уроки Arduino структура програми для початківців
Доброго дня, друзі! Вы великі молодці, що зацікавились уроками Arduino! Структура програми в Ardu..





