[ESP8266][PCD8544-Nokia-Display] Multifunktionsuhr

  • Hallo,


    ich wollte mal mein aktuelles Projekt vorstellen:

    Die minfredsche Multifunktionsuhr basierend auf dem ESP8266. Das Ganze soll als Geschenk in einen alten Wecker eingebaut werden und ursprünglich nur die vergangene Zeit von einem Datum (zB Jahrestag) anzeigen. Da der zu beschenkende hier eventuell mitliest, muss ich mich dahingehend etwas bedeckt halten.

    Da ich Bock aufs Ausprobieren hatte und noch jede Menge Platz auf dem Controller war, gibts jetzt ein vollwertiges Menü mit Untermenüs und verschiedenen Funktionen.


    Bauteile:

    - ESP8266 (NodeMCU V3)

    - PCD8544 (Nokia 5110 84x48-Pixel-Monochrom-Display)

    - Drehimpulsgeber mit Drückfunktion Keyes KY-040 (alternativ drei Buttons)

    - Piezo-Schallgeber (aus einem alten Wecker ausgelötet)


    Stand: V0.8

    - Holen der Uhrzeit per ntp

    - Anzeige von (jeweils als funktionabler Menüpunkt):

    1. Tage von/bis FestdatumDigitaluhr
    2. Analoguhr
    3. Kontrastverstellung
    4. Wecker einstellen (noch ohne Funktion)
    5. Kontrast einstellen
    6. Anzeige der IP-Adresse
    7. Reset (Neustart des ESP8266)

    - Auswahl und Bestätigung per Drehimpulsgeber

    - Hintergrundbeleuchtung Auto-off ~5 Sekunden (nach vorheriger Eingabe)


    ToDo (sortiert nach Prio):

    - Wechsel auf WEMOS D1Mini (kleinere Bauform passt besser in den Wecker)

    - Weckfunktion, Einstellen des Weckers, Anzeige "Aktiver Wecker" im Menü oben links programmieren

    - Deaktivieren des Wlans nach erfolgreichem ntp-Syncs (Stromsparen I)

    - Explizites Aktivieren/Deaktivieren des Wlans für Zeit-, Wetter-, Nachrichtenupdates (Stromsparen II) {inkl Anzeigen Wlan-Status im Menü oben rechts}

    - Abspielen verschiedener Musikstücke per Piezo zu Jahrestag, Weckzeit, Einschalten, etc

    - Einbau von RTC um bei Start nicht auf Wlanverbindung und ntp zu warten

    - Einbau von Akku um Weckfunktion auch bei Stromausfall sicherzustellen

    - Mehr Menüeinträge, mögliche Erweiterungen:

    • aktuelles Wetter (per Wetterdienst ausm Netz holen)
    • Wettervorausschau
    • RSS-Feedreader (Nachrichten)
    • Kalendereinträge (anstehende Geburtstage)
    • Wlan-SSID, Passwort ändern (sehr schwer ohne Tastatur)
    • Statii anderer Geräte im Wlan (inkl. Senden von WOL-Paketen oder Herunterfahren)


    Ich weiß, dass der Code wahrscheinlich nicht ganz stringent programmiert ist, zum Teil zusammengestückelt und sicher an der einen oder anderen Stelle verbessert werden könnte. Ich bin noch in der Lernphase und freue mich auf Hinweise zur Verbesserung.


    Außerdem würde ich gern erfragen, ob jemand schon mit RTCs am ESP8266 Erfahrung gemacht hat?

    Laut Internet hat das überall erhältliche DS3231-Modell (Beispiel-DS3231 (Affiliate-Link)) ja schreckliche Eigenschaften:

    - schlecht designeter Lade-Circuit

    - dazu ist meist eine NICHT-AUFLADEBARE(!!) CR2032 verbaut, weshalb die regelmäßig hochgehen

    - ausgelegt für 5V, NodeMCU hat aber 3V3

    - das kleinere Ds3231-Modell zum Aufstecken auf die Pinleiste des Raspis (DS3231-Raspi (Affiliate-Link)) scheint diesem Fehler nicht zu haben, oder? Ein Testmodell war bei mir allerdings schon nach 1 Jahr leer un die Batterie lässt sich schwer austauschen.


    Mfg Minfred

  • nicht am ESP aber die RTC DS3231 nutze ich viel und gerne am Arduino.


    Ich habe lieber die LiR2032 Akku Variante, am Arduino mit 5V wird der Akku immer geladen und soll ja nur kurze Stromausfälle brücken.

    Die DS3231 läuft auch mit 3.3 V Versorgung nur wird dann ein LiR nicht geladen, da würde ich die Ladediode oder den R201 auslöten und eine CR2032 setzen


    Ich habe aber keine Langzeiterfahrung mit dieser Konstellation


    oh wie nützlich sind Steckbretter und Arduino

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Hast du da mal ein Datenblatt für die LiR2032 ?

    nur die Kap, 53mAh im Gegensatz CR2032 210mAh


    PS. viele Versender liefern ohne LiR oder auch mit CR aber trotzdem ist die Ladeschaltung drauf was schlecht ist bei CR Betrieb.

    LiR hier nachkaufen ist viel zu teuer, also deswegen bei RTC aus China genau lesen und schauen, ggffs. nachfragen ob die LiR dabei ist, dann lieber 20 Ct. mehr bezahlen. Mittlerweile haben die Chinesen die Lücke gefunden und liefern die LiR nicht bestückt in extra Tütchen.

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Dann machen die Akkus aber nicht lange mit.

    nur wenn die gemessen 4,7V stimmen, was ich nicht für alle glaube weil:


    dazu müsste ja immer 5V oder mehr ankommen, ist aber real nicht so, Kontaktverluste und nicht immer 5V am USB senken das.


    Ich habe ehrlich noch nie 5V gesehen eher 4,7 bis 4,5 auf den sogenannten 5V.


    Kann ja mal messen

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Quote

    Ich habe ehrlich noch nie 5V gesehen eher 4,7 bis 4,5 auf den sogenannten 5V.

    Gemessen mit den beiden Multimetern, die ich gerade da habe, 5,01 Volt. :-/

    Für das Oszi hab ich gerade keine Messspitzen da, 3. Multimeter liegt im Schuppen.

  • Dazu habe ich eine Frage, die Ihr mir bestimmt beantworten könnt:

    Die DS3231 kommuniziert ja per I2C mit dem ESP bzw. Arduino. Wie ist denn der Logikpegel von I2C bzw. wird der durch die Versorgungsspannung beeinflusst?

    Zumindest die NodeMCU V3 lässt ja auf einem Pin auch 5V VCC heraus.

    Könnte ich damit die DS3231 versorgen und dennoch per PIN-Eingang über I2C die Zeit erfragen (verträgt ja nur 3V3), oder bestimmt die Versorgung auch die Höhe des Logikpegels?


    Ansonsten ist die Idee mit dem Auslöten der Ladediode auch nicht verkehrt, die CR2032 wird ja auch ne Weile halten...


    Mfg

    Minfred

  • es ist wie bei der RTC mit DS1307, es sind pullups auf Platine die müssen bei I2C Betrieb an 5V und am PI runter!


    Bei der DS1307 (läuft ungenau!) ist es leicht

    Realtime Clock (RTC DS1307) am Raspberry Pi betreiben


    Bei der DS3231 hatben die Arrays verbaut, da müsste man das Bein anheben, habe ich noch nicht machen wollen deswegen nur am Arduino mit 5V laufen lassen.


    Ohne Akku und Ladeschaltung ist 3,3v ja kein Problem am PI


    Echte I2C sind OC wie die RTC und einige Portbausteine, der Arduino ist nicht echt, die haben ja alle Pins push/pull Ausgänge also einen Transistor oben und unten und sind damit nicht OC (open collector). Deswegen ist Spannungsmix nicht so toll.


    Der PI hat sogar echte pullups eingebaut, dabei sollten diese am Ende von langen LEitungen sitzen und nicht am Anfang.

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Servus Minfred ,

    I2C ist Open Collector ... d.h. der Master (Pi) bestimmt die Pegel mit seinen Pullups (physisch verbaut auf der Raspi Seite).

    Bei vielen Arduino-Platinchen ist es allerdings so, dass die gerne mal pullups auf Vcc verbaut haben und mit 5V arbeiten.

    Da heisst es aufpassen und im Zweifelsfall nachmessen.


    Zum Thema nodemcu und 5V ... also das wäre mir neu, dass das Breakout board da 5V liefert. Ich denke da verwechselst Du was. Über den USB-Anschluss werden die 5V vom PC zur Spannungsversorgung des Boards verwendet:


    [Blocked Image: https://cdn.instructables.com/FXC/LYR7/IZ6CAP04/FXCLYR7IZ6CAP04.MEDIUM.jpg]

    Quelle


    //EDIT: da war ich mal wieder zu langsam ;(...


    cu,

    -ds-

  • Das Projekt gefällt mir.

    Da noch reichlich Platz sein wird und ein Wlan in nahezu jedem Haushalt vorhanden ist, könnte man überlegen, zusätzlich noch rudimentäre Wetterdaten darzustellen. Für die Daten des Aufstellungsortes könnte man einen BME280 (klein, günstig, I²C, Lib vorhanden) verwenden.

  • Servus Minfred ,

    [...]

    Zum Thema nodemcu und 5V ... also das wäre mir neu, dass das Breakout board da 5V liefert. Ich denke da verwechselst Du was. Über den USB-Anschluss werden die 5V vom PC zur Spannungsversorgung des Boards verwendet:

    [...]


    cu,

    -ds-

    Hi dreamshader,


    ich dachte auf dem 3. PIN links (oben auf meinem Pinout-Bild) liegt VUSB, was ja theoretisch 5V sein dürfte.

    Bei anstehenden Wechsel auf den WEMOS D1Mini fällt das aber eh weg.


    Ich habe die Quintessenz noch nicht verstanden.

    Mit Akku brauch ich sowieso 5V, welche beim Wemos D1mini nicht zur Verfügung stehen.

    Ohne Akku (also mit CR2032) nehm ich als Master den ESP8266 und die RTC als Open Collector passt sich entsprechend an, richtig?



    Das Projekt gefällt mir.

    Da noch reichlich Platz sein wird und ein Wlan in nahezu jedem Haushalt vorhanden ist, könnte man überlegen, zusätzlich noch rudimentäre Wetterdaten darzustellen. Für die Daten des Aufstellungsortes könnte man einen BME280 (klein, günstig, I²C, Lib vorhanden) verwenden.

    Exakt das ist der Plan... =) Über einen Vergleich Luftfeuchte & Temperatur innen zu außen könnte man sogar eine Lüftungsempfehlung geben. Quelle: Idee von hier

  • Exakt das ist der Plan... =) Über einen Vergleich Luftfeuchte & Temperatur innen zu außen könnte man sogar eine Lüftungsempfehlung geben. Quelle: Idee von hier

    Oder hier:

    http://www.bitmania.de/index.php?page=247

    http://bitbucket.org/m_reiter/klima


    MfG


    Jürgen

  • Ich habe die Quintessenz noch nicht verstanden.

    Mit Akku brauch ich sowieso 5V, welche beim Wemos D1mini nicht zur Verfügung stehen.

    Ohne Akku (also mit CR2032) nehm ich als Master den ESP8266 und die RTC als Open Collector passt sich entsprechend an, richtig?


    also ohne Akku und Ladeschaltung ist 3,3V Versorgung mit 3,3V ansteuerung kein Problem was der ESP benötigt, auch muss man keine verbauten pullups ausbauen.


    besser?

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Guten Abend,


    endlich wieder am Bauen...

    jar : Ja, vielen Dank, hat super geholfen.


    Das fertige Projekt soll an einem Ort verschenkt werden, wo es nicht zwingend Wifi zum Holen der aktuellen Zeit gibt.

    Außerdem funktioniert die ntp-Synchronisation (wahrscheinlich durch Auslastung serverseitig) sehr unregelmäßig.

    Ich brauche also eine RealTimeClock!


    Ich habe ein DS3231 besorgt, die Ladeschaltung (durch Auslöten des Widerstands, wie empfohlen) deaktiviert und angebaut.

    Ich nutze die Timelib.h eines gewissen Paul Stoffregen (Github-Repo PStoffregen-TimeLib).

    Dazu kombiniere ich die eine Rtc-Library von Makuna (GitHub-Repo Makuna - RtcDs3231).


    Soweit so gut.

    Die Includings erweiterte ich mich:

    C
    [...]
    #include <RtcDS3231.h>
    RtcDS3231<TwoWire> Rtc(Wire);
    [...]

    Im Setup aktiviere ich die Rtc und hole mir die (zuvor einmalig gestellte) Uhrzeit:

    Code
    void setup() {
      Rtc.Begin();
      RtcDateTime now = Rtc.GetDateTime();
      now = now -2208988800UL;
      Rtc.Enable32kHzPin(false);
      Rtc.SetSquareWavePin(DS3231SquareWavePin_ModeNone);
      setTime(now);
    [...]

    Funktioniert super.


    Allerdings habe ich zwei Probleme:

    1.

    Ich hole wie vorher die Zeit vom ntp-Server.

    Am Ende habe ich das Hochschreiben in die RTC eingefügt. Dabei habe ich mich am die Empfehlung von Makuna gehalten.

    Wenn ich jetzt den ESP neu starte, liege ich exakt 30 Jahre und 7 Tage daneben!?

    Kann sich jemand einen Reim darauf machen?

    Ich habe jetzt einfach die fehlenden Sekunden draufgerechnet (siehe Codeblock (entscheidend ab "ab hier Erweiterung..."))

    Ich will ja aber auch was lernen... weiß jemand warum?


    2.

    In der Timelib kann man einen "SetSyncProvider" (inkl. "setSyncIntervall") festlegen, das war bisher der Funktionsaufruf "getNtpTime".

    In meinem Verständnis läuft es momentan so ab:

    ESP bootet -> Zeit wird aus Rtc ausgelesen.

    Die Zeit welche auf dem Display angezeigt wird, ist die ESP-eigene Zeit (einmalig durch RTC gestellt und durch den internen Clock weitergezählt).

    Wenn ein Ntp-Paket empfangen wird, wird die ESP-eigene Zeit und (mit den Code oben) die Rtc-Zeit angepasst.


    Ist das richtig so?


    Da die internen Clocks meist recht ungenau sind, würde ich gern als "SyncProvider" die Rtc nehmen (und regelmäßiger als jetzt syncen) und nur ab und zu mal die ntp-Zeit mit der Rtc abgleichen.

    Leider scheint die Makuna-Lib die Funktion SetSyncProvider nicht zu unterstützen, oder wie kann ich die IDE-Fehlermeldung für "setSyncProvider(GetDateTime)" verstehen?

    Code
    exit status 1
    cannot convert 'RtcDS3231<T_WIRE_METHOD>::GetDateTime<TwoWire>' from type 'RtcDateTime (RtcDS3231<TwoWire>::)()' to type 'getExternalTime {aka long int (*)()}'

    Da fehlts mir dann doch an Erfahrung.

    Vielleicht kann mir jemand helfen bzw. hat jemand Expertise im Umgang ESP8266, NTP und RTC ( dreamshader ?). Hatte ich zumindest in deinem Blog gelesen :saint:



    In der Hoffnung euch nicht allzuviel gelangweilt zu haben...


    Mfg


    PS:

    Die Version 0.9 enthält nun u.a.:

    - mehrere Wifis vorkonfigurierbar

    - Liebesdisplay (zeigt verstrichene Sekunden/Tage/Jahre) inkl. einer durchlaufenden Glückwunschmeldung in einer Beziehung an ^^^^

    - alle 5 Sekunden wird im Liebesdisplay stattdessen ein Bitmap eingeblendet *kitsch pur*

    - Menüpunkt "IP-Adresse" heißt jetzt "Wifi-Info" und zeigt verbundene SSID, IP und Signalstärke an

    - wie oben beschrieben eingebundene RTC


    ToDo:
    - automatische Sommer-/Winterzeitumstellung

  • Wenn ich jetzt den ESP neu starte, liege ich exakt 30 Jahre und 7 Tage daneben!?

    Unix time?


    vielleicht wartet man aufs Netzwerk, Router und andere anpingen bis Netzwerk verfügbar ist.

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Moin,


    da nun endlich das Geschenk überreicht wurde, wollte ich euch das fertige Ergebnis nicht vorenthalten:


    Als Menüpunkte habe ich verwirklicht:

    - Hochzeitstag-"Count-Up" in Sekunden, Tagen, Jahre

    - Digitaluhr

    - Analoguhr

    - Temperatur im Wecker (vom integrierten Sensor in der DS3231)

    - Wifi-Infos (IP-Adresse, Empfangsstärke)

    - Verstellung der Zeitzone (gedacht für Sommer-/Winterzeit, für automatisierten Wechsel hatte ich keine Zeit mehr)

    - Reset des ESPs


    Bei Bedarf kann ich davon auch noch ein Video einstellen.

    Vielen Dank für die Tipps und vielen Dank an das Forum für die vielen Ideen und Lösungen, die ich mir an der einen oder anderen Stelle abgeschaut habe.


    Mfg

    Minfred