Forum: Mikrocontroller und Digitale Elektronik ESP32 | Datenlogger & Webserver Umschaltung


von Carsten R. (carsten_r855)


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

von Mario M. (thelonging)


Lesenswert?

Einfach öfter aufwachen?

von Carsten R. (carsten_r855)


Lesenswert?

Du meinst sowas wie, aufwachen alle 15 Sekunden, wenn weder der Schalter 
geändert wurde noch die eigentliche Zeit zum Protokollieren abgelaufen 
ist, sofort wieder einschlafen?

Ja, daran habe ich als Notlösung auch gedacht.
Richtig elegant ist das aber nicht.

von N. M. (mani)


Lesenswert?

Es gab doch auch noch Pins mit denen man den Sleepmode verlassen konnte 
meine ich.
Wenn du einen von denen verwenden würdest und den auf deinen Schalter 
legen, dann könntest du ihn doch auch sofort aus dem Sleep holen.

von Rahul D. (rahul)


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?

von Carsten R. (carsten_r855)


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.

von N. M. (mani)


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.

von Rahul D. (rahul)


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).

von Andreas B. (bitverdreher)


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,

: Bearbeitet durch User
von Rahul D. (rahul)


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).

von Carsten R. (carsten_r855)


Lesenswert?

Nee, die Schaltung ist nicht top secret, kann ich vermutlich morgen 
gerne hier posten.

Bisher gibt's aber halt nur den Teil für SD-Karte, DCF-77, BME-280 und 
etwas "Debug-Signalisierung".
Gedanklich war für mich der Teil mit der "Umschaltung" davon unabhängig.

von Michi S. (mista_s)


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.

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.