ESP32 nach Deepsleep keine verbindung zum WLAN möglich

Hallo zusammen,
ich habe ein kleines Problem mit meinem ESP32 Dev Kit.

und zwar versuche ich mich alle 5 Minuten zu meinem WLAN zu verbinden und den gemessenen ADC Wert (Spannungswert einer Batterie) an meinen Server zu schicken.

Das senden funktioniert auch tadellos, sofern der ESP eine verbindung zum WLAN aufbaut.
dies tut er allerdings nicht zuverlässig.

Ich such nun bereits nach 3 Tagen an einer Lösung und habe bereits diverse Lösungsansätze Probiert.
wie z.B.

  • FritzBox7590 Wlan auf Kanal 1 gesetzt ( auch auf Kanal8 und Autokanal)
  • anderen AcessPoint als Zugangspunkt geschaffen
  • ESP Erase
  • neuen ESP genommen

Sobald sich der ESP einmal verbunden hat dauert es sehr lange (Teilweise ü24 Stunden ) bist sich der wieder verbindet.

Ich muss dazu sagen Ich bin leider Anfänger in dem Bereich und habe mir sehr viele Sachen über Tutorials zusammen gesucht.

Ich Hoffe ihr könnt mir helfen.

Vielen Dank schonmal.

Hier ist noch der Code =)

den musste ich leider auf einen 2. Eintrag machen da zu vielen Zeichen =)

#include <WiFi.h>
#include <ESPmDNS.h>
#include <SPIFFS.h>
#include <WiFiClient.h>
#include <string.h>
#include <FS.h>
#include <WebServer.h>

#include <WiFiMulti.h>
WiFiMulti wifiMulti;
#include <esp_wifi.h>

const char* WertAnalog = "" ;
const char* Spannung = "" ;

const char* serial = "Sensor1";  // Seriennummer 
float Faktor = 71.133333;   // Für die Berechnung A0 --> Spannung
float Korrektur = 0.35; // Korrekturwert
const char* hostname="www.meinserver.de";
int countUp = 0;
#define uS_TO_S_FACTOR 1000000 /* Conversion factor for u seconds to seconds */
#define TIME_TO_SLEEP 300 /* Time ESP32 will go to sleep (in seconds) */
WiFiClient client;


WebServer server(80);

#define debug true
#define SetupPin 14   // INI wifimanager starten mit LOW-Pegel an SetupPin

#include "INIwifimanager.h"
String ssid,ssid2, password,password2,host ;
float korr1,korr2,korr3,korr4,korr5,korr6,korr7,korr8,korr9,korr10,korr11,korr12,korr13,korr14,korr15,korr16,korr17,korr18,korr19,korr20,korr21,korr22;
  //**********
  //  Diese Funktion wird beim lesen jeder Zeile der INI-Datei ausgeführt         *
  //***********
