В данном уроке мы рассмотрим подключение нашего микроконтроллера ESP8266 к Wi-Fi сети по статическому адресу. Для этого нам понадобиться подключить следующие библиотеки:
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
Для написания нашей программы нам понадобяться следующие функции:
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();
}