ESP8266 stürzt ab

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Ich habe ein inzwischen ziemlich umfangreiches Projekt mit dem ESP. Ich habe ehrlich gesagt "Angst" den Stand der verwendeten Libraries zu aktualisieren, da ich beim letzten Versuch unzählige Fehlermeldungen beim compilieren bekommen habe und deshalb zurück rudern musste.

    Leider stürzt mein ESP irgendwann während des Verbindungsaufbaus in WLAN ab bzw. nach Setup, wenn ich nichts in loop() aufrufe. Ich vermute mein RAM wird zu wenig.

    Am Ende des SETUP gibt der Behfehl ESP.getFreeHeap()  einen Wert von ca. 27944 zurück. Klingt mal nicht so wenig...

    Danach kommen ein kryptische Zeichen. Hier mal die Debugausgabe der seriellen Schnittstelle (115000 Baud) rein

    Code
    ￈ᄂl↓￉ ̄ᆲl$￸￀$:x￸285D: {0,1}
    286D: {0,2} 27792
    6838M: {150,3}
    ᆵトFJ
    ￴フ
    
    95D: {0,1}
    96D: {0,2} 27896

    Zuerst steht die Laufzeit in Milisekunden. Danach ein D bedeutet, es ist eine Debugausgabe. M bedeutet es ist eine Meldung. {0,1} ist die Ausgabe ganz zu Beginn, {0,2} ist die Ausgabe von ESP.getFreeHeap() am Ende von setup(). Nach 6 Sekunden kommt noch eine Meldung vom die aufgrund folgenden Befehles ausgegeben wurde:

    Code
    if (WiFi.status()==WL_NO_SSID_AVAIL  ) EventMsg(3,"");  //("WL_NO_SSID_AVAIL");

    Auch wenn ich den gesamten Code in loop() auskommentiere stürzt es auch einigen Sekunden (geschätzt sind es auch ca. 7 Sekunden) ab

    Code
    ᄊE|vAMᆲt│hᄐ￰>W116D: {0,1} 
    117D: {0,2} 27904
    ᆬトFJ
    ￴フ
    
    94D: {0,1} 
    95D: {0,2} 28088

    Da ich in Setup bzw. in den darin aufgerufenen Routinen nichts (bewusst) geändert habe, habe ich den Verdacht, dass der Heap einfach zu klein wurde...

    Ich verwende folgende Libraries.

    C
    #include <RCSwitch.h>
    #include <FS.h> //Ermöglicht Zugriff auf Dateisystem
    #include "fauxmoESP.h"
    #include "ESP8266_Alexa_HTML.h"
    #include <ESPAsyncWebServer.h>
    #include "ArduinoJson.h" //Library für Zugriff auf Dateiinhalt (ähnlich wie INI)

    Ich glaube es macht wenig Sinn das gesamte Projekt zu posten - es ist inzwischen riesig und für einen Programmierer vermutlich chaotisch. Außerdem muss man Dateien auf SPIFFS hochladen, damit man die eigentliche Funktion bekommt...

    Habt Ihr vielleicht Tipps, wie ich eventuell an Fehlermeldungen von den eingebundenen Libraries komme? Mir scheint als hätten die Debugausgaben eingearbeitet - aber ich weiß nicht, wie ich da ran komme... Kann ich bei einer anderen seriellen Einstellung der seriellen Schnittstelle die kryptischen Zeichen als "Klartext" bekommen?

    Am ehesten stürzt ESPAsyncWebServer.h ab, da sich dieser selbst (also nicht in loop() getriggert) aufruft...

    Danke schon mal und sorry wegen des komplizierten Sachverhaltes...

    ...wenn Software nicht so hard-ware ;) ...

    Freue mich über jeden like :thumbup:

  • Vielen Dank... schaut vielversprechend aus.

    Aktueller Status: ESPAsyncTCP-master und ESPAsyncWebServer-master auf aktuellen Stand gezogen, damit ich unter Arduino kompilieren kann. Ein leeres Programm (beinhaltet alle funktionen, jedoch ist Setup() und Loop() nahezu leer) läuft unter Arduino. Unter Eclipse stürzt der ESP nach ca. 6 Sekunden ab.

    Wenn ich die Baudrate auf 115200 stelle, bekomme ich folgende Meldung(en):

    Code
     ets Jan  8 2013,rst cause:4, boot mode:(3,7)
    
    wdt reset
    load 0x4010f000, len 1384, room 16 
    tail 8
    chksum 0x2d
    csum 0x2d
    v3de0c112

    Ich vermute ich habe es wohl mit den lokalen Strings übertrieben. Ich vermute mir geht tatsächlich der Speicher (eher noch der Stack) aus. Hier steht diesbezüglich im Abschnitt "Memory, memory, memory" was. Ich habe viele der erwähnten + Operatoren für lokale Strings in Verwendung. Komisch ist nur, dass ich die Routinen gar nicht aufrufe, da ich ja fast nichts in loop/setup stehen habe...

    Einer der ersten Befehle in setup() ist übrigens wdt_disable();

    ...wenn Software nicht so hard-ware ;) ...

    Freue mich über jeden like :thumbup:

    2 Mal editiert, zuletzt von VeryPrivat (17. Juni 2018 um 21:21)

  • Leider stürzt mein ESP irgendwann während des Verbindungsaufbaus in WLAN ab bzw. nach Setup, wenn ich nichts in loop() aufrufe. Ich vermute mein RAM wird zu wenig.

    das passiert wenn die Versorgung zu "dünne" ist, der braucht ab und an gut Strom für wlan.

    mindestens am VCC einen guten Puffer bereitstellen 1000µF und kein zu schwaches Netzteil.

    Bei mir auf dem Steckbrett -> Kontakte ist es auch ab und an passiert da half nur power on reset, ich habe den 3,3V Regler vom steuernden AVR einfach mal für 100ms mit einem Transistor kurzgeschlossen, besser natürlich stabile 3,3V Versorgung die auch mit Stromspitzen klarkommt.

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Rasp-Berlin: Danke für den Tipp. Flash Speicher sollte noch kein Problem sein. RAM (heap) ist vermutlich knapp oder "Fragmentiert". Diesbezüglich sollte es kein Problem sein.

    jar: Danke für den Tipp. Da es bisher ohne Probleme funktioniert hat bzw. wenn ich einen älteren Stand aufspiele noch funktioniert, wird es das nicht sein. Auf meinem USB/ESP Adapter ist auch schon ein 1mF (=1000uF) Kondensator drauf.

    Ich werde mal ein eigenes Thema erstellen, in dem ich mich erkundige, wie man mit Strings am ESP richtig umgeht - ich habe da nicht wirklich was brauchbares gefunden... Ich bin ziemlich sicher, dass da wohl das Problem ist...

    Tipps sind weiterhin gerne willkommen...

    ...wenn Software nicht so hard-ware ;) ...

    Freue mich über jeden like :thumbup:

  • Ich werde mal ein eigenes Thema erstellen, in dem ich mich erkundige, wie man mit Strings am ESP richtig umgeht

    da hätte ich evtl. was in der Arduino IDE mit SerialEvent

    funktioniert für den ESP32 und soll auch für den ESP8266 gelten!

    Schrott o.ä. filtere ich aber mit isprint aus der Anzeige, was nicht "printbar" ist wird nicht gezeigt!

    warum da nicht printbare Zeichen kommen muss du aber klären.

    Ich habe beim ESP Start noch jede Menge Müll im Puffer, das wird geklärt mit while(Serial.available()) Serial.read;

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Hallo VeryPrivat ,

    das hier -> https://www.arduino.cc/reference/en/l…s/stringobject/

    hast Du vermutlich schon gefunden?

    Ansonsten fällt mir noch ein, dass Du mit string.reserve(size) schon mal eine Mindestgrösse vordefinieren kannst.

    Das sollte, aber da bin ich jetzt nicht sicher, beim Compilieren schon berücksichtigt werden und evtl. Engpässe da schon entdecken.

    Ansonsten fällt mir zu Strings jetzt keine Besonderheit ein ... :conf:

    cu,

    -ds-

  • da aber der ESP default auf 115k2 sendet ist das auch mein default bei Serial.begin, damit man nicht durcheinander kommt.

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • VeryPrivat : so ist das ... alles was vor dem Ausführen von setup() ausgegeben wird, kommt mit irgendwas ;)

    Ich würd' aber die Debug-Ausgaben auch mit 115200 machen. Im Gegensatz zum Arduino (da war doch was mit den Takt-Teilern, oder?) packt der ESP das locker.

    cu,

    -ds-

  • Nach langer Suche habe ich das Problem nun endlich gefunden. Unter Arduino IDE funktionierte es anstandslos, unter Eclipse ("

    Sloeber, the Eclipse IDE for Arduino Developers") stürze der ESP zuverlässig nach kurzer Zeit ab. Ich weiß zwar nicht warum das plötzlich so war, jedoch konnte ich es beheben indem ich die Plattform wechselte. Ich verwende nun unter Eclipse:

    Arduino > Platforms & Boards > ESP8266> 2.4.1

    Arduino > Platforms & Boards > Arduino AVR Boards > 1.6.21

    Arduino > Libary Manager > Communication > Wifi (default) 1.2.6

    Arduino > Libary Manager > Data Processing > Json Streaming Parser (default) 1.0.5

    Und noch was: Nach dem Umstieg auf die ESP8266 2.4.1 Plattform war die Uploadgeschwindigkeit des ESPTOOLS immer 19200. Viel zu langsam für meinen Geschmack. In der Datei boards.txt unter ~/Programme/sloeber/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/boards.txt

    habe ich nach dem Eintrag

    generic.upload.tool=esptool

    folgenden Eintrag eingefügt:

    generic.upload.speed=230400

    Man muss die Plattform 2.4.1 nochmals auswählen (wichtig!), danach hat man wenigstens die 230400 als Standardeinstellung...

    ...wenn Software nicht so hard-ware ;) ...

    Freue mich über jeden like :thumbup:

  • Ja, mich freut das auch. Hoffentlich kann ich dadurch anderen die Sucherei sparen.

    Ich habe es mal erwähnt (nicht im Eingangspost) - aber meine Recherchen haben mich eher vermuten lassen, dass ich irgendwas mit dem Speicher angestellt habe. Ich bin froh, dass ich jetzt endlich weiter machen kann und hoffentlich auch mal fertig werde.

    Ein leeres Programm (beinhaltet alle funktionen, jedoch ist Setup() und Loop() nahezu leer) läuft unter Arduino. Unter Eclipse stürzt der ESP nach ca. 6 Sekunden ab.

    Danke für eure Hilfe - ist nicht selbstverständlich, dass man in einem Raspberry Forum bei der Fehlersuche am ESP Unterstützung bekommt :thumbup:. Für mich ist es einfach das beste Forum das ich kenne, daher habe ich mir gedacht ich probiere mein Glück


    :danke_ATDE:

    ...wenn Software nicht so hard-ware ;) ...

    Freue mich über jeden like :thumbup:

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!