Forum: Mikrocontroller und Digitale Elektronik ESP8266 Resetgrund auslesen


von Andre K. (andre1980)


Lesenswert?

Ich würde gern den Resetgrund des ESPs auslesen. Doch irgendwie komme 
ich nicht richtig vorran. Ich finde nur Bruchstücke im Netz. Keine 
kompletten Beispiele. Wahrscheinlich nutze ich die falschen Suchbegriffe 
-.-

Kennt jemand ein Tutorial dafür?

Ich bastel ein Temperatur Seonsor mit einem ESP8266.
Diesen setze ich zwischenzeitlich in DeepSleep. Nach einer bestimmten 
Zeit lasse ich ihn aufwachen. Erfasse die Daten, Sende die Daten per 
MQTT an den Broker, schicke ihn wieder schlafen. Dies funktioniert seit 
längerem einwandfrei.

Als Erweiterung wollte ich ein kleines OLED Display anschliesen was mir 
die Erfasten Daten anzeigt. Das Display soll aber nur angehen und 
anzeigen wenn man den Reset-Schalter drückt, und nicht wenn er normal 
aus dem DeepSleep aufwacht. Das Display zeigt die Daten also nur wenn 
man es selber wünscht, und nicht nach jedem Aufwachen.

Aber das Auslesen des Grundes gelingt mir nicht wirklich.

von Stefan F. (Gast)


Lesenswert?

Der Bootloader gibt den Grund in Form einer Textmeldung seriell mit 
74880 Baud aus.

> Das Display soll aber nur angehen und anzeigen wenn man den
> Reset-Schalter drückt, und nicht wenn er normal
> aus dem DeepSleep aufwacht.

Ich glaube, das kannst du gar direkt unterscheiden, weil der Sleep-Timer 
mit dem Reset Eingang verbunden werden muss.

Vielleicht kannst du die RTC verwenden, um am Timing zu erkennen, ob es 
es geplantes Aufwachen war, oder ein ungeplanter Reset.

von Andre K. (andre1980)


Lesenswert?

Vor Monaten hatte ich dazu mal ein Beispiel gefunden. Aber damals noch 
nicht von Belang und nun ist es nicht auffindbar.

ungefähr so:
1
struct rst_info{
2
   uint32 reason;
3
   uint32 exccause;
4
   uint32 epc1;
5
   uint32 epc2;
6
   uint32 epc3;
7
   uint32 excvaddr;
8
   uint32 depc;
9
};
10
void setup() {
11
  rst_info *xyz;
12
  Serial.begin(115200);
13
  xyz = ESP.getResetInfoPtr();
14
  Serial.println((*xyz).reason);
15
}

Aber ich bekomme eine Fehlermeldung bei "struct":
"redefinition of 'struct rst_info'"

Und aus dem Dokument von espressif werde ich nicht wirklich schlau. :(
https://www.espressif.com/sites/default/files/documentation/esp8266_reset_causes_and_common_fatal_exception_causes_en.pdf

von Andre K. (andre1980)


Lesenswert?

Ich hab es hinbekommen. Es braucht die esp.h

Aber, der ESP meldet das er aus dem DeepSleep kommt, egal ob ich den 
Hardware Reset drücke oder automatisch der ESP aufwacht.

Vermutlich wird nur geschaut, ob er im DeepSleep war, und schlussfolgert 
daraus das booten.

Also bringt mir das ganze so nichts. Also muss ich mich damit 
beschäftigen, wie ich die Realtimeclock auslese und verarbeite.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.