// подключаем библиотеку «ESP8266WiFi»:
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#include <ESP8266HTTPClient.h>
// вписываем здесь SSID и пароль для вашей WiFi-сети:
const char* ssid = "";
const char* password = "";
IPAddress ip(192,168,0,64); //статический IP
IPAddress gateway(192,168,0,1);
IPAddress subnet(255,255,255,0);
IPAddress ip_dns1(8, 8, 8, 8);
IPAddress ip_dns2(8, 8, 4, 4);
// задаем контакт и начальное состояние для реле:
String relay1State = "Off";
int relay = 4;
char linebuf[80];
int charcount=0;
WiFiServer server(80);
ESP8266WiFiMulti WiFiMulti;
// блок setup() запускается только один раз – при загрузке:
void setup() {
// инициализируем последовательный порт (для отладочных целей):
Serial.begin(115200);
delay(10);
pinMode(relay, OUTPUT);
digitalWrite(relay, LOW); // Инициализация реле
// подключаемся к WiFi-сети:
Serial.println();
Serial.print("Connecting to "); // "Подключаемся к "
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.config(ip,gateway,subnet,ip_dns1, ip_dns2);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected"); // "Подключение к WiFi выполнено"
// запускаем веб-сервер:
server.begin();
Serial.println("Web server running. Waiting for the ESP IP...");
// "Веб-сервер запущен. Ожидание IP-адреса ESP..."
delay(10000);
// печатаем IP-адрес ESP:
Serial.println(WiFi.localIP());
// Здесь настройки ВАШЕГО WIFI
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");}
Serial.println(WiFi.localIP());
// выводим мощность принимаемого сигнала:
long rssi = WiFi.RSSI();
Serial.print("RSSI:");
Serial.println(rssi);
}
// Показываем веб-страницу с кнопкой «вкл/выкл» для реле:
void dashboardPage(WiFiClient &client) {
client.println("<!DOCTYPE HTML><html><head>");
client.println("<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"></head><body>");
client.println("<h1>ESP 8266-WH-662 - <a href=\"/\">Refresh</a></h1>");
// таймер
client.println("</h3>Timer: </h3>");
// значение таймера
// генерируем кнопку для управления реле:
client.println("<h3>Relay: " + relay1State + "</h3>");
// если реле выключено, показываем кнопку «вкл»:
if(relay1State == "Off"){
client.println("<a href=\"/relay1on\"><button>ON</button></a>");
}
// если реле включено, показываем кнопку «выкл»:
else if(relay1State == "On"){
client.println("<a href=\"/relay1off\"><button>OFF</button></a>");
}
client.println("</body></html>");
}
void loop()
{
// запускаем таймер
if(relay1State == "On"){ // для проверки
Serial.print("TIMER Start");
} else {
Serial.print("TIMER OFF");
}
WiFiClient client = server.available(); // Получаем данные, посылаемые клиентом
if (client){
Serial.println("new client"); // "новый клиент"
memset(linebuf,0,sizeof(linebuf));
charcount=0;
// HTTP-запрос заканчивается пустой строкой:
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
// считываем HTTP-запрос, символ за символом:
linebuf[charcount]=c;
if (charcount<sizeof(linebuf)-1) charcount++;
// если вы дошли до конца строки (т.е. если получили
// символ новой строки), это значит,
// что HTTP-запрос завершен, и вы можете отправить ответ:
if (c == '\n' && currentLineIsBlank) {
dashboardPage(client);
break;
}
if (c == '\n') {
if (strstr(linebuf,"GET /relay1off") > 0){
digitalWrite(relay, LOW);
relay1State = "Off";
}
else if (strstr(linebuf,"GET /relay1on") > 0){
digitalWrite(relay, HIGH);
relay1State = "On";
}
// если получили символ новой строки...
currentLineIsBlank = true;
memset(linebuf,0,sizeof(linebuf));
charcount=0;
}
else if (c != '\r') {
// если получили какой-то другой символ...
currentLineIsBlank = false;
}
}
}
// даем веб-браузеру время на получение данных:
delay(1);
// закрываем соединение:
client.stop();
Serial.println("client disonnected"); // "Клиент отключен"
}}