Как задать статический IP адрес контроллеру ESP8266?
Будем рассматривать этот вопрос на примере платы контроллера NodeMcu 0.9 ESP-12 WIFI ESP8266.
Изучая стандартные примеры скетчей, которые прилагаются к библиотекам ESP8266WiFi при настройке Arduino IDE ESP8266 для работы с WiFi контроллером, все останавливаются на вопросе: "а как же мне узнавать 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 20мА. Схема простого в изготовлении токового задатчика
Прибор позволяет получать на выходе 0...20 мА, 4...20 мА. Области применения представленного устр..
Звук и музыкальная информатика
Попросту говоря, мы представляем звук, как вибрация, проходящая через среду (как правило, в воздухе)..
Держатель 8мм линейных направляющих CNC или 3d принтера 2шт.
Держатель для крепления цилиндрических направляющих каретки CNC-станка или 3d-принтераПод диаметр на..
104.59грн.
Реле 5В 2А с двумя группами переключающихся контактов
Электромагнитное реле с двумя группами переключающихся контактов. Рабочее напряжение на катушке..
52.13грн.
Sonoff basic умный выключатель WiFi
Напряжение питания 90 ... 250 В переменного токаМаксимальный ток коммутируемой нагрузки 10 А..
295.81грн.