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
Benötigte Hardware
- Tiny DS1307 I2C RTC DS1307 24C32 Zeit Time Uhr Modul oder
- RTC I2C DS1307 AT24C32 Real Time Clock Module
- Raspberry Pi Modell A, B oder B+
- vier Verbindungskabel (Male / Female abhängig davon ob ihr ein Breadboard benutzt)
- Ein paar Stiftleisten (optional)
- ein Lötkolben, sowie etwas Werkzeug (kleine Zange etc)
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.
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.
RTC am Raspberry Pi einrichten
Als erstes aktualisieren wir wie immer das System mit folgenden Befehlen und installieren dann das Paket „i2c-tools“.
1 2 3 |
sudo apt-get update && sudo apt-get upgrade sudo apt-get install i2c-tools |
Nun aktivieren wir die I²C Schnittstelle durch das editieren der Datei „raspi-blacklist.conf“ mit dem Editor Nano
1 |
sudo nano /etc/modprobe.d/raspi-blacklist.conf |
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.
1 2 3 |
# blacklist spi and i2c by default (many users don't need them) #blacklist spi-bcm2708 #blacklist i2c-bcm2708 |
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.
1 |
sudo nano /etc/modules |
Wir fügen die Module einfach in der Datei ans Ende der Datei an.
1 2 3 4 5 |
snd-bcm2835 spi-bcm2708 i2c-bcm2708 i2c-dev rtc-ds1307 |
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.
1 |
sudo i2cdetect -y 1 |
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.
1 2 3 4 5 6 7 8 9 |
0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: 50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- |
1 2 3 4 5 6 7 8 |
sudo bash root@raspberrypi:~# i2cget -y 1 0x68 0 0x37 root@raspberrypi:~# i2cget -y 1 0x68 1 0x17 root@raspberrypi:~# i2cget -y 1 0x68 2 0x15 |
Uhr einrichten
Jetzt können wir die Uhr ins System einbinden und mit hwclock testen, auch das müssen wir als root erledigen
1 2 |
sudo bash echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device |
Die Ausgabe der Zeit in einem für uns lesbaren Format erledigt das Tool „hwclock“ für uns.
1 2 |
root@raspberrypi:~# hwclock -r Tue 03 Sep 2013 16:23:17 UTC -0.781864 seconds |
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.
1 2 |
pi@raspberrypi ~ $ date Thu Oct 9 18:16:30 CEST 2014 |
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.
1 |
sudo hwclock -w |
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.
1 |
sudo nano /etc/rc.local |
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,
1 2 |
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device sudo hwclock -s |
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.