我正在使用 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.
}
*/
}