ESP32 | Datenlogger & Webserver Umschaltung

OP #7678358
Lesenswert?

Moin :)

Um Daten von einem BME-280 unabhängig von WiFi mit korrektem Zeitstempel zu protokollieren habe ich einen Aufbau und Code entwickelt, der über ein DCF-77 Modul die Zeit holt und dann die Werte auf eine SD-Karte in ein Logfile schreibt. Danach geht es mit

1
  esp_sleep_enable_timer_wakeup(zeit);
2
  esp_deep_sleep_start();

in den Deepsleep.

Nun möchte ich, damit die zukünftigen Nicht-Nerds-Besitzer es praktikabel haben, die Möglichkeit einbauen, dass man einfach (vielleicht per Schalter) zwischen

  • Logging Betrieb
  • Web-Server Betrieb umschalten kann.

Mein gedanklicher Knoten ist, dass ich natürlich am Anfang vom setup abfragen kann wie die Schalterposition ist, aber das kann natürlich maximal bis zur eingestellten wakeup-Zeit (wird wohl bei ca. 1/2 Stunde liegen) dauern, bis dann nach Umlegen des Schalters der Webserver gestartet wird (um die Daten abzurufen).

Wie kann man es machen, dass es wesentlich schneller "umschaltet"? Das sollte halt maximal im Bereich von so 10-15 Sekunden liegen.

Danke und Gruß Carsten

#7678517
Lesenswert?

Carsten R. schrieb:

Nun möchte ich, damit die zukünftigen Nicht-Nerds-Besitzer es praktikabel haben, die Möglichkeit einbauen, dass man einfach (vielleicht per Schalter) zwischen

  • Logging Betrieb
  • Web-Server Betrieb umschalten kann.

Dazu müsste manwohl erst mal wissen, wieso man umschalten muss. Webserver-Betrieb würde doch bedeuten, dass das Ding die ganze Zeit läuft und auf Anfragen über WLAN wartet. Währedessen könnte auch problemlos die Log-Funktion (in regelmäßigen Abständen) ausgeführt werden. Wenn dein Controller nur loggen soll, gibt es während der Zeit keinen Webserver. Du bräuchtest also nur einen Schalter, der regelmäßig abgefragt wird und zwischen Webserver-Betrieb mit Loggen und reinem Log-Betrib umschaltet.

Oder habe ich was da was übersehen?

OP #7678520
Lesenswert?

Moin :)

Ja so ungefähr. Aber der soll halt über mehrere Tage im Akkubetrieb loggen können. Dazu braucht man schon den Deepsleep, wenn man nicht überdimensionierte Akkus einbauen will.

Jetzt würde ich aber die Möglichkeit vorsehen das man halt auch zwischendurch mal auf dem Webserver die aktuellen Daten einsehen kann.

Das mit dem Aufwecken aus dem Sleep kenne ich "nur" so, dass man einen Reset auslöst. Da wäre die Möglichkeit

  • einen Schalter für Logging oder Webserver
  • einen Taster um den Reset auszulösen.

Eleganter fände ich es, wenn es nicht mit zwei Aktionen verbunden wäre.

#7678539
Lesenswert?

Nochmal: das geht doch mit den Externen Quellen zum Verlassen des Deepsleep [1].

  • Der User stellt den Modus auf "nur Logging" über den Schalter.
  • Dein Controller wacht nur alle x Stunden auf um ein Logging zu machen.
  • Irgendwann will der User drauf, stellt den Schalter um auf "Webserver". Das löst das externe Event aus was deinen Controller SOFORT aus dem Deepsleep holt.
  • Der User holt seine Daten.
  • Anschließend stellt der User entweder den Schalter zurück oder klickt auf die Weboberfläche auf Sleep[*].
  • Der Controller geht dann in Sleep und wartet auf ein neues Logging Event (Zeit) oder eine erneute Bestätigung

[1] https://randomnerdtutorials.com/esp32-external-wake-up-deep-sleep/

[*] In dem Fall würde der Schalter dann falsch stehen. Eventuell wäre es also besser einen Taster zu verwenden. Sollte in deinem Fall auch ausreichen. Dann gibt es immer beide Pegel und du kannst immer auf das "gedrückt" reagieren.

#7678576
Lesenswert?

N. M. schrieb:

[*] In dem Fall würde der Schalter dann falsch stehen. Eventuell wäre es also besser einen Taster zu verwenden. Sollte in deinem Fall auch ausreichen. Dann gibt es immer beide Pegel und du kannst immer auf das "gedrückt" reagieren.

Man könnte auch abfragen, ob der Taster den RTeste ausgelöst hat, oder der Watchdog. Dazu müsste der Taster noch an einem GPIO hängen (und vielleicht noch per Diode entkoppelt werden).

#7678578
Lesenswert?

Rahul D. schrieb:

Dazu müsste der Taster noch an einem GPIO hängen (und vielleicht noch per Diode entkoppelt werden).

Warum nicht den Reset Eingang selbst dazu verwenden? Als erstes dann dort abfragen und gut.

Edit: Geht nicht. Der hat ja keinen richtigen Reset Eingang. Das ist ja nur Enable. :-( Außerdem reagiert Reset i.A. erst auf loslassen. Man müßte für den GPIO also noch ein RC Glied vorsehen,

#7678660
Lesenswert?

Andreas B. schrieb:

Warum nicht den Reset Eingang selbst dazu verwenden? Als erstes dann dort abfragen und gut.

Edit: Geht nicht. Der hat ja keinen richtigen Reset Eingang. Das ist ja nur Enable. :-( Außerdem reagiert Reset i.A. erst auf loslassen. Man müßte für den GPIO also noch ein RC Glied vorsehen,

Meins war ein Schnellschuss, um die etwaige Richtung anzuzeigen. Die verwendete Schaltung ist ja auch nicht bekannt (vermutlich Top secret ; wie so oft).

#7679145
Lesenswert?

Carsten R. schrieb:

Eleganter fände ich es, wenn es nicht mit zwei Aktionen verbunden wäre.

Dann einfach nur einen Reset-Taster und das Teil startet abwechselnd im Webserver- und Log-Modus.

Oder im Webserver-Modus den Taster aktiv von der Reset-Leitung trennen und über einen GPIO-abfragen, um auf den Log-Modus zu wechseln. Im Deep-Sleep fällt die Trennung vom Reset weg und nach 'nem Reset startet er im Log-Modus.

N. M. schrieb:

das geht doch mit den Externen Quellen zum Verlassen des Deepsleep

Das scheint mir allerdings die deutlich bessere und funktionalere Lösung zu sein; könnte man noch dazu erweitern, daß ein kurzer Tastendruck nur einen extra Log-Zyklus startet und nur ein langer Druck den Webserver startet; ist man mit Web-Zugriff fertig, dann schickt ein Button im Web-Interface oder ein erneuter Tastendruck (hier allerdings erst aufs Loslassen reagieren, sonst weckt man das Teil eventuell gleich wieder) das Teil wieder schlafen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren