ESP8266-01 двуканален WEB релеен борд

ESP8266-01 двуканален WEB релеен борд

В тази статия ще направим “ESP8266-01 двуканален WEB релеен борд” базиран на процесорът ESP8266-01. Може да намерите спецификацията, пиновете както и описание на този процесор в страницата ни с Ревюта. Както подсказва името борда ще се управлява през интернет, като ще разгледаме два варианта на това устройство.

Вариант 1: AP-mod

AP-mod. Когато използваме този вариант процесорът ще работи в режим на AP-WiFi станция, за която ще може да се свържем с телефон, лаптоп или каквото друго безжично устройство имаме.В този вариант на софтуерът ще се изисква парола само на оторизацията за връзка с AP-станцията, а HTML кодът ще е отворен свободно.

Вариант 2: WiFi-клиент

WiFi-клиент. Този вариант може би ще е по предпочитан, защото при него процесорът ще е в режим клиент ( ще е закачен за рутер ).Това означава, че ще може да бъде достъпван както на локално ниво така и през интернет, което се получава след подходящо конфигуриране на вашия рутер. За сигурността на HTML средата ще се грижи оторизация посредством име и парола.

Преди да ви хвърля в дълбоки води нека да покажа първо за по начинаещите как да програмирате ESP8266-01 като използвате Arduino IDE. Първото което трябва да спомена е, че пачът за програмиране на ESP8266 и на ESP32 работи на Arduino-1.6.x версия и нагоре. Препоръчвам да свалите последната версия на Arduino IDE от официалния им сайт.

Как се прибавят други видове контролери в “Arduino IDE” може да прочетете в нашия сайт като последвате този линк: Arduino IDE бърз преглед.

Първо ще разгледаме Вариант 1. Както написахме по-горе той ще ни даде възможност да се свържем директно с контролера и да го достъпим на локалното му IP: 192.168.4.1 . В интернет може да срещнете различни софтуери за за тази цел, но аз ще ви представя моята интерпретация на него. Ако сте разгледали повече варианти в интернет ще разберете, че повечето са неточни или непълни. Аз ще се се постарая да ви дам код който директно да качите и той да работи, като ще коментирам местата където трябва да замените за да работи с вашата мрежа.

Примерен Софтуер AP-mod

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

//const char* www_username = "admin";  // За оторизация на HTML име
//const char* www_password = "123456";  // За оторизация на HTML парола

const char* ssidAP = "ESP-2Relay";      // AP-MOD име 
const char* passwordAP = "15263748";     // AP-MOD парола

ESP8266WebServer server(80);

String webPage = "";

int gpio0_pin = 0;
int gpio2_pin = 2;

void setup(void){

  Serial.begin(115200);

  WiFi.mode(WIFI_AP);
  WiFi.softAP(ssidAP, passwordAP);
  IPAddress myIP = WiFi.softAPIP();

  server.begin();
  ArduinoOTA.begin();
/*                       // За оторизация на HTML
  server.on("/", [](){
    if(!server.authenticate(www_username, www_password)) 
     return server.requestAuthentication();
     server.send(200, "text/html", webPage += " "); // HTTP sait up
     //server.send(200, "text/plain", "Wellcome");  // natpis
    }
   );
*/

  server.on("/", [](){
    server.send(200, "text/html", webPage);
  });
  
 webPage += "<body bgcolor=bbff99>";
  webPage += "<center>";
  webPage += "<h1><font size=14 color=3300cc> ESP8266-01 Web Server </font></h1><br>";
  webPage += "Relay 1 <a href=\"socket1On\"> <button><font size=8 color=green>Turn ON</font></button></a> ";
  webPage += "<a href=\"socket1Off\"><button><font size=8 color=red>Turn OFF</font></button></a>";
  webPage += "<br><br>";
  webPage += "Relay 2 <a href=\"socket2On\"><button><font size=8 color=green>Turn ON</font></button></a> ";
  webPage += "<a href=\"socket2Off\"><button><font size=8 color=red>Turn OFF</font></button></a>";
  webPage += "<br><br><br>";
  webPage += "<p><font size=5 > made by </font></p>";
  webPage += "<p><font size=5 color=#6699ff> <<< www.ardudevelop.eu >>> </font></p>";
  webPage += "</center>";  

  pinMode(gpio0_pin, OUTPUT);
   digitalWrite(gpio0_pin, LOW);
  pinMode(gpio2_pin, OUTPUT);
   digitalWrite(gpio2_pin, LOW);

 
  server.on("/socket1On", [](){
    server.send(200, "text/html", webPage);
    digitalWrite(gpio0_pin, HIGH);
    delay(1000);
  });
  
  server.on("/socket1Off", [](){
    server.send(200, "text/html", webPage);
    digitalWrite(gpio0_pin, LOW);
    delay(1000); 
  });
  
  server.on("/socket2On", [](){
    server.send(200, "text/html", webPage);
    digitalWrite(gpio2_pin, HIGH);
    delay(1000);
  });
  
  server.on("/socket2Off", [](){
    server.send(200, "text/html", webPage);
    digitalWrite(gpio2_pin, LOW);
    delay(1000); 
  });
  
  server.begin();
  Serial.println("HTTP server started");
}
 
