Espuino als Wecker möglich?

Moin,
da meine Tochter ihren Wecker schrecklich findet und oft mit schlechter Laune aufsteht, habe ich mich gefragt, ob es vielleicht möglich ist, den Espuino als Wecker zu verwenden.
Dazu müsste der Espuino die Uhrzeit wissen und dann zu einer bestimmten Zeit mit einer Playlist oder ähnliches aufwachen und das Kind hätte hoffentlich einen schönen Start in den Tag.
Vielleicht wäre es ja möglich das zu realisieren.
Vielen Dank für Feedback.

Grundsätzlich möglich…

Wenn WLan vorhanden kann sich der ESP die aktuelle Uhrzeit aus dem Netz holen, und dann zu einer eingestellen Zeit „losgehen“.
Aber imho ist das bisher nicht im Projekt vorgesehen…

Ich habe das Ganze mal in die Sektion Feature Request verschoben.
Also mal ganz grundsätzlich gehen tut das natürlich schon: Über WLAN hätte man die Möglichkeit, per NTP die Zeit zu holen und damit könnte man zu einer Uhrzeit X den Event y werfen.

Probleme:
a) Es ist nicht sichergestellt, dass man WLAN hat. D.h. einerseits kann es komplett fehlen, aber es kommt auch immer mal wieder zu Events, bei denen sich der ESP32 nicht mit dem WLAN verbindet (warum auch immer). Will man das umschiffen, dann muss man eher auf DCF77 setzen zur Zeitsynchronisation.
b) Um Strom zu sparen schläft der ESP32 üblicherweise wenn er nicht gebraucht wird. Er muss ja aber rechtzeitig wieder aufwachen wenn er als Wecker fungiert. Legt man ihn schlafen, dann kann man ihm eine Zeit mitgeben, wann er wieder aufwachen sollen. Man muss dann also einen Offset zwischen aktueller Zeit und Zielzeit berechnen. Wenn ich das richtig in Erinnerung habe, dann wird das recht ungenau, wenn der Zeitraum bis zum Aufwecken groß wird (ohne das jetzt exakt quantifizieren zu können). Alternativ lässt man den ESP32 wach, aber das steht natürlich diametral der Anforderung entgegen, dass man das Ganze auch mit Akku betreiben möchte.

Also insgesamt denke ich, dass man den ESP32 eigentlich wach lassen müsste oder ihn zumindest regelmäßig aufwecken lassen. Nicht auszuschließen, dass man auch über den ULP des ESP32 was reißen kann.

Aus meiner Sicht ist die beste Lösung des Problems, dass man einen zweiten Mikrocontroller nimmt (Arduino nano mit 3.3 V zB - Festspannungsregler braucht man nicht, weil 3.3V sind ja eh schon da), dem man ein DCF77-Modul spendiert. Dieser wirft dann zur Uhrzeit xyz einen Interrupt. Diesen Interrupt wertet man über den Port-Expander des ESPuino aus. Anders gesagt: Das verhält sich dann wie ein normaler Taster. Man muss halt nur PLAY_LAST_RFID_AFTER_REBOOT gesetzt haben, damit dann automatisch was losläuft (oder es muss ne Karte aufliegen). Problem ist hier halt nur, dass das Umprogrammieren des Weckers reichlich unpraktisch ist. Aber möglicherweise muss das eh nicht ständig geändert werden und dann würde es, zum Deaktivieren des Timers, auch einfach ein Schalter am Gehäuse tun.

zwischendurch mal WLAN haben sollte reichen →
https://www.letscontrolit.com/forum/viewtopic.php?t=5546

Wenn einem das nicht reicht würde ich eher auf NTP + Echtzeituhr setzen, die lässt sich gut per I2C einbinden…
Die Echtzeituhr kann auch einen PIN wackeln lassen um den ESP aufzuwecken…
https://wolles-elektronikkiste.de/ds3231-echtzeituhr

DCF77 macht bei mir ständig Probleme mit dem Empfang (läuft nur am Fenster, nur wenn der Qi lader nicht daneben steht,…)

Kann man nicht auch einen Wecker nehmen und das Signal, was den Alarm auslöst abgreifen und im ESPunio nutzen?
Ich erinnere mich in einem anderen Forum mal sowas gelesen zu haben :thinking:

Ach kuck… das geht ja dann vergleichsweise einfach.
An meiner mini ist ja ein externer i2c-Konnektor vorhanden. Dort käme der DS3231 dran. Man muss allerdings darauf achten, dass da immer 3.3 V drauf sind. Für die älteren Revisionen muss man sich damit die 3.3 V woanders her holen (ext z.B.), weil ich die im Deepsleep immer weggeschaltet habe. Ab einer neuen Revision (glaube 2.2) kann man das mittels JP6 jumpern.
Und der Interrupt-Pin käme an einen Eingang des Port-Expanders (das ginge über ext - ist also vorbereitet).
Dann braucht es eine Erweiterung in der GUI, so dass man maximal zwei Weckzeiten einstellen kann. Dann klickt man quasi auf „ok“ und speichert die konfigurierte Zeit dann einerseits im NVS ab, so dass man es beim nächsten Mal wieder anzeigen kann. Und andererseits programmiert man (via i2c) den DS3231.
Ist die Weckzeit dann erreicht, so wirft DS3231 einen Interrupt, was dazu führt, dass der Port-Expander seinerseits einen Interrupt wirft. Und dieser weckt dann den ESP32 auf.

Das klingt ja schon mal sehr gut und vielen Dank für so schnelle Rückmeldungen.
Aktuell scheint das Thema aber eher nicht so viel Interesse zu erzeugen, daher mal eine Frage an @biologist. Wenn du das in die Software einbauen würdst, wie lange würdest Du dafür benötigen? Nur so eine Einschätzung des Aufwandes. Ich würde mich dann mal auf die Suche Programmierunterstützung machen, da ich das selber nicht kann.

Ein paar Stunden werden es schon sein. Also da Programmieraufwand ist nicht riesig, aber das muss ja auch getestet werden.

a) Platformio.ini: Neue Lib einbinden
b) Neues cpp/h-File für DS3231 erstellen (dynamische Einbindung per neuer Präprozessor-Direktive). Stellt Funktionen bereit, um Settings im NVS zu speichern und auszulesen. Weiterhin um den DS3231 mit Weckzeiten zu programmieren (+ändern).
c) DS3231 in main.cpp einbinden, so dass es auch gestartet wird.
d) GUI erweitern um neue Kladde, die nur dann auftaucht, wenn die Präprozessor-Direktive für DS3231 aktiv ist.
e) Web.cpp erweitern hinsichtlich Template-Engine, die auf cpp für DS3231 zugreift.

Ja und auch generell testen, wie gut sich der DS3231 zusammen mit dem Port-Expander am i2c-Bus „verträgt“.