• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь ESP8266 кратковременное включение реле с WEB страницы

dimdima13

New member
Хочу сделать управление воротами. Для этого необходимо с WEB страницы нажать на кнопку открыть
кратковременно включится реле, которое своими контактами замкнет кнопку (ОТКРЫТЬ) на пускателе.
И соответственно три таких реле с управлением с WEB (ОТКРЫТЬ), (СТОП), (ЗАКРЫТЬ)

Вот приблизительный скетч только там все включения фиксируемые, подскажите что переделать
чтоб реле включалось на секунду а потом само отключалось.
Код:
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>

// GPIO, куда подключено реле
int rele1 = 12;
int rele2 = 15;
bool PowerRele1  = false;
bool PowerRele2  = false;


ESP8266WebServer server(80);
long int chipId;
const char *ssid = "Test";
//void webPage() {
//char webPage[700];
// snprintf(webPage,700,"<html><head><meta http-equiv='Content-Type' content='text/html; charset=UTF-8'/><title>Test</title></head><body><center><h1><br/>ESP8266 ID: %d<br/><br/></center></body></html>",chipId);
// server.send(200,"text/html",webPage);
//}
void setup (void) {
  delay(1000);
  Serial.begin(115200);
  chipId = ESP.getChipId();
  Serial.println();
  Serial.print("ChipId: ");
  Serial.println(chipId);
   pinMode(rele1 , OUTPUT);
  digitalWrite(rele1 , PowerRele1);
  pinMode(rele2 , OUTPUT);
  digitalWrite(rele2 , PowerRele2);
  // сервер-клиент:
  IPAddress apIP(192,168,4,1);
  WiFi.mode(WIFI_AP_STA);       // WiFi.mode(WIFI_AP);
  WiFi.softAPConfig(apIP,apIP,IPAddress(255,255,255,0));
  WiFi.softAP(ssid);
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(apIP);
  server.on("/", HTTP_handleRoot);
  server.begin();
  Serial.println("HTTP server started");
  Serial.println();
}
void loop (void) {
  server.handleClient();
delay(1); // не обязательно, Но желательно
}
void HTTP_handleRoot(void) {
  bool statrele1 = false;
  bool statrele2 = 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;
  }
 
// Формируем ШТМЛ страницу
  String out = "";

  out =
"<html>\
  <head>\
    <meta charset=\"utf-8\" />\
    <meta name='viewport' content='width=device-width, initial-scale=1, maximum-scale=1.0 user-scalable=no'/>\
    <title>Управление Реле</title>\
    <style>\
      body {background-color:#cccccc; color:#fbfd00; text-shadow: 0px 2px 6px rgba(0,0,0,0.4); font-family: Sans-Serif, Arial, Helvetica; }\
    </style>\
  </head>\
  <body>\
  <center>\
<br>\
<h1>ВЫ НАХОДИТЕСЬ НА ТЕРРИТОРИИ </h1>\
";

// Для реле 1
  if( statrele1 ){
      out+="\
      <p><button>Кнопка</button></p>\
   </h1> <hr border-radius=10px width=200 size=50 align=centre color=red><h2><a href=\"/?statrele1=0\">Открыть</a></h2>\
    ";
  }
  else {
      out+="\
    </h1> <hr width=100 size=30 align=left color=green><h2><a href=\"/?statrele1=1\">ON</a></h2>\
    ";           
  }

  // Для реле 2
  if( statrele2 ){
      out+="\
    <hr width=100 size=30 align=left color=red><h2><a href=\"/?statrele2=0\">OFF</a></h2>\
    ";
  }
  else {
      out+="\
    <hr width=100 size=30 align=left color=green><h2><a href=\"/?statrele2=1\">ON</a></h2>\
    ";           
  }

   // Общее
   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);
     
   }
  
         // Скобку оставить!
}
 

Вложения

Ivan113

New member
Хочу сделать управление воротами. Для этого необходимо с WEB страницы нажать на кнопку открыть
кратковременно включится реле, которое своими контактами замкнет кнопку (ОТКРЫТЬ) на пускателе.
И соответственно три таких реле с управлением с WEB (ОТКРЫТЬ), (СТОП), (ЗАКРЫТЬ)

