ESP32 WiFi reconnect

Hallo zusammen,
ich habe meinem Mäher mit der RFID und WiFi Option über einen ESP32 aufgerüstet. Dazu ist das Bluetoth Modul rausgeflogen und ich habe ein ESP32U Bord mit externer Antenne eingebaut. Die Verbindung war mal da, dann wieder weg, wieder Da, weg, weg, da, nicht mehr zu verbinden. Also furchtbar. Es musste also die WiFi Abdeckung im Garten verbessert werden - dachte ich. Nachdem ich eine Powerlanverbindung ins Gartenhaus gelegt habe und ein weiterer Repeater im Garten lief, war die Abdeckung top. Das hat aber nichts an dem Verhalten des ESP32U verbessert. Wie ich dann häufig gelesen habe, bin ich mit diesem Problem nicht allein. Der ESP32 soll demnach ein Bug haben, sodass eine Verbindung immer wieder getrennt wird oder er ganz hängt.
Als Zwischenlösung habe ich den Code (siehe unten) in die ESP32_RFID_MQTT.ino eingefügt. Über die drei Events wird die Verbindung zum WLAN gesteuert. Tritt ein Event ein (im Setup definiert), wird die entsprechende Funktion aufgerufen. Das schöne dabei ist, dass der Verbindungsaufbau den ESP nicht blockiert. Der Code wird weiter ausgeführt. Details dazu sind auf der Seite von uPesy nachzulesen.
Damit bekomme ich zumindest immer eine Verbindung, doch leider auch nicht stabil. Manuell zu fahren ist z.B. nicht gut möglich.
Kennt ihr eine bessere Abhilfe für die Verbindungsprobleme? Gibt es ein Update für die ESP32 Bords? Ich konnte bisher leider nichts finden. Oder funktionieren die ESP32D DevKit mit interner Antenne doch besser? Ich hab auch schon überlegt einen ESP8266 für die WLAN-Aufgabe zu nutzen....
Überlegt habe ich auch schon, ob die pfodApp womöglich nicht sauber läuft. Bei einem Hänger war ein Ping möglich (?!). Arduremote läuft ja nur per Bluetooth, da aber stabil. Gibt es eine andere App zum Testen der Verbindung?

Danke
Jens

void connected_to_ap(WiFiEvent_t wifi_event, WiFiEventInfo_t wifi_info){
Serial.println("[+] Connected to the WiFi network");
}
void disconnected_from_ap(WiFiEvent_t wifi_event, WiFiEventInfo_t wifi_info){
Serial.println("[-] Disconnected from the WiFi AP");
reconnect_count++;
if (reconnect_count < 10) {
WiFi.begin(ssid, pw);
}else{
ESP.restart();
}
}
void got_ip_from_ap(WiFiEvent_t wifi_event, WiFiEventInfo_t wifi_info){
Serial.print("[+] Local ESP32 IP: ");
Serial.println(WiFi.localIP());
}

void setup() {
// setup code
//********************************WIFI init code*************************************

if (MODE_STA == true) {
if (debug) Serial.println("Start ESP32 Station mode");
//Se
WiFi.mode(WIFI_STA);
WiFi.onEvent(connected_to_ap, SYSTEM_EVENT_STA_CONNECTED);
WiFi.onEvent(got_ip_from_ap, SYSTEM_EVENT_STA_GOT_IP);
WiFi.onEvent(disconnected_from_ap, SYSTEM_EVENT_STA_DISCONNECTED);
WiFi.config(ip, gateway, netmask);
WiFi.begin(ssid, pw);
Serial.println("\nConnecting");
}

//setup code
}
 
Oh man, Sorry..:oops:..hab gerade den Thread vom Michelko gesehen - ESP32 WLAN ABBRÜCHE - seeeehr ähnliches Thema.
Da werde ich erstmal die Kondensatoren in der Spannungsversorgung testen ....
 
Ich habe inzwischen den Eindruck, daß die esp32 auch ein kleines Qualitätsproblem haben. Zunächst war ich der Meinung, daß bei den sommerlichen Temperaturen mein esp32 Funktions- oder Verbindungsprobleme hat. Nach dem Starten bei kaltem Gehäuse alles gut, dann bei warmem Gehäuse (>30°) keine Verbindung mehr. Das war sehr schön zu reproduzieren. Als ich die Nase dann voll hatte, habe ich den esp32 gewechselt gegen einen anderne, bauglichen -> Problem erledigt.

Ich nutze jetzt die WiFiMulti.h Bibliothek. Die hat den Vorteil, daß mehrere Verbindungen abgefragt werden und in das stärkste wlan eingewählt wird. Da meine 3 Antenne im Garten unter der gleichen Kennung laufen hat das wirklich Vorteile. jetzt wählt sich der esp32 je nach Position in den stärksten AP ein. Das Wiederverbinden funktioniert gut (gefühlt besser als vorher - aber nur gefühlt).

Ich habe am Webserver für azuritBer weiter gearbeitet, gerade heute noch ein paar Rückmeldungen bekommen. Nächste Version ist auf dem Weg.

Gruß Fürst Ruprecht


für den frühen Vogel:
 
Oben