#include <ESP8266WiFi.h> //Библиотека для работы с WiFi
#include <WiFiClient.h> //Библиотека для работы с WiFi клиентами
#include <ESP8266WebServer.h> //Библиотека для создания Web сервера на esp8266
#include <ESP8266mDNS.h> //Библиотека для работы с mDNS
int relay = D4; //Пин реле
bool PowerState = false; //Переменная для хранения состояния реле
String page; //HTML код передаваемый клиенту
const char* ssid = "ssid"; //Имя вашей сети WiFi
const char* password = "password"; //Пароль вашей сети WiFi
ESP8266WebServer server(80); //Инициализация веб сервера
void setup() {
Serial.begin(115200); //Инициализация Serial порта
pinMode(relay , OUTPUT); //Пин реле как выход
digitalWrite(relay , PowerState); //Изменяем состояние пина
WiFi.mode(WIFI_AP_STA); //Режим WiFi
Wifi.begin(ssid, password); //Подключение к WiFi
if(WiFi.waitForConnectResult() == WL_CONNECTED){} //Ждем пока не подключимся к WiFi
MDNS.begin("IoT-3", WiFi.localIP()); //Запуск MDNS
Serial.print(WiFi.localIP()); //Пишем в Serial порт IP адрес для доступа
server.on ( "/", HTTP_handleRoot); //Если запрошен корень сервера отдаем код страницы
server.begin(); //Запуск сервера
}
void loop() {
server.handleClient(); //Ждем клиента...
delay(50);
}
void HTTP_handleRoot(void) { //Функция запускается при запросе корня сервера
bool state = false; //Статус переданный из браузера
if( server.hasArg("state") ){ //Если в запросе к серверу есть аргумент "state"...
if(strncmp(server.arg("state").c_str(),"1",1) == 0)state = true;}else {state = PowerState;} //Изменяем состояние переменной в зависимости от переданного аргумента
page =
"<html>\
<head>\
<meta charset=\"utf-8\" />\
<title>МегаВольт / IoT</title>\ /*Заголовок сайта*/
</head>\
<body>\
";
if(state){ //Если реле включено...
page+="\
<h2>Состояние: Включено</br></h2>\
<a href=\"/?state=0\"><button>Выключить</button></a>\
";
}
else { //Иначе...
page+="\
<h2>Состояние: Выключено</br><h2>\
<a href=\"/?state=1\"><button>Включить</button></a>\
";
}
page+= "\
</body>\
</html>";
server.send (200, "text/html", page); //Отправляем код клиенту
if(state != PowerState){ //Если статус которые получили от клиента не равен текущему статусу
PowerState = state; //Меняем статус
digitalWrite(relay , PowerState); //Переключаем реле
}
}