Вот приблизительный скетч только там все включения фиксируемые, подскажите что переделать
чтоб реле включалось на секунду а потом само отключалось.
Код:
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>

// GPIO, куда подключено реле
int rele1 = 12;
int rele2 = 15;
bool PowerRele1  = false;
bool PowerRele2  = false;


ESP8266WebServer server(80);
long int chipId;
const char *ssid = "Test";
//void webPage() {
//char webPage[700];
// snprintf(webPage,700,"<html><head><meta http-equiv='Content-Type' content='text/html; charset=UTF-8'/><title>Test</title></head><body><center><h1><br/>ESP8266 ID: %d<br/><br/></center></body></html>",chipId);
// server.send(200,"text/html",webPage);
//}
void setup (void) {
  delay(1000);
  Serial.begin(115200);
  chipId = ESP.getChipId();
  Serial.println();
  Serial.print("ChipId: ");
  Serial.println(chipId);
   pinMode(rele1 , OUTPUT);
  digitalWrite(rele1 , PowerRele1);
  pinMode(rele2 , OUTPUT);
  digitalWrite(rele2 , PowerRele2);
  // сервер-клиент:
  IPAddress apIP(192,168,4,1);
  WiFi.mode(WIFI_AP_STA);       // WiFi.mode(WIFI_AP);
  WiFi.softAPConfig(apIP,apIP,IPAddress(255,255,255,0));
  WiFi.softAP(ssid);
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(apIP);
  server.on("/", HTTP_handleRoot);
  server.begin();
  Serial.println("HTTP server started");
  Serial.println();
}
void loop (void) {
  server.handleClient();
delay(1); // не обязательно, Но желательно
}
void HTTP_handleRoot(void) {
  bool statrele1 = false;
  bool statrele2 = 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;
  }
 
// Формируем ШТМЛ страницу
  String out = "";

  out =
"<html>\
  <head>\
    <meta charset=\"utf-8\" />\
    <meta name='viewport' content='width=device-width, initial-scale=1, maximum-scale=1.0 user-scalable=no'/>\
    <title>Управление Реле</title>\
    <style>\
      body {background-color:#cccccc; color:#fbfd00; text-shadow: 0px 2px 6px rgba(0,0,0,0.4); font-family: Sans-Serif, Arial, Helvetica; }\
    </style>\
  </head>\
  <body>\
  <center>\
<br>\
<h1>ВЫ НАХОДИТЕСЬ НА ТЕРРИТОРИИ </h1>\
";

// Для реле 1
  if( statrele1 ){
      out+="\
      <p><button>Кнопка</button></p>\
   </h1> <hr border-radius=10px width=200 size=50 align=centre color=red><h2><a href=\"/?statrele1=0\">Открыть</a></h2>\
    ";
  }
  else {
      out+="\
    </h1> <hr width=100 size=30 align=left color=green><h2><a href=\"/?statrele1=1\">ON</a></h2>\
    ";          
  }

  // Для реле 2
  if( statrele2 ){
      out+="\
    <hr width=100 size=30 align=left color=red><h2><a href=\"/?statrele2=0\">OFF</a></h2>\
    ";
  }
  else {
      out+="\
    <hr width=100 size=30 align=left color=green><h2><a href=\"/?statrele2=1\">ON</a></h2>\
    ";          
  }

   // Общее
   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);
    
   }
 
         // Скобку оставить!
}
Ну проще всего (и не совсем правильно) после включения реле сделать delay и выключить. Более правильно делать задержку по таймеру. В дурине не силён, поэтому без конкретики.
 

Сергей_Ф

Moderator
Команда форума
@dimdima13 посмотрите в сторону ticker. С его помощью отмерьте нужный интервал времени, после которого выключите реле.
 

dimdima13

New member
С delay не получается, так как со страници пришла команда на включение. и эта команда висит ( statrele1=0,statrele1=1)
 

Ivan113

New member
Ну почему же нельзя?
Код:
digitalWrite(rele1 , 1);
Delay(1000ms);
digitalWrite(rele1 , 0);
Но и имеющийся код при этом избыточный, и можно его оптимизировать
 
Сверху Снизу