0

我正在使用 NodeMCU (ESP8266) 作为车库开启器。当我靠近车库时,我会自动连接到我的 ESP 的 Wifi,并可以通过输入 URL(这是我 iPhone 上的“应用程序”)打开车库。这实际上效果很好。但是,连接到的时间wifi 从 1 到 100 秒不等,当我已经迟到时,这可能会有点令人沮丧。当我在 iPhone 上打开系统设置时,我已经可以看到 ESP-WiFi 正在连接,但有时需要很长时间(有时超过一分钟,有时只需几秒钟)完全连接,这是打开车库所需的。

  • 该设计旨在永不重启 ESP。
  • WiFi 只提供车库的连接,没有互联网或其他任何东西。
  • 我们仅将其用于数量有限的手机 (2)。因此,为这些电话使用静态 IP 是没有问题的。
  • 代码已使用 Arduino IDE 编写和上传

有没有人有快速修复的想法?

我还提供了下面的代码,该代码相当混乱,但可能有助于更好地理解。

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
 
String html1 = "<!DOCTYPE html>\r\n<html>\r\n\
<head>\r\n<meta content=\"text/html; charset=ISO-8859-1\" http-equiv=\"content-type\">\r\n\
<title>Webr</title>\r\n\
<form action=\"";

// String((val)?"/1.html":"/0.html")
String html2 = "\">\r\n<input value=\"GO!\" style=\"";
String html3 = " width:15em;height:7em; font-size: 50px;\" type=\"submit\">\
</form>\r\n</head>\r\n<body>\r\n</body>\r\n</html>";
 
ESP8266WebServer server(80);    // Server Port 
int val = 1;                    //Initial value (off)
String Temp = "";
bool TurnOn = false;
int timerValue = 1000;
int timer = timerValue;
int startTimer = 3000;
bool started = true;
const int outputpin = 4;

void Turn_ON()       // When calling "http://<ip address>/1.html"
{
  val = 0;                      // Relais Aus
  digitalWrite(outputpin, 1);         // GPIO0
  Temp = html1 + String((val) ? "/1.html" : "/0.html");
  Temp += html2 + String((val) ? "BACKGROUND-COLOR: DarkGray;" : "BACKGROUND-COLOR: Chartreuse;") + html3;
  server.send(200, "text/html", Temp);
  TurnOn = true;
}
 
void Turn_OFF()  // when calling "http://<ip address>//0.html"
{
  val = 1;                      // Relais Ein
  digitalWrite(outputpin, 0);         // GPIO0
  Temp = html1 + String((val) ? "/1.html" : "/0.html");
  Temp += html2 + String((val) ? "BACKGROUND-COLOR: DarkGray;" : "BACKGROUND-COLOR: Chartreuse;") + html3;
  server.send(200, "text/html", Temp);
}
 
void Turn_Index()           // when calling "http://<ip address>/"
{
  Temp = html1 + String((val) ? "/1.html" : "/0.html");
  Temp += html2 + String((val) ? "BACKGROUND-COLOR: DarkGray;" : "BACKGROUND-COLOR: Chartreuse;") + html3;
  server.send(200, "text/html", Temp);
}
 
void setup()
{
  //digitalWrite(outputpin, 0);           // Relay off
  pinMode(outputpin, OUTPUT);           // GPIO0 out
//  pinMode(2, INPUT_PULLUP);     // GPIO2 Pullup
//  digitalWrite(outputpin,0);           // Relay off
 
  Serial.begin(115200);         // Serial connection
  Serial.println("");           // print empty line
  WiFi.mode(WIFI_AP);           // access point modus
  WiFi.softAP("XXXXX", "XXXXX");    // Name and PW of WiFi
  delay(500);                   //Wait 0.5s
  Serial.print("IP Adresse ");  //Current server IP
  Serial.println(WiFi.softAPIP());
 
  //  Bechandlung der Turnsen anschlissen
  server.on("/", Turn_Index);
  server.on("/1.html", Turn_ON);
  server.on("/0.html", Turn_OFF);
 
  server.begin();               // Server start
  Serial.println("HTTP Server gestartet");
}
 
void loop()
{
 /* 
  *  
  *if(started == true){
  startTimer --;
        Serial.println(startTimer);

  }

  if(startTimer < 0){
      digitalWrite(0, 0); 
              Serial.println("Relais aus");
   started = false;

    }
    */
  

  if(TurnOn == true)
    {
    timer --;
      Serial.println(timer);

  }

    
  if(timer < 0){
          Serial.println("switch off");

    Turn_OFF();
    TurnOn = false;
    timer = timerValue;
  }
  
  server.handleClient();

  /*
  if (!digitalRead(2))          //GPIO2 press
  {
    val = !val;                 // change
    digitalWrite(0, val);
    while (!digitalRead(2))server.handleClient(); // button release.
  }
  */
  
  
}
4

0 回答 0