void DatenLaden (String argument, String Wert)
{
String wert1, wert2;

  if (argument.indexOf ( "wifidata" ) >= 0)
  {
    int inx = Wert.indexOf ( "/" ) ;    // 2 Werte getrent durch "/" Zeichen
    wert1 = Wert.substring ( 0, inx ) ; // Zugangsdaten = MeinWiFi/MeinPasswort
    wert2 = Wert.substring ( inx + 1 ) ;
    wifiMulti.addAP(wert1.c_str(), wert2.c_str());
  }


if (argument.indexOf ( "hostname" ) >= 0)   host = Wert;
if (argument.indexOf ( "korr1" ) >= 0)   korr1 = Wert.toFloat();
if (argument.indexOf ( "korr2" ) >= 0)   korr2 = Wert.toFloat();
if (argument.indexOf ( "korr3" ) >= 0)   korr3 = Wert.toFloat();
if (argument.indexOf ( "korr4" ) >= 0)   korr4 = Wert.toFloat();
if (argument.indexOf ( "korr5" ) >= 0)   korr5 = Wert.toFloat();
if (argument.indexOf ( "korr6" ) >= 0)   korr6 = Wert.toFloat();
if (argument.indexOf ( "korr7" ) >= 0)   korr7 = Wert.toFloat();
if (argument.indexOf ( "korr8" ) >= 0)   korr8 = Wert.toFloat();
if (argument.indexOf ( "korr9" ) >= 0)   korr9 = Wert.toFloat();
if (argument.indexOf ( "korr10" ) >= 0)   korr10 = Wert.toFloat();
if (argument.indexOf ( "korr11" ) >= 0)   korr11 = Wert.toFloat();
if (argument.indexOf ( "korr12" ) >= 0)   korr12 = Wert.toFloat();
if (argument.indexOf ( "korr13" ) >= 0)   korr13 = Wert.toFloat();
if (argument.indexOf ( "korr14" ) >= 0)   korr14 = Wert.toFloat();
if (argument.indexOf ( "korr15" ) >= 0)   korr15 = Wert.toFloat();
if (argument.indexOf ( "korr16" ) >= 0)   korr16 = Wert.toFloat();
if (argument.indexOf ( "korr17" ) >= 0)   korr17 = Wert.toFloat();
if (argument.indexOf ( "korr18" ) >= 0)   korr18 = Wert.toFloat();
if (argument.indexOf ( "korr19" ) >= 0)   korr19 = Wert.toFloat();
if (argument.indexOf ( "korr20" ) >= 0)   korr20 = Wert.toFloat();
if (argument.indexOf ( "korr21" ) >= 0)   korr21 = Wert.toFloat();
if (argument.indexOf ( "korr22" ) >= 0)   korr22 = Wert.toFloat();


}
void IRAM_ATTR isr() {
  digitalWrite(LED_BUILTIN, LOW);
  Einstellen(); 
  
}
void setup()
{
  Serial.println("Wifi Status");
  Serial.println(WiFi.status());  
  pinMode(LED_BUILTIN, OUTPUT);
  attachInterrupt(SetupPin, isr, FALLING);
  char inser;
  Serial.begin(115200);
  Serial.println("ini lesen");
  esp_wifi_start();
  
  if (!INI_Einlesen())  Einstellen();     // INI -Datei einlesen, wenn geht nicht, starte INI WiFiManager
  Serial.println("Wifi Status");
  Serial.println(WiFi.status());
  
  //*******
  //pinMode(SetupPin, INPUT_PULLUP);       // starte INI WiFiManager wenn SetupPin Low ist
  //digitalWrite(SetupPin,HIGH);
  delay(3000);
  if (!digitalRead(SetupPin)) Einstellen();
 
 
  //*******
  //                       Starte WiFi Verbindung                                *
  //*****
  if (debug)Serial.println("Warte auf Verbindung");
  Serial.println("jetzt Starten Wifi");
  delay(300);
//  if (wifiMulti.run() != WL_CONNECTED) Einstellen();
  while (wifiMulti.run() != WL_CONNECTED) {
        
         delay(500);
         Serial.print(".");
          countUp = countUp+1;// Zähler hochzählen falls keine Verbindung
          if(countUp >= 60){
            //esp_wifi_stop();
            //esp_wifi_deinit();
              Serial.println("Wifi Status");
              Serial.println(WiFi.status());
              Serial.println("Schlafmodus ");
              delay(3000);
              esp_wifi_disconnect();
              delay(100);
              esp_wifi_stop();
              delay(100);
              esp_wifi_deinit();
              delay(3000); 
              Serial.println("Wifi Status");
              Serial.println(WiFi.status());
            esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
            esp_deep_sleep_start();


      
          //ESP.restart();//Wenn größer gleich 240(2Minuten) dann Neustart
           }
          }
  
  if (debug) Serial.println("Verbunden mit " + WiFi.SSID());
  if (debug) Serial.print("IP Addresse: ");
  if (debug) Serial.println(WiFi.localIP());
  MDNS.begin(host.c_str());
  if (debug) Serial.println("Offnen Sie http://" + host + ".local in Ihrem Browser");

  server.onNotFound([]() {
    server.send(404, "text/plain", "FileNotFound");
  });

  server.on("/", []() {         // index.html an Browser senden
    File file = SPIFFS.open("/index.html", "r");
    size_t sent = server.streamFile(file, "text/html");
    file.close();
  });

  server.begin();
  if (debug)Serial.println("HTTP Server gestartet");
}

