Добавляем авторизацию на web сервере ESP8266 (Wemos D1) и управляем 4 реле - Зайцев Я - Флудилка
^ В верх

Зайцев.Я

Все самое интересное в разделе "Флудилка"


Войти
x
x

Кто на сайте

Флудилка

Обсуждение Joomla , Virtuemart 2 , Cisco IOS , Asterisk , PHP

  • Категории
    Категории Страница отображения списка категорий системы блогов сайта.
Добавлено : Дата: в разделе: Разные заметки

Добавляем авторизацию на web сервере ESP8266 (Wemos D1) и управляем 4 реле

Добавить авторизацию на web сервере на базе ESP8266 было следующим логичным шагом после предыдущей статьи (19 июня 2017г.), и теперь можно не только управлять 4 релюшками изнутри сети но и шарить их в интернет пробросив порт 80 IP-адреса ESP на маршрутизаторе.

Все параметры выделенные красным заменить на свои

 

//Подсовываем библиотеки

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

 

//Выходы GPIO к которым подключены реле
int rele1 = 13;
int rele2 = 12;
int rele3 = 14;
int rele4 = 4;

 

//Объявляем состояние реле 
bool PowerRele1 = false;

bool PowerRele2 = false;
bool PowerRele3 = false;
bool PowerRele4 = false;

 

const char* ssid = "Имя сети Wifi";
const char* password = "Пароль сети WiFi";

ESP8266WebServer server(80);

 

//Проверяем заголовок на валидность
bool is_authentified(){
Serial.println("Enter is_authentified");
if (server.hasHeader("Cookie")){
Serial.print("Found cookie: ");
String cookie = server.header("Cookie");
Serial.println(cookie);
if (cookie.indexOf("ESPSESSIONID=1") != -1) {
Serial.println("Authentification Successful");
return true;
}
}
Serial.println("Authentification Failed");
return false;
}

//Страница авторизации с кэшированием
void handleLogin(){
String msg;
if (server.hasHeader("Cookie")){
Serial.print("Found cookie: ");
String cookie = server.header("Cookie");
Serial.println(cookie);
}
if (server.hasArg("DISCONNECT")){
Serial.println("Disconnection");
String header = "HTTP/1.1 301 OK\r\nSet-Cookie: ESPSESSIONID=0\r\nLocation: /login\r\nCache-Control: no-cache\r\n\r\n";
server.sendContent(header);
return;
}
if (server.hasArg("USERNAME") && server.hasArg("PASSWORD")){
if (server.arg("USERNAME") == "admin" && server.arg("PASSWORD") == "admin" ){
String header = "HTTP/1.1 301 OK\r\nSet-Cookie: ESPSESSIONID=1\r\nLocation: /\r\nCache-Control: no-cache\r\n\r\n";
server.sendContent(header);
Serial.println("Log in Successful");
return;
}
//Если неудачная авторизация
msg = "Wrong username/password! try again.";
Serial.println("Log in Failed");
}
String content = "<html><body><center><form action='/login' method='POST'>AUTHENTIFICATION<br>";
content += "User:<input type='text' name='USERNAME' placeholder='user name'><br>";
content += "Password:<input type='password' name='PASSWORD' placeholder='password'><br>";
content += "<input type='submit' name='SUBMIT' value='Login'></form>" + msg + "<br></center>";
server.send(200, "text/html", content);
}

