ESP32 Abstürze durch Speicherleck

Silberstreifen

Active member
Hallo zusammen,
ich bin gerade dabei meinen Ardumower zu komplettieren und habe in diesem Zusammenhang gestern meinen ESP32 aus dem GPS-RTK-Kit nach Anleitung geflasht. Was direkt auffiel:
  1. Der ESP verbindet sich trotz externer Antenne sehr viel widerwilliger mit meinem WLAN als alle anderen ESP32, die ich sonst so im Einsatz habe.
  2. Der ESP hat ein Speicherleck, was zu unregelmäßigen Abstürzen/Reboots im Abstand von 3...60 Minuten führt.
In dieser Kombination ist das Modul für mich unbrauchbar, weshalb ich -nachdem ich hier im Forum nichts zu dem Thema gefunden habe- etwas rumexperiementiert und auch eine sehr stabile Lösung gefunden habe.

Ich schreibe die Lösung hier mal runter, falls andere User mit dem gleichen Problem kämpfen.

1. Schritt
Zur Behebung des Speicherlecks habe ich die Board-Firmware von der empfohlenen Version 1.04 auf die aktuelle Version 1.06 upgedatet. Dadurch ist das Speicherleck weg. Leider aber auch die Verbindung zu meinem WLAN-Netz.

2. Schritt
Die Verbindungsprobleme lassen sich sehr gut durch folgende Code-Änderung in der esp32_ble.ino beheben
// nextWifiConnectTime = millis() + 20000;
nextWifiConnectTime = millis() + 2000;
/*
if (WiFi.waitForConnectResult() != WL_CONNECTED) {
CONSOLE.println("Connection Failed!");
delay(2000);
return;
};
*/

WiFi.disconnect(); // disconnect any previous (aborted) connection
delay(2000);
WiFi.begin(ssid.c_str(), pass.c_str());
int tries = 0;
while (WiFi.status() != WL_CONNECTED) {
if(tries++ > 10){
CONSOLE.println("Connection Failed!");
return;
}
delay(500);
Serial.print(".");
}
Damit klappt die Verbindung mit dem WLAN sehr stabil und ohne jegliche Probleme.

Mit dieser Änderung habe ich seit gestern keinen einzigen Reboot und keinerlei Verbindungsabbrüche mehr gehabt.
 
Leider läuft mein ESP32 trotzdem noch nicht stabil. ☹️
Die Verbindung mit WLAN und Bluetooth klappt einwandfrei und es gibt auch keine Abstürze mehr. Die HTTP-Verbindung hängt sich allerdings ständig auf. Bin ich da der Einzige mit dem Problem? Was kann da schief gelaufen sein?

Und noch eine grundsätzliche Frage:
Kann ich eine USB-Verbindung zur ArduinoIDE aufbauen, wenn der ESP mit der PCB verbunden ist und von dort mit Strom versorgt wird?
Oder mache ich da aufgrund der doppelten Stromversorgung etwas kaputt?
Das wäre sehr hilfreich um zu verstehen, was da schief läuft.
 
Die HTTP-Verbindung hängt sich allerdings ständig auf.
Du meinst die Verbindung mit der Sunray App? Nein du bist nicht der einzige, gab schon viele User (inkl. mich), die das angemerkt haben. Das Problem liegt hier an der Sunray App. Warum? Weil andere HTTP Verbindungen (z.B. Hausautomations-Server) laufen ohne Verbindungsabbrüche.

Kann ich eine USB-Verbindung zur ArduinoIDE aufbauen, wenn der ESP mit der PCB verbunden ist und von dort mit Strom versorgt wird?
Kannst nichts kaputt machen, ich habe einen Raspberry Pi dauerhaft im Rover verbaut, der über USB sowohl mit dem ESP32 als auch mit dem Arduino(Adafruit) verbunden ist
 
Du meinst die Verbindung mit der Sunray App? Nein du bist nicht der einzige, gab schon viele User (inkl. mich), die das angemerkt haben. Das Problem liegt hier an der Sunray App. Warum? Weil andere HTTP Verbindungen (z.B. Hausautomations-Server) laufen ohne Verbindungsabbrüche.
Jepp, genau die. Bei mir ist es allerdings so, dass bei Aufruf der ESP-Server-Seite bei Verbindungsabbruch mit der "App" auch keine Verbindung mehr zustande kommt. Ich bin deshalb davon ausgegangen, dass der HTTP-Serverdes ESP die Grätsche gemacht hat. Nach Neustart des ESP ist dann für kurze Zeit wieder alles gut. Habe ich da einen Denkfehler? Kann ja auch alles Zufall sein.
Kannst nichts kaputt machen, ich habe einen Raspberry Pi dauerhaft im Rover verbaut, der über USB sowohl mit dem ESP32 als auch mit dem Arduino(Adafruit) verbunden ist
Super, das macht das Debuggen deutlich einfacher. Gilt das auch bei externem 5V-Versorgung durch den PC, der ja nicht wie dein Raspi am Akku mit dranhängt. Habe etwas Sorge mir durch konkurierende Spannungsquellen die PCB zu schrotten.
 
