Hallo liebes Forum,
ich betreibe zu Hause einen Zentralstaubsauger. In den Handgriff habe ich einen ESP-01 eingebaut, der im Deepsleep vor sich her schlummert, bis der Taster gedrückt wird. Dann verbindet er sich im WLAN mit einer festen IP Adresse (WEMOS r1 d2 mini), der dann den Sauger ein- oder ausschaltet.
In letzter Zeit ist es so, dass wenn der Sauger das erste Mal nach langer Pause genutzt wird, das erste Einschalten bis zu 6 Sekunden dauert. Jedes weitere ein- oder ausschalten wird annährend sofort nach dem Tastendruck ausgeführt.
Hat jemand eine Idee, woran das liegen kann ?
Sketch Handgriff (ESP-01):
/*
Testsketch zur Dauer der WLAN-Anmeldung
https://forum.arduino.cc/t/esp8266-verzogerter-wlan-connect/950036/7
bei neuer programmierter WLAN-Verbindung einmalig ausführen:
WiFi.persistent(true);
WiFi.begin(xxx,yyy);
// WiFi(begin();
dann ändern in
// WiFi.persistent(true);
//WiFi.begin(xxx,yyy);
WiFi.begin();
*/
#include <ESP8266WiFi.h>
unsigned long StrtTime;
unsigned long ConnTime;
const char* ssid = "";
const char* password = "";
IPAddress staticIP(192, 168, 178, 10); // eigene IP
IPAddress gateway(192, 168, 178, 1); // Fritzbox Heimnetz
IPAddress subnet(255, 255, 255, 0);
WiFiServer server(80);
String header;
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
Serial.println("");
Serial.print("Start-Time: ");
StrtTime = millis();
Serial.println(StrtTime);
Serial.print("Verbinde mit ");
Serial.println(ssid);
//WiFi.persistent(true); //nur beim ersten Mal
WiFi.config(staticIP, gateway, subnet);
WiFi.begin(); //
//WiFi.begin(ssid, password); //WLAN-Verbindung starten nur einmal genutz
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println();
Serial.print("Verbunden-Time: ");
ConnTime = millis();
Serial.print(ConnTime);
Serial.println("");
Serial.print("Benötigt: ");
Serial.print((ConnTime - StrtTime) / 1000);
Serial.println(" Sekunden!");
Serial.println("WLAN verbunden");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
server.begin();
}
void loop() {
IPAddress server(192,168,178,80);
WiFiClient client;
client.connect(server,80);
delay(50);
client.println("Sauger\r");
Serial.println("Sauger umschalten");
client.flush();
ESP.deepSleep(0);
}
Sketch Sauger:
void WIFIClient() {
WiFiClient client = server.available(); // Listen for incoming clients
if (client) { // If a new client connects,
digitalWrite(ledPin, LOW); // to show the communication only (inverted logic)
if (client.connected()){
String Input=client.readStringUntil('\r');
client.flush();
if (Input.indexOf("Sauger") != -1 && sauger==1 && x==0) {
digitalWrite(Sauger,LOW); // loop while the client's connected
client.flush();
client.stop();
Serial.println("ein");
x=x+1;
//delay(250);
sauger=0;
}
else if(Input.indexOf("Sauger") != -1 && sauger==0 && x==0) {
digitalWrite(Sauger,HIGH); // loop while the client's connected
client.flush();
client.stop();
Serial.println("aus");
x=x+1;
//delay(250);
sauger=1;
}
}
}
if (!client.connected()) digitalWrite(ledPin, HIGH);
x=0;
}
Der Wemos vom Sauger ist ständig online und hat nur diese eine Funktion. Im loop steht nur, dass er WIFIClient() ausführen soll. Das kommt daher, dass früher der Sauger nur eine von vielen Funktionen war, bevor ich den Sauger separiert habe.