Пишем программный код для настройки статического IP адрес на микроконтроллере ESP8266 в среде программирования Arduino IDE.

В данном уроке мы рассмотрим подключение нашего микроконтроллера ESP8266 к Wi-Fi сети по статическому адресу. Для этого нам понадобиться подключить следующие библиотеки:

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>

Для написания нашей программы нам понадобяться следующие функции:

WiFi.config() — настраивает статический IP-адрес, указывая статические данные DNS, шлюза и подсети.

Последовательность настройки сети зависит от очередности двух функций:

  1. В начале идет WiFi.begin() который автоматически настраивает  Wi-Fi соединение, после WiFi.config() устанавливает сетевой адрес сети. 
  2. Вначале идет WiFi.config() который устанавливает параметры сети, и уже  WiFi.begin() настраивает Wi-Fi соединения с сетевыми адресами, указанными в WiFi.config().
Варианты использования WiFi.config():
WiFi .config (ip);
WiFi .config (ip, dns);
WiFi .config (ip, dns, шлюз);
WiFi .config (ip, dns, шлюз, подсеть);

где:

ip : IP-адрес устройства (массив из 4 байтов)

dns : адрес DNS-сервера.

шлюз : IP-адрес сетевого шлюза (массив из 4 байтов), необязательно.

подсеть : маска под сети (массив из 4 байтов), необязательно: по умолчанию 255.255.255.0

 Так как HTTP порт 80 является портом по умолчанию, для того, что бы  получить доступ к серверу без необходимости прописывать номер порта в URL, мы его заранее пропишем:

ESP8266WebServer server(80);

Чтобы обрабатывать входящие HTTP-запросы, нам нужно указать, какой необходимо выполнить код при нажатии определенного URL. Для этого мы используем функцию server.on(). Эта функция принимает два параметра. Первый — это URL, а второй — имя функции, которую мы хотим выполнить при нажатии на этот URL:

server.on(«/», handleRoot)  — указывает, что когда сервер получает HTTP-запрос по корневому пути (/), он запускает функцию handleRoot(). Тут необходимо помнить, что указанный URL-адрес является относительным путем.

Функция server.begin() запускает наш сервер, далее мы отправляем текст нашей HTML странички с помощью функции server.send():

server.send(200, «text/plain», «hello from esp8266!») — мы отправляем код 200 (один из кодов состояния HTTP ), который соответствует ответу что все «хорошо». Затем мы указываем тип контента как «text / html», и, выводим текст странички, так же вместо текста здесь может быть функция которая содержит HTML страничку.

server.onNotFound(handle_NotFound) — указать, что необходимо выполнить когда будет получен запрос на URI, который не был указан в server.on

Теперь нам осталось только обработать реальные входящие HTTP запросы,  для этого есть функция server.handClient().

Программный код:

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>

const char* ssid = "****";
const char* password = "****";
IPAddress ip(192,168,0,17); //статический IP
IPAddress gateway(192,168,0,1);
IPAddress subnet(255,255,255,0);
ESP8266WebServer server(80);
const int led = LED_BUILTIN;

void handleRoot() {
server.send(200, "text/plain", "hello from esp8266!");
}

void handle_NotFound(){
server.send(404, "text/plain", "Not found!");
}

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) {
digitalWrite(led, HIGH);
delay(250);
digitalWrite(led, LOW);
delay(250);
Serial.print(".");
}
digitalWrite(led, HIGH);
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
server.on("/", handleRoot);
server.onNotFound(handle_NotFound);
server.begin();
Serial.println("HTTP server started");
}
void loop(void){
server.handleClient();
}