//Если успешная авторизация
void handleRoot(){
Serial.println("Enter handleRoot");
String header;
if (!is_authentified()){
String header = "HTTP/1.1 301 OK\r\nLocation: /login\r\nCache-Control: no-cache\r\n\r\n";
server.sendContent(header);
return;
}


String content = "<html><body><H2></H2><br>";
if (server.hasHeader("User-Agent")){
content += "" + server.header("User-Agent") + "<br><br>";

//Объявляем первоначальное состояние реле

bool statrele1 = false;
bool statrele2 = false;
bool statrele3 = false;
bool statrele4 = false;


// Реле 1
if( server.hasArg("statrele1") ){
if( strncmp(server.arg("statrele1").c_str(),"1",1) == 0 )
statrele1 = true;
}
else {
statrele1 = PowerRele1;
}

// Реле 2
if( server.hasArg("statrele2") ){
if( strncmp(server.arg("statrele2").c_str(),"1",1) == 0 )
statrele2 = true;
}
else {
statrele2 = PowerRele2;
}

// Реле 3
if( server.hasArg("statrele3") ){
if( strncmp(server.arg("statrele3").c_str(),"1",1) == 0 )
statrele3 = true;
}
else {
statrele3 = PowerRele3;
}

// Реле 4
if( server.hasArg("statrele4") ){
if( strncmp(server.arg("statrele4").c_str(),"1",1) == 0 )
statrele4 = true;
}
else {
statrele4 = PowerRele4;
}



// Формируем HTML страницу
String out = "";

out =
"<html>\
<head>\
<meta charset=\"utf-8\" />\
<title>Заголовок страницы в браузере</title>\
<style>\
body { background-color: #cccccc; font-family: Arial, Helvetica, Sans-Serif; Color: #000088; background-image: url(http://zaycev.me/images/bkg.jpg);}\
</style>\
</head>\
<body>\
";

// Для реле 1
if( statrele1 ){
out+="\
<hr width=100 size=30 align=left color=red><h2><a href=\"/?statrele1=0\">Выключить реле 1</a></h3>\
";
}
else {
out+="\
<hr width=100 size=30 align=left color=green><h2><a href=\"/?statrele1=1\">Включить реле 1</a></h3>\
";
}

// Для реле 2
if( statrele2 ){
out+="\
<hr width=100 size=30 align=left color=red><h2><a href=\"/?statrele2=0\">Выключить реле 2</a></h3>\
";
}
else {
out+="\
<hr width=100 size=30 align=left color=green><h2><a href=\"/?statrele2=1\">Включить реле 2</a></h3>\
";
}

// Для реле 3
if( statrele3 ){
out+="\
<hr width=100 size=30 align=left color=red><h2><a href=\"/?statrele3=0\">Выключить реле 3</a></h3>\
";
}
else {
out+="\
<hr width=100 size=30 align=left color=green><h2><a href=\"/?statrele3=1\">Включить реле 3</a></h3>\
";
}

// Для реле 4
if( statrele4 ){
out+="\
<hr width=100 size=30 align=left color=red><h2><a href=\"/?statrele4=0\">Выключить реле 4</a></h3>\
";
}
else {
out+="\
<hr width=100 size=30 align=left color=green><h2><a href=\"/?statrele4=1\">Включить реле 4</a></h3>\
";
}

// Общее
out+= "\
</body>\
</html>";
server.send ( 200, "text/html", out );


// Для реле 1
if( statrele1 != PowerRele1 ){
PowerRele1 = statrele1;
digitalWrite(rele1 , PowerRele1);

}
// Для реле 2
if( statrele2 != PowerRele2 ){
PowerRele2 = statrele2;
digitalWrite(rele2 , PowerRele2);

}

// Для реле 3
if( statrele3 != PowerRele3 ){
PowerRele3 = statrele3;
digitalWrite(rele3 , PowerRele3);

}

// Для реле 4
if( statrele4 != PowerRele4 ){
PowerRele4 = statrele4;
digitalWrite(rele4 , PowerRele4);

}


// Скобки оставить!
}
}

//Нет аутентификации
void handleNotFound(){
String message = "File Not Found\n\n";
message += "URI: ";
message += server.uri();
message += "\nMethod: ";
message += (server.method() == HTTP_GET)?"GET":"POST";
message += "\nArguments: ";
message += server.args();
message += "\n";
for (uint8_t i=0; i<server.args(); i++){
message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
}
server.send(404, "text/plain", message);
}

void setup(void){

pinMode(rele1 , OUTPUT);
digitalWrite(rele1 , PowerRele1);
pinMode(rele2 , OUTPUT);
digitalWrite(rele2 , PowerRele2);
pinMode(rele3 , OUTPUT);
digitalWrite(rele3 , PowerRele3);
pinMode(rele4 , OUTPUT);
digitalWrite(rele4 , PowerRele4);

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());


server.on("/", handleRoot);
server.on("/login", handleLogin);
server.on("/inline", [](){
server.send(200, "text/plain", "");
});

server.onNotFound(handleNotFound);
//here the list of headers to be recorded
const char * headerkeys[] = {"User-Agent","Cookie"} ;
size_t headerkeyssize = sizeof(headerkeys)/sizeof(char*);
//ask server to track these headers
server.collectHeaders(headerkeys, headerkeyssize );
server.begin();
Serial.println("HTTP server started");
}

void loop(void){
server.handleClient();
}

Поставьте свой рейтинг этой записи блога:

Комментарии

  • Никаких комментариев пока не было создано. Будьте первым комментатором.

Оставить комментарий

Гость
Гость Среда, 12 Декабрь 2018
Яндекс.Метрика Рейтинг@Mail.ru