Bei mir ist es allerdings so, dass bei Aufruf der ESP-Server-Seite bei Verbindungsabbruch mit der "App" auch keine Verbindung mehr zustande kommt.
Welche Serverseite? Nutzt du ardumower_modem? Die FW hat bei mir auch dauernd abgestürzt. Seit dem nutze ich die FW aus Sunray GitHub, hier habe ich wenigstens keine Freezes, wo ich komplett alles stromlos machen muss.

Gilt das auch bei externem 5V-Versorgung durch den PC, der ja nicht wie dein Raspi am Akku mit dranhängt. Habe etwas Sorge mir durch konkurierende Spannungsquellen die PCB zu schrotten.
Ja, geht auch. Hatte zu Anfangszeiten auch mein Debuging so betrieben.

Gruß
Alexander
 
Welche Serverseite? Nutzt du ardumower_modem? Die FW hat bei mir auch dauernd abgestürzt. Seit dem nutze ich die FW aus Sunray GitHub, hier habe ich wenigstens keine Freezes, wo ich komplett alles stromlos machen muss.
Ich nutze die Firmware laut Sunray-Anleitung aus GitHub. Da der ESP32 einen HTTP-Server aufbaut, kann man dann auch die Seite über die IP aufrufen. Da ist dann zwar kein sichtbarer Inhalt, aber ich weiß dadurch, ob der Server noch läuft.
Ja, geht auch. Hatte zu Anfangszeiten auch mein Debuging so betrieben.
Sehr cool. Damit komme ich dem Fehler dann sicherlich deutlich schneller auf die Spur.
 
ja, anpingen kann ich ihn dann auch noch. Bluetooth geht ebenfalls, lediglich der HTTP-Server ist weg. Rufe mal im Browser die IP deines ESP32 auf. Dann kommt eine leere Seite als Antwort. Wenn der HTTP-Server abgeschmiert ist, kommt "Seite nicht erreichbar" als Antwort.
 
Dass der ESP32 komplett aussteigt kenne ich nur von der ardumower _modem FW. Mit der FW aus dem GitHub konnte ich sowas noch nicht beobachten, die Verbindung zu Sunray App ist regelmäßig weg, aber nach kurzer Zeit fängt er sich wieder und der Rover ist wieder erreichbar.
 
ok, werde ich mal weiter beobachten und mir auch die Datenflüsse mal angucken. Das macht einen ja nicht dümmer.
Danke für deine vielen guten Hinweis. Das hat mir bis hierher schon super geholfen.

Grüße
Jürgen
 
So, aktuell läuft mein HTTP-Server stabil. Habe da am Wochenende nochmal intensiv draufgeguckt und folgende Zeile in der esp_ble.ino wegkommentiert.
Code:
//if (!bleConnected) {
    if (server != NULL) server->loop();
//}
Vorher war es so, dass bei jeder Bluetooth-Verbindung der HTTP-Server abgeschaltet und erst wieder aktiviert wurde, wenn die Bluetooth-Verbindung wieder gekappt war.

Mit dieser Änderung läuft bei mir die HTTP-Verbindung störungsfrei. Man muss dann allerdings in der "App" selbst darauf achten, dann nicht beide Verbindungen parallel auf sind. Ob das zum Problem führen würde, weiss ich nicht. Besser wäre es, wenn @AlexanderG in der "App" dafür sorgt, dass nur ein Kanal offen ist. Dann kann der Server immer für seine Clients offen sein.
 
So, aktuell läuft mein HTTP-Server stabil. Habe da am Wochenende nochmal intensiv draufgeguckt und folgende Zeile in der esp_ble.ino wegkommentiert.
Code:
//if (!bleConnected) {
    if (server != NULL) server->loop();
//}
Vorher war es so, dass bei jeder Bluetooth-Verbindung der HTTP-Server abgeschaltet und erst wieder aktiviert wurde, wenn die Bluetooth-Verbindung wieder gekappt war.

