Lange Reaktionszeit bei WiFi und Deepsleep

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.

Die längste Zeit wird dein ESP01 für die Netzwerkeinwahl brauchen.

Warum muss das über Wlan erfolgen ?
Es gibt kleine 2,4 GHz Funkmodule zur Fernsteuerung, die wären besser geeignet.

Diese z.B.

Die Netzwerkeinwahl liegt bei unter einer Sekunde (habe ich ganz oft vorher ausprobiert). Es ist komischer Weise auch erst seit einiger Zeit und immer nur bei dem ersten Einschalten.

Warum WLAN ?
Damit habe ich bis dahin viel rumgespielt und der ESP-01 inclusive Akkus passt gerade so in den Handgriff. Ich fürchte, dass die anderen Module größer wären.

Habe deinen Link nicht gesehen, Danke, das könnte passen ...

Ich habe oben noch ein entsprechendes Beispiel angehängt.

Und mit der Einwahl hängt es von vielen Faktoren ab.

Ok, hatte ich auch nachträglich reingesetzt.

Hallo,
die Anmeldung am Netz hast Du ja bereits mit millis gut getestet und sagst das dauert nicht lange. Wenn dem so ist kann es ja eigentlich nur an dem Verbindungsaufbau zu dem Sauger liegen. Bau doch da noch mal zwei Zeilen ein um die Zeiten zu messen.
ich würde auch eventuell mal so versuchen

void loop() {
IPAddress server(192,168,178,80);
      WiFiClient client;
      Serial.println(millis()); 
      client.connect(server,80);
      delay(50);
      client.println("Sauger\r");
      Serial.println("Sauger umschalten");
      client.flush();
      delay(100);
      client.stop();
      Serial.println(millis());
      ESP.deepSleep(0)
      delay(1);
}

Hallo Rentner,

vielen Dank für deinen Tipp. Leider ist im Handgriff des Saugschlauches so wenig Platz, so dass der ESP-01 seine 8 Pins lassen musste, und jetzt nur wenige Adern angelötet sind.
Somit kann ich leider weder das Programm ändern, noch mich Serial draufsetzen.
Die Verbindungszeiten hatte ich damals im Versuchsaufbau gemessen.

Trotzdem vielen Dank !

Ein ESP8266-01 ist doch sehr preiswert, da könnte man doch durchaus nochmal "zuschlagen" :wink:
Und wenn die gemessen Verbindungszeit schon älter ist, kann die heute durchaus eine andere sein. Wie schon geschrieben, ist die von vielen Dingen abhängig.

Wollt ich auch sagen. Die Messung kannst Du ja auf einer anderen, gleichen Hardware, machen, die Du nicht verbaut hast.

Grüße Uwe

Hallo,
Ideen gabs ja schon , wenn Du jedoch nichts mehr probieren oder ändern kannst / willst dann sieht´s schlecht aus.

Moin,

von den ESP-01 habe ich noch welche rumliegen. Da werde ich mal einen programmieren und testen.
Ich habe mir die 2,4 GHz Funkmodule bestellt, und werde mit denen mal ein wenig rumspielen, da meine WiFi-Verbindung zu anderen ESPs (die draußen verbaut sind) bei starkem Regen oder Nebel gerne mal abreißt.
Vielen Dnak für den bzw die Tipps.

Kannst du dir denn die Feldstärke (RSSI) der einzelnen Module anzeigen lassen ?
Ich kann die bei mir von jedem Modul auf der Website sowie in einer Admin-Seite ansehen. Und da ist es bei mir (merkwürdigerweise) genau andersrum.
Alle ESP8266 die ich im Garten habe, zeigen bei Regen eine deutlich bessere Feldstärke an.
Und die Funkmodule sind witzig, funktionieren aber erstaunlich gut. Habe die bei mir nur zum testen gehabt und für einen bekannten programmiert.

Moin,

ich verzweifel seit geraumer Zeit an diesen Modulen:

Ich habe diverse Foren durchsucht, viele Sketche probiert …

Die einzige Antwort, die ich von den Geräten (JDY-40-V3) bekomme, ist [ERROR]. Kein OK,WAKE, oder sonst etwas. Vollkommen egal, wie ich z.B. [AT] schreibe, und mit welcher Endung kombiniere.

…und das schon beim dritten Modul! Liegt es evtl. an V3 ?

Dann liegt evtl. ein Verdrahtungsfehler vor.
So kann ich nichts dazu sagen.

Meine damaligen Versuche (für einen Freund) waren alle positiv und die endgültige Steuerung hat direkt über die GPIOs funktioniert.

hast du dir die Doku in dem Link von mir angesehen. Da ist doch alles genau beschrieben.
Einen speziellen Sketch brauchst du nicht dafür. Einstellungen per serieller und gut ists.

Das einzige was mir an der Doku auffällt, ist die VCC. Die ist mit 22-36 Volt angegeben. Ist natürlich Blödsinn und muss heißen "2,2V -3,6V".
Und die serielle Steuerung sollte dann von einem entsprechenden Board (3,3V) erfolgen.

Zeig doch mal, wie du die Module einstellen möchtest. Dann kann man dir auch weitere Tipps geben.

Und in Post #13 hatte ich dir eine Frage gestellt.

Das werde ich bei Gelegenheit mal ausprobieren. Da ich bei den Modulen im Garten (5 Stk) keinen Webserver laufen habe, werde ich ein wenig umprogrammieren müssen. Steht auf der Liste - wird aber ein wenig dauern…

Mein Aufbau ist wie folgt:

Mein Labornetzgerät ist auf 2,8 V eingestellt (Strom wären 2,5 A möglich) und speist eine kleine Platine, auf der das Board montiert ist. Auf dieser Platine befindet sichnoch ein 1000uF-Kondensator.

Jeweils ein 10k-Widerstand fungieren als pulldown für RX und TX.

Auf GND sind noch drei weitere Steckplätze für SET, CS und GND vom Uno.

Beim Uno (Kommunikation mit dem Board mit 9600 Bps) nutze ich die PINs 10 und 11 für RX und TX (der Uno gibt doch 5V raus, kille ich damit jedesmal das Board ?).

Derzeit bekomme ich nicht mal ein sauberes EROR, sondern nur Hyroglyphen. Ist wohl wieder Zeit für ein neues Board, das muss aber ein paar Tage warten…

Gibt es einen Tipp für einen Serial-UART-Adapter ?

Könnte gut sein. Nimm einen Controller mit 3.3v. z.b. einen ESP

Deine Schaltung ist def. nicht funktionsfähig.

Da kann ich nur Diesen hier empfehlen. Besorge dir den und das wird funktionieren. Und bitte nur den und keinen billigen aus CN.

Wozu das ?
Vermute du hast dir die zugehörige Doku nicht durchgelesen.