void loop()
{
  server.handleClient();
  delay(4000);
  int sensorValue = analogRead(A0); 
 Serial.println(sensorValue);

//##   Spannung senden 
  

  // Faktor an Wert anpassen 
if(sensorValue >= 100 && sensorValue < 499) {
    Faktor = 86.9461279; 
    Korrektur = korr1;
}
else if(sensorValue <700){
     Faktor = 89.1172161; 
    Korrektur = korr2;
}
else if(sensorValue <800){
     Faktor = 94.2958333; 
    Korrektur = korr3;
}
else if(sensorValue <1000){
     Faktor = 97.6452242; 
     Korrektur = korr4;
}
else if(sensorValue <1100){
     Faktor = 101.202381; 
     Korrektur = korr5;
}
else if(sensorValue <1300){
     Faktor = 103.892732; 
     Korrektur = korr6;
}
else if(sensorValue <1400){
     Faktor = 105.523077; 
     Korrektur = korr7;
}
else if(sensorValue <1600){
     Faktor = 107.384723; 
     Korrektur = korr8;
}
else if(sensorValue <1700){
     Faktor = 108.983871; 
     Korrektur = korr9;
}
else if(sensorValue <1900){
     Faktor = 109.890969; 
     Korrektur = korr10;
}
else if(sensorValue <2000){
     Faktor = 110.869841; 
     Korrektur = korr11;
}
else if(sensorValue <2200){
     Faktor = 111.8725; 
     Korrektur = korr12;
}
else if(sensorValue <2320){
     Faktor = 112.667683; 
     Korrektur = korr13;
}
else if(sensorValue <2500){
     Faktor = 113.080607; 
     Korrektur = korr14;
}
else if(sensorValue <2630){
     Faktor = 113.71256; 
     Korrektur = korr15;
}
else if(sensorValue <2830){
     Faktor = 114.398267; 
     Korrektur = korr16;
}
else if(sensorValue <2960){
     Faktor = 115.047059; 
     Korrektur = korr17;
}
else if(sensorValue <3200){
     Faktor = 115.954667; 
     Korrektur = korr18;
}
else if(sensorValue <3330){
     Faktor = 117.42013;
     Korrektur = korr19;
}
else if(sensorValue <3600){
     Faktor = 119.585322; 
     Korrektur = korr20;
}
else if(sensorValue <3700){
     Faktor = 121.933333; 
    Korrektur = korr21;;
}
else if(sensorValue <4400){
     Faktor = 124.987564458;
     Korrektur = korr22;
}
  float voltage = sensorValue / Faktor + Korrektur;
Serial.println("\nStarting connection to server...");
Serial.println(sensorValue);
  //URL wird erzeugt und gesendet
  WiFiClient client;
  if (client.connect(hostname, 80)) {
    String url = "Eintragen.php";
    url += "?serialnumber=";
    url += serial;
    url += "&wert=";
    url += voltage;

    Serial.println(url);
    client.print(String("GET ") + url + " HTTP/1.1\r\n" +
                 "Host: " + hostname + "\r\n" +
                 "Connection: close\r\n\r\n");
    client.println();  //Verbindungs mit Server aufbauen und HTTP Anfrage senden
    
  }
  client.stop();
  //Beenden der Verbindung
  
  Serial.println("Wifi Status");
  Serial.println(WiFi.status());
  Serial.println("Schlafmodus 3 sek warten");
  delay(3000);
  esp_wifi_disconnect();
  delay(100);
  esp_wifi_stop();
  delay(100);
  esp_wifi_deinit();
  delay(3000); 
  Serial.println("Wifi Status");
  Serial.println(WiFi.status());
  esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
  esp_deep_sleep_start();

}

MrAndy112:
Sobald sich der ESP einmal verbunden hat dauert es sehr lange (Teilweise ü24 Stunden ) bist sich der wieder verbindet.

bitte beschreibe deine Fehlerbeobachtung ganz genau!

Verbindet sich der ESP dann nicht mehr oder geht er wieder in den Deepsleep ohne dass es zum Senden kommt?

Wenn ich diese Zeilen interpretiere:

    delay(500);
    Serial.print(".");
    countUp = countUp + 1; // Zähler hochzählen falls keine Verbindung
    if (countUp >= 60) {

dann würde ich erwarten, dass der ESP im Verbindungs-Fehlerfall nach 60x 500ms wieder in den Deepsleep geht.

Vieleicht sogar eine Serial Ausgabe posten.

Zweite Frage: Nach welchem Deepsleep Tutorial arbeitest du? verlinken!

Hallo. Danke für deine Antwort.

Der ESP verbindet sich leider dann nicht mehr mit dem WLAN

Über die Serielle Schnittstelle werden nur „.“ dann angezeigt also 60 mal bis er eben in den Deepsleep geht und nach 5 Minuten erneut aufwacht und und das Spiel von vorne beginnt.

Das hier war die Vorlage
http://esp32-server.de/ini/

zum Probieren: mach vor dem Deepsleep einen sauberen wifi disconnect.

Okay danke. Aber is das nicht bereits sauber mit dem disconnect ?

Oder wie macht man das sauber?

Weil wenn ich mir die Statuse über serial ansehe dann ist es mal 255 dann mal 3 dann mal 4 dann aber auch 6