Hallo,
nachdem ich hier schon sehr gute Tipps bekommen habe möchte ich jetzt eine Lösung zu fogendem Projekt finden:
Die Konfiguration besteht aus
einem ESP01
einem Sensor GY-21 (Temperatur und Luftfeuchtigkeit)
einem OLED 0.96
Die Aufgaben sind im Einzelnen:
Mit einem ESP01 sollen Temperatur und Luftfeuchtigkeit mittels eines GY-21 ausgelesen werden.
Zum Stromsparen soll der ESP01 aber in Tiefschlaf versetzt werden und periodisch alle 5 Minuten geweckt werden um die Messdaten über WiFi an eine Datenbank übersenden.
Weiterhin sollte die Möglichkeit bestehen den ESP01 per Interrupt (RST-Pin kurz auf auf den GND legen) geweckt werden, damit ich die aktuellen Messwerte auf dem OLED ablesen kann.
Das Wakeup Signal soll aber die 5 Minuten Periode (siehe Punkt 2) nicht unterbrechen.
Wie kann ich das machen?
Ich stelle mit vor dass die 5 Minuten Wakeup prozedure auch von dem Datenbabkserver übernommen wird.
Dazu müsste aber ein Interrupt über WiFi ausgelöst werden können.
Also meine Fragen:
Unterbricht ein Interrup mit dem RST-Pin den 5 Minuten Timer?
Gibt es die Möglichkeit einen Interrupt über WiFi auszulösen (d.h.: __.deepSleep(0) ist gesetzt)?
Kann ich erkennen ob ein Interrupt vom Timer oder RST-Pin ausglöst wird?
Hallo,
Also bei dem kleinen ESP8266-01 Modul ist das ein bischen knifflig. Du musst einen Draht direkt an dem Chip anlöten, weil der entsprechende Ausgang nicht heraus geführt ist. Ich würde das nicht machen, nimm eine Wemos D1 Modul da sparst Du dir die knifflige Löterei. Anleitung dazu gibts im Internet.
Dein Konzept mit der Datenbank hab ich noch nicht ganz verstanden. Der DatenbankServer läuft doch immer, was willst Du da aufwecken.
Was ich jetzt verstanden habe ist, Du willst alle 5 Minuten eine Messung machen und das in eine Datenbank eintragen. Die Übertragung soll über WIFI laufen , UDP, TCP, HTP. was auch immer.
Zusätzlich willst Du mittels eines Tasters den ESP Wecken um die Werte auf dem Display ablesen zu können. Dabei soll aber kein Eintrag in die Datenbank erfolgen.
Ich denke da gibt es mehrere Möglichkeiten. Am einfachsten wird es sein wenn Du einen zusätzlichen Eingang nutzt der nur mit dem Taster geschaltet wird. Am einfachsten nutzt du einen Taster mit 2 Kontaktparen. Ein Kontakt für den Reset und den zweiten für den zusätzlichen Eingang. Wenn dann bei einem Start des ESP ebenfalls der zusätzliche Eingang geschaltet ist dann werden die Daten nicht versendet. Eventuell benötigt man dazu noch ein RC damit der zweite Kontakt lange genug auf Low bleibt um ihn im Setup als erstes abfragen zu können.
Eventuell macht es auch Sinn beim starten des ESP die Datum/zeit von einem NTP Server zu holen damit Du den Zeitstempel mit übertragen kannst. Wenn das allerdings ein öffentlicher ist wird der eventuell streiken wenn Du Ihn alle 5 Minuten belästigst.
ich weiß nicht was das Display an Strom benötigt eventuell muss man da auch noch die Power abschalten.
Nachtrag.
wie ist das mit einem kleine Display, bleibt die Anzeige nicht erhalten auch wenn der Controler aus ist ?? ich glaube ja .
das bekommst vermutlich nicht einfach hin.
Der Deepsleep Event muss ja einen Reset auslösen (2) damit der ESP aufwacht.
Das gleiche gilt für (3) - du machst einfach einen Reset.
Was du machen könntest, dass der ESP nach dem Aufwachen - unabhängig wegen (2) oder (3) - kannst eh nicht (einfach) unterscheiden - den Server abfragt, von wann der letzte Eintrag war - und abhängig davon schickst den ESP mehr oder weniger Lang schlafen.
Lies mal über die anderen Schalfmodi - brauchen aber alle mehr Strom.
Wie @Rentner schon schrieb, um ein Wakeup mit dem internen Timer zu erreichen muss der ESP01 erst einmal ein wenig umgebaut werden. GPIO 16 muss mit dem Reset Pin verbunden werden. Beim ESP01 bedeutet das wohl etwas Lötarbeit:
Verwendet man nur eine externe Wakeup Quelle, muss der Reset Pin zum Wakeup von 3,3V auf GND gezogen werden.
Ich bin mir nicht sicher, aber ich würde mal davon ausgehen, dass der Timer durch einen externen Wakeup zurückgesetzt wird. Eine Möglichkeit wäre evtl. nur ein externes Wakeup zu verwenden, einmal durch einen Taster und einmal z.B. durch eine externen Ti er wie diesen hier:
Solch ein Timer verbraucht extrem wenig Strom (um die 20μA)
Ein aufwecken per WLan geht meines Wissens nicht. Das ist im Tiefschlafmodus ja auch ausgeschaltet.
Was ist mt dem Display? Soll das während der Schlafphase auch vom Strom getrennt werden
Hallo,
stimmt das wird so sein. Damit ist mein Vorschlag mit dem Taster parallel Unsinn.
Man müsste die nächste Weckzeit irgendwo her bekommen, bzw. wissen wie lange der letzte automatische wakeup her ist.
Gruß Heinz
Hallo,
vielen Dank für Eure hilfreichen Tipps.
Ich könnte mir vorstellen dass ich das Thema mit einem real time clock Module lösen könnte. Ich hab noch irgendwo einen rumliegen.
Wie denkt Ihr darüber?
Ja das Display sollte in der sleep Phase auch aus sein. Wo niemand draufschaut muss auch nix angezeigt werden. Daher der Reset.
Gruß
Kurt
Ja. Darum habe ich ja in Post #4 einen Timer erwähnt. Eine RTC geht auch, die ist genauer, wird aber mehr Strom verbrauchen.
Wie @noiasca und @fony erwähnt haben, kann es sein, dass das Ausgangssignal vom jeweiligen Timer invertiert werden muss, weil es von LOW nach HIGH geht, der Reset des ESP aber von HIGH nach LOW erfolgen muss. Aber auch hier kann ein Transistor / MOS-Fet helfen, das Signal entsprechend umzuformen.
Hallo,
ich hab mal nachgeschaut und eine RTC gefunden.
Das ist ein ZS-042. Der wird mit einer Knopfzelle mit Strom versorgt und braucht daher keinen Strom von der ESP-01 Stromversorgung.
Ich muß mal schauen ob der zeitgesteuerte Signale ausgibt und auf welchem Ausgang. Ich glaube das geht mit dem SQW Ausgang.
Mal schauen!
Kurt
Wie genau ist es dir mit den 5 Minuten Intervall? Denke daran, dass die Zeit bis zu dem der ESP Wifi aufgebaut variabel sein kann.
Wenn du den ESP resetest und so außerhalb des Intervalls aufwachst, würde dann diese aperiodische Nachricht stören oder ist das egal?
Wenn ein Verbindungsaufbau mal länger dauert und der 5 Minuten Intervall überschritten ist, was soll dann mit der Message passieren, trotzdem "nachsenden" oder auslassen?
PS: Auf meinen Vorschlag im zweiten Absatz von Post #3 bist auch noch nicht eingegangen.
Es ist richtig, dass man den SQW Ausgang nutzen kann, allerdings dürfte es mit diesem Timer
schwierig werden, alle fünf Minuten einen Alarm zu erzeugen. Wenn ich die Doku richtig verstehe, klappt das mit dem Alarm nur sekündlich, einmal pro Minute, einmal pro Stunde oder einmal pro Tag.
Das bedeutet, dass du ein minütliches Aufwecken bauen könntest, du die Anzahl der Aufweckvorgänge aber bis zählen müsstest. Ist Fünf erreicht, werden die gewünschten Programmaktionen ausgeführt, ist das nicht der Fall wird der Controller gleich wieder schlafen gelegt.
Besser wäre es natürlich wenn der Timer nur alle fünf Minuten ein Aufwecksignal liefern würde.
Hallo noiasca,
ja Du hast recht.
Ich kann mir folgendes Szenario vorstellen:
Eingang eines Interrupts alle 5 Minuten
die Messdaten werden ausgelesen und werden an den Datenbankserver geschickt.
warten bis eine Rückantwort vom Server kommt
in DeepSleep Modus gehen
Das muß ich mir aber mal genauer anschauen.
kai-r,
ja du hast recht. Ich habe nun mal diesen RTC rumliegen und wollte ihn nutzen wenn es sinnvoll ist.
Falls das zu kompliziert wird werde ich selbstverständlich so eine Timer wie Du genannt hast kaufen.