void loop(void){
  ArduinoOTA.handle();
  server.handleClient();

} 

Вариант 2. Тук ще разгледаме възможността контролера ESP_8266 да се закачи към домашния ни рутер. Това ни дава възможност за достъп до контролира през интернет. Разбира се трябва да спазим някои процедури, като да пренасочим локалното “IP” на контролера към публичното “IP” както и да опишем портовете които използва. По дефиниция WEB използва порт 80, но не препоръчвам пренасочването към същия порт към интернет. Тук трябва да спомена, че тази процедура в различните рутери става по различен начин. Аз лично използвам MikroTik , съвета ми към вас е и вие да използвате такива рутери като разбира се за тях се изисква да се прочете малко повече.

Това е примерен софтуер за вариант WiFi-клиент:

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

MDNSResponder mdns;

const char* ssid = "MikroTik";      // Име на вашия рутер (SSID)
const char* password = "12345678";  // Парола на вашия рутер (PASS)

const char* www_username = "admin";  // Име на HTML оторизацията
const char* www_password = "123456"; // Парола на HTML оторизацията

ESP8266WebServer server(80);         // Порт на WEB сървъра
String webPage = "";


int gpio0_pin = 0;
int gpio2_pin = 2;


void setup(void){
  
  webPage += "<body bgcolor=cyan>";
  webPage += "<center>";
  webPage += "<h1>ESP8266 Web Server</h1>";
  webPage += "Button -1 <a href=\"socket1On\"> <button>turn ON</button></a> ";
  webPage += "<a href=\"socket1Off\"><button>turn OFF</button></a>";
  webPage += "<br><br>";
  webPage += "Button -2 <a href=\"socket2On\"><button>turn ON</button></a> ";
  webPage += "<a href=\"socket2Off\"><button>turn OFF</button></a>";
  webPage += "<p><font size=5 > made by </font></p>";
  webPage += "<p><font size=5 color=#6699ff> <<< www.ardudevelop.eu >>> </font></p>";
  webPage += "</center>";  
  
  // preparing GPIOs
  pinMode(gpio0_pin, OUTPUT);
  digitalWrite(gpio0_pin, LOW);
  pinMode(gpio2_pin, OUTPUT);
  digitalWrite(gpio2_pin, LOW);
  
  delay(100);
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  Serial.println("");

  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("Connect pass ");
  Serial.println(password);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
  
  if (mdns.begin("esp8266", WiFi.localIP())) {
    Serial.println("MDNS responder started");
  }
  
  ArduinoOTA.begin();
  
  server.on("/", [](){
    if(!server.authenticate(www_username, www_password)) 
     return server.requestAuthentication();
     //server.send(200, "text/html", webPage);
     server.send(200, "text/plain", "Login OK");
    }
   );
  
  server.on("/socket1On", [](){
    server.send(200, "text/html", webPage);
    digitalWrite(gpio0_pin, HIGH);
    delay(1000);
  });
  server.on("/socket1Off", [](){
    server.send(200, "text/html", webPage);
    digitalWrite(gpio0_pin, LOW);
    delay(1000); 
  });
  server.on("/socket2On", [](){
    server.send(200, "text/html", webPage);
    digitalWrite(gpio2_pin, HIGH);
    delay(1000);
  });
  server.on("/socket2Off", [](){
    server.send(200, "text/html", webPage);
    digitalWrite(gpio2_pin, LOW);
    delay(1000); 
  });
  server.begin();
  Serial.println("HTTP server started");
}
 
void loop(void){
  ArduinoOTA.handle();
  server.handleClient();

} 

Това е моята интерпретация на платформата:

ESP8266-01 двуканален WEB релеен борд

Надявам се тази идея за хардуерна платформа на “ESP8266-01 двуканален WEB релеен борд” да ви хареса. Тя е лесна за изработка и може да се ползва като част от домашна автоматизация.