Datum / Uhrzeit vom Raspberry an den Arduino senden

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo,

    ich betreibe einen Raspberry und einen Arduino und benötige im Arduino das Datum und die Uhrzeit. Da ich aus verschiedenen Gründen keine weitere Hardware verwenden möchte, möchte ich das Datum und die Uhrzeit vom Raspberry (der hat sie vom Timeserver) auf den Arduino übertragen. Ich habe beide Geräte bereits per I2C verbunden um Daten vom Arduino an den Raspberry zu senden.

    Mein Plan war erst, den Unix-Timestamp (in Sekunden) in gewissem Abstand an den Arduino zu senden und diesen in C dann in ein Datum / Uhrzeit umzurechnen. Dies geht aber nicht, da per I2C anscheinend keine so großen Zahlen übertragen werden können.

    Wie habt Ihr das gelöst? Gibt es (andere) elegante Möglichkeiten, die Uhrzeit und das Datum auf den Arduino zu bringen, ohne weitere Hardware einzusetzen? Wichtig ist mir eine genaue Zeit mit Schaltjahren sowie Sommer- und Winterumstellung. Außerdem muss die Uhrzeit nach einem Stromausfall wieder automatisch auf den Arduino übertragen werden.

    Viele Grüße,

    berryfox

  • Datum / Uhrzeit vom Raspberry an den Arduino senden? Schau mal ob du hier fündig wirst!

  • Wieso überträgst du die Info nicht einfach Byteweise. Tag, Monat, Jahr, Stunde, Minute, Sekunde... dann brauchst du sie im Arduino auch nicht mehr umrechnen.

    Wozu braucht denn der Arduino die Uhrzeit? Kann er sie nicht fallweise beim Pi abfragen, wenn er sie benötigt?

    Alternativ eine Echtzeituhr für den Arduino.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Ja stimmt, also statt z.B. ein mal "1520353094" einfach mehrmals z.B. "2018", "3" und "6". Wobei "2018" dann ja auch nicht geht, weil der Maximalwert "255" ist?! Aber da reicht es ja wenn ich "18" übertrage. Muss ich nur mal schauen, wie ich das nacheinander übertrage. Bisher übertrage ich testweise einfach nur eine "4".

    Python
    def writeMsg(value):
            com.write_byte(address, value)
            return -1
    
    while True:
    
            # Zustände abfragen
            writeMsg(4)

    Vom Arduino sende ich schon eine Struktur, das müsste ich dann nur auch in Python realisieren:

    C
    byte data[4];
    
    data[0] = 1;
    data[1] = 2;
    data[2] = 3;
    data[3] = 4;
    
    Wire.write(data, sizeof(data));

    Der Arduino braucht die Uhrzeit, weil z.B. eine Steckdose nach einer Uhrzeit ein- und ausgeschaltet werden soll. Außerdem benötige ich die die Info, ob HEUTE ein Samstag, Sonntag oder Feiertag ist. Auch dafür benötige ich die aktuelle Zeit (Anhand des Tages wird die Steckdose z.B. zu anderen Zeiten geschaltet).

  • Ja, das könnte ich tun, möchte die eigentliche Steuerung aber komplett auf dem Arduino realisieren, da dieser dann auch ohne Raspi laufen könnte, wenn der Raspi sich mal aufhängt etc. Denke mal, der Arduino läuft theoretisch stabiler als der Raspi.

    Klar, dan würde die Zeit nicht mehr gesetzt, aber einmal gesetzte Zeit wird im Arduino ja wohl weiter laufen solange der Strom nicht ausfällt? :mad_GREEN:

  • Denke mal, der Arduino läuft theoretisch stabiler als der Raspi.

    Ich hab hier einen Pi A+ der seit drei Jahren ohne jedes Problem läuft und meine Sensordaten verarbeitet. Einfach einen Watchdog einrichten der guckt ob dein Script läuft und es neu anstartet sollte das nicht der Fall sein - das war alles was dafür nötig war.

    Und ja, man bekommt 2 RTC für einen Euro inkl. Versand.

  • So weit ich weiß läuft da nix weiter - der Arduino hat keine eingebaute Uhr. Da musst du schon einen Timer stellen und die Sekunden mitzählen.

    Wenn du nicht auf extreme Sparsamkeit angewiesen bist (Batteriebetrieb), dann solltest du wirklich eine Echtzeituhr nehmen und die kannst du gelegentlich mit dem Pi abgleichen.

    Wenn du auf Stromsparen angewiesen bist, hilft dir vielleicht die Time Library oder du zählst die Zeit selbst mit... und wenn der Arduino schläft, rechnest du die Schlafzeit nach dem Aufwachen dazu...

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Eine RTC hat auf der Platine in der Regel einen Batteriehalter und darin z.B. eine CR2032 Knopfzelle sitzen - die reicht um die Zeit Jahrelang zu halten...

    Ja stimmt, die Modelle die ich gesehen habe, haben die direkt mit an Bord. Dann würde ich also eine RTC kaufen müssen und würde die Zeit trotzdem ab und an vom Raspi setzen. Ich hatte gedacht der Arduino kann sich die Zeit bei einem Stromausfall nicht merken, kann diese aber weiterlaufen lassen, sobald sie einmal gesetzt wurde.

  • Ich hatte gedacht der Arduino kann sich die Zeit bei einem Stromausfall nicht merken...

    Stimmt bis hierher. Aber die RTC ist ja dazu da 'die Zeit weiterlaufen zu lassen' selbst wenn es einen Stromausfall gab. Wenn du deinen Code jetzt dazu bringst beim Setup die RTC auszulesen sollte es passen, selbst wenn der Arduino mal keinen Saft mehr hatte.

  • ...Aber die RTC ist ja dazu da 'die Zeit weiterlaufen zu lassen' selbst wenn es einen Stromausfall gab. Wenn du deinen Code jetzt dazu bringst beim Setup die RTC auszulesen sollte es passen, selbst wenn der Arduino mal keinen Saft mehr hatte.

    Aber heißt das auch, dass wenn ich die Uhrzeit einmal übertragen habe, sie auf dem Arduino bis zum Sromausfall weiter läuft? Dann bräuchte ich für meinen ersten Test keine RTC. Dass die Uhrzeit dann bei einem Stromausfall weg ist, ist klar.

  • Es wird nichts übertragen. Es wird von der RTC abgefragt - wenn du die Zeit brauchst, fragt dein Programm die RTC wie spät es ist

    Ich glaube entweder reden wir aneinander vorbei oder ich bin zu doof :shy::conf:

    Wenn ich in gewissen Abständen die Zeit vom Raspi an den Arduino schicke (z.B. alle 10 Minuten), läuft die Uhr dann im Arduino OHNE RTC innerhalb der 10 Minuten weiter? Oder ist die Uhrzeit direkt wieder weg? Oder brauche ich für mein Vorhaben ZWINGEND eine RTC?

    • Offizieller Beitrag

    Ich glaube du hast ein generelles Verständnisproblem ;). Wenn du die Zeit von wo auch immer an deinen Pi Ardunio sendest, läuft da gar nichts weiter. Du hast du die Zeit in welcher Form und welchem Datentyp auch immer an den Arduino sendest. Dann hast du die Zeit, einmalig. Da läuft nichts weiter, da fängt nichts an, da hört nichts auf. Es passiert nur etwas, wenn du dem Gerät explizit sagst, was es machen soll.

  • ...Da läuft nichts weiter, da fängt nichts an, da hört nichts auf. ...

    OK Danke! Dann ist also meine Lösung: Eine RTC kaufen, diese per I2C anschließen und die Zeit vom Raspi an den Arduino und weiter an die RTC zu übermitteln, richtig? Die RTC merkt sich die Zeit und sie läuft eigenständig weiter. Da sie die aktuelle Zeit aber nicht ermitteln kann, muss ich sie aber (zuminddest einmal) an die RTC übermitteln!? Anschließend kann ich im Arduino an der RTC fragen, "wie spät", "welcher Wochentag", etc. Passt das so?

    • Offizieller Beitrag

    n und die Zeit vom Raspi an den Arduino und weiter an die RTC zu übermitteln

    Die RTC liefert immer (solange ne Batterie angeschlossen ist) die aktuelle Zeit. Da musst du auch vom Pi nichts hinsenden. In deinem Programm auf dem Arduino fragst du immer, wenn du die Zeit brauchst, die RTC ab. Die Zeit "läuft in der RTC weiter", aber du musst sie jedes mal neu abfragen.

  • Wenn du ohnehin eine Verbindung zum Pi hast, brauchst du eigentlich nicht mal eine RTC. Mit der Time-Library kannst du quasi eine Software-Uhr laufen lassen. Und beim Neustart holst du die Zeit vom Pi.
    Wenn dein Arduino autark arbeiten soll, ist eine RTC sinnvoll

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • dbv Genau, die Zeit läuft in der RTC weiter, aber trotzdem muss ich die Zeit doch mindestens 1 Mal initial setzen oder? Die RTC kann doch die Uhrzeit nicht alleine ermitteln, sondern nur laufen lassen?

    Gnom Ja so etwas war meine erste Idee. Bin jetzt ein wenig hin und her gerissen, finde die RTC aber auch nicht mehr so schlecht.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!