RTC DS1307 Modul am Raspberry Pi – Die richtige Uhrzeit ohne Internet

Normalerweise wird beim Raspberry Pi die aktuelle Uhrzeit über das Internet mit einem Zeit-Dienst (Network Time Protokoll) synchronisiert. Wenn jedoch kein Internet zur Verfügung steht und der RasPi dennoch die aktuelle Uhrzeit benötigt, kann ein Modul mit Echt-Zeit-Uhr (Real Time Clock) verwendet werden. Die günstigen RTC-Module haben einen eigenen Quarz, der den Takt der Uhr vorgibt, und eine kleine Knopfzelle die den Baustein mit Strom versorg, dadurch läuft dieses Modul und somit auch die Uhrzeit weiter, auch wenn der Raspberry Pi ausgeschaltet ist.

Update:
Wer gerne mal in die GPS Projekte reinschnüffeln möchte kann auch via GPS-Empfänger die aktuelle Uhrzeit auf seinem Raspberry Pi einstellen

DS1307 -2  DS1307

 Benötigte Hardware

Die DS1307 Module gehen alle Bauart bedingt leider immer einige Sekunden vor / nach (Temperaturabhängig), wer eine Sekunden genaue Uhrzeiten benötigt sollte sich lieber nach den teuren DS3231-Modulen umsehen, wobei eine RTC für über 10€ bei einer 40€ Hardware genau überlegt sein sollte. Alternativ gibt es auch DCF77 Funkmodule für die Uhrzeit aus Frankfurt, diese sind aber ähnlich teuer und als fertige USB Devices unbezahlbar.

Das RTC Modul verkabeln

Damit das Modul mit dem Raspberry Pi funktioniert müssen zwei Widerstände (R2 und R3) entfernt werden, diese müssen mit Hilfe eines Lötkolbens entlötet werden. Wer die Kabel nicht direkt anschließen oder anlöten möchte kann dann noch eine zusätzliche Stiftleiste an P1 verlöten. Mit einer Stiftleiste kann das Modul zum Beispiel auf einem Breadboard benutzt, oder anhand von Jumper Kabeln recht einfach mit dem Raspberry OPi verbunden werden. Die Widerstände müssen zwingend entfernt werden, andernfalls kann euer RasPi beschädigt werden.

RTC-Resistors

Nun können wir das RTC-Modul an den abgeschalteten Raspberry Pi anschließen. Verwendet hierzu P1 am Modul. Gerne könnt ihr auch mein GPIO Worksheet verwenden.

Hier noch mal grafisch dargestellt für die unter euch die nicht wissen wie die GPIO-Pinbelegung am RasPi ist.

RasPi-GPIO-RTC

RTC am Raspberry Pi einrichten

Als erstes aktualisieren wir wie immer das System mit folgenden Befehlen und installieren dann das Paket „i2c-tools“.

Nun aktivieren wir die I²C Schnittstelle durch das editieren der Datei „raspi-blacklist.conf“ mit dem Editor Nano

Die benötigten Module stehen im Standard auf der „Backlist“ da viele diese nicht benötigen, um Sie von der schwarzen Liste zu entfernen fügen wir jeweils vor „blacklist spi-bcm2708“ und „blacklist i2c-bcm2708“ eine Raute ein. Das bewirkt dass das System die Zeilen als Kommentar wertet und die Module nicht mehr auf der Blacklist stehen. Ihr könnt die beiden Zeilen aber auch komplett löschen.

Da wir die beiden genannten und weitere Module natürlich für den Betrieb der Uhr benötigen und bei jedem Start des Raspberry Pi laden möchten editieren wir die Datei „/etc/modules“ wieder mit Nano.

Wir fügen die Module einfach in der Datei ans Ende der Datei an.

Um die Module zu aktivieren müssen wir den Raspberry Pi ein mal neu starten (sudo reboot).

Real Time Clock Testen

Als nächstes können wir testen ob die RTC nach dem Laden der benötigten Module am i2c Bus angezeigt wird. Das erledigen wir mit folgendem Befehl.

Die Ausgabe sieht so aus, die Uhr wurde also unter der Adresse 68 gefunden und der Speicherchip für die Uhrzeit unter der Adresse 50. Solltet ihr hier keine Ausgabe erhalten überprüft eure Verkabelung.

Wenn das funktioniert hat können wir uns die Sekunden, Minuten und Stunden wie folgt anzeigen, die Befehle müssen allerdings als root ausgeführt werden (sudo bash). Die Ausgabe ist Hexadezimal und kann z.B. mit dem Windows Calculator im Wissenschaftlichen Modus in Dezimal umgerechnet werden. Alternativ verwendet einen Umrechner im Web. Bei mir sind ist es: 23 Sekunden, 55Minuten und  21Stunden

Uhr einrichten

Jetzt können wir die Uhr ins System einbinden und mit hwclock testen, auch das müssen wir als root erledigen

Die Ausgabe der Zeit in einem für uns lesbaren Format erledigt das Tool „hwclock“ für uns.

Da es kein Funkmodul ist wird wird die Ausgabe der Zeit das erste mal falsch sein (Januar im Jahr 2000), daher müssen wir erstmal die aktuelle Systemzeit in das Modul schreiben.

Wir sehen uns erstmal mit „Date“ unsere aktuell eingestellte Systemzeit an. Stimmt diese nicht da der RasPi keine Internet Verbindung hat könnt ihr diese mit „sudo date –set YYYY-MM-DD“ und „sudo date –set hh:mm:ss“ setzen.

Ist die Systemzeit aktuell können wir diese wieder mit hwclock in das RTC Modul schreiben, zu kontrolle könnt ihr wieder den Parameter -r verwenden um euch die Zeit der Hardware-Uhr ausgeben zu lassen.

Um die Uhrzeit der RTC dauerhaft als Zeitquelle für unseren Raspberry Pi zu verwenden müssen wir noch das Startverhalten des Raspberry Pi so verändern das er bei jedem Start die Zeit der RTC holt.

Wir fügen vor „exit 0“ folgende Zeilen ein. Wir initialisieren das Modul am i2c Bus und setzen mit dem dem Parameter -s dann die Systemzeit vom Modul,

Nach einem Neustart  (sudo reboot) könnt ihr die Uhrzeit wieder mit „sudo hwclock -r“ testen. Ab sofort ist eure Systemzeit auch ohne Internet immer aktuell. Falls ihr das bei der Grundeinrichtung nicht schon erledigt habt solltet ihr eure Zeitzone noch über „sudo raspi-config“ unter „Internationalization Options“ > „Time Zone“ korrekt einstellen.