Mit dieser Änderung läuft bei mir die HTTP-Verbindung störungsfrei. Man muss dann allerdings in der "App" selbst darauf achten, dann nicht beide Verbindungen parallel auf sind. Ob das zum Problem führen würde, weiss ich nicht. Besser wäre es, wenn @AlexanderG in der "App" dafür sorgt, dass nur ein Kanal offen ist. Dann kann der Server immer für seine Clients offen sein.

Ich möchte nochmal diese Diskussion aufgreifen da die ESP32 Verbindung nicht 100% zuverlässig ist - bei mir nur zu 90% ;-)

Löst dieser Workaround folgendes Problem?

Wifi funktioniert meistens gut und es läuft. Es gibt Tage, da gibt es überhaupt keine Probleme.
Dann wiederum gibt es Tage da steigt die App oft aus (keine Verbindung mit App), der ESP lässt sich aber anpingen und ist erreichbar (im Webbrowser gibts bei der Adresse eine Fehlermeldung "Verbindung Fehlgeschlagen". Bluetooth funktioniert immer, wie gesagt Ping auch - nach Neustart (stromlos) geht's auch wieder.

Besten Dank
 
ja, das wird voraussichtlich das Problem beseitigen. In dem Moment, wo du Bluetooth verbindest, wird der Web-Server ausgeschaltet. Dann kannst du den ESP zwar noch anpingen, er bedient aber die Kommunikation nicht mehr. Durch das Kommentieren der beiden Zeilen laufen Bluetooth und Web-Server parallel. Dann musst du aber selbst drauf aufpassen, dass keine Probleme (z.B. sich widersprechende Befehle von 2 unterschiedlichen Endgeräten) durch den parallelen Betrieb entstehen. Parallelbetrieb von mehreren Endgeräten sollte grundsätzlich vermieden werden.
 
Kurzes Feedback - mit allen oben genannten Codeänderungen läuft mein ESP32 jetzt problemlos. Reconnect funktioniert immer und bisher hatte ich noch keinen Komplettausfall das alles erst nach Strom Aus wieder funktioniert.

Besten Dank nochmal
 
ja, das wird voraussichtlich das Problem beseitigen. In dem Moment, wo du Bluetooth verbindest, wird der Web-Server ausgeschaltet. Dann kannst du den ESP zwar noch anpingen, er bedient aber die Kommunikation nicht mehr. Durch das Kommentieren der beiden Zeilen laufen Bluetooth und Web-Server parallel. Dann musst du aber selbst drauf aufpassen, dass keine Probleme (z.B. sich widersprechende Befehle von 2 unterschiedlichen Endgeräten) durch den parallelen Betrieb entstehen. Parallelbetrieb von mehreren Endgeräten sollte grundsätzlich vermieden werden.

Hallo Silberstreifen:

ich habe die Änderungen von Dir (auskommentiert) mit der FW 3.03 bisher problemlos am Laufen gehabt. Bin sehr zufrieden mit der Performance. Jetzt habe ich zum erstem Mal MQTT aktiviert und mit Cassandra zu kommunizieren. Mit HTTP funktioniert es, ich möchte aber wegen Homeassistant und Performance aufs MQTT Protokoll umsteigen. Mit MQTT Protokoll wird vom Ardumower nach einiger Zeit - randomly - Minuten oder Stunden - nicht mehr gesendet. Die Original Sunray App kann aber weiterhin mit HTTP verbunden werden und die Wifi Verbindung an sich funktioniert einwandfrei.

Meine Frage: Nutzt Du auch MQTT aus dem ESP32 heraus, wenn ja hast Du Probleme? und hast eine Idee wo das Problem liegen könnte?
 
Nutzt Du auch MQTT aus dem ESP32 heraus, wenn ja hast Du Probleme?
ja, ich nutze MQTT sehr intensiv, da ich meinen Debug-Informationen über MQTT sende. Probleme habe ich damit nicht. MQTT läuft bei mir störungsfrei.
und hast eine Idee wo das Problem liegen könnte?
Nein, dazu fällt mir erstmal nichts ein. Wenn die WLAN-Verbindung steht, dann sollte auch die MQTT-Verbindung stehen.

WLAN ist kein Problem? Hast du ein WIFI-Mesh zur Abdeckung des Gartens? Wenn ja, kann das zu WLAN-Verbindungsproblemen führen, da der ESP32 mit der original Firmware mit dem ersten passenden Accesspoint verbindet und nicht mit dem stärksten.
 
Dachte ich eigentlich auch...

Mesh habe ich nicht.

Und falls WLAN Mal abbrechen sollte steht die hhtp und Server Verbindung schnell wieder. Werde Mal neu flaschen und weitersuchen...
 
Oben