Python exemplarisch - RPi Tutorial
deutsch     english

TIMER

 

Alle Programme können von hier heruntergeladen werden.


 

NTP Zeitsynchronisation

 

Wenn der Raspberry Pi neu gebootet wird und das Linux-Betriebssystem startet, entsprechen das Systemdatum und die Systemzeit den Werten, die beim letzten Betrieb gespeichert wurden. Sie benötigen aber vielmehr die aktuelle Uhrzeit und das aktuelle Datum (im Folgenden mit Zeitpunkt bezeichnet). Linux kann diese Informationen von einem der Internet-Zeitserver mit dem Network Time Protocol (NTP) abrufen. Auf der ganzen Welt gibt es Hunderte NTP-Server und diese bieten Zeitdienste für mehrere hundert Millionen Systeme an. Auf dem Raspberry Pi müssen Sie den geeigneten NTP-Server auswählen, indem Sie die Datei /etc/ntp.conf editieren. Beim Booten wird dann ein Dienst gestartet, welcher versucht, den Raspberry Pi mit dem NTP-Server zu verbinden. Wenn dies gelingt, wird die Systemuhr automatisch auf die aktuelle Weltzeit (UTC) gestellt. Haben Sie zudem noch die Zeitzone richtig eingestellt (siehe unten), so gibt der date-Befehl den korrekten lokalen Zeitpunkt. Wenn der Raspberry Pi beim Booten allerdings keinen Internetzugriff hat, ist die Zeit natürlich falsch.

Um die Synchronisation einzurichten, öffnen Sie ein Terminal und geben ein:

sudo nano /etc/ntp.conf

Ersetzen Sie den Zeitserver in den Zeilen

server 0.dk.pool.ntp.org iburst
server 1.dk.pool.ntp.org iburst
server 2.dk.pool.ntp.org iburst
server 3.dk.pool.ntp.org iburst

mit dem Zeitserver Ihrer Region, die Sie hier. finden. Für Deutschland und der Schweiz:

server 0.de.pool.ntp.org iburst
server 1.de.pool.ntp.org iburst
server 2.de.pool.ntp.org iburst
server 3.de.pool.ntp.org iburst

Kommentieren Sie die folgenden Zeilen aus ( Zeichen # voran setzen):

resctrict 127.0.0.1
restrict ::1

Speichern Sie die Datei und wählen Sie die richtige Zeitzone mit:

sudo cp /usr/share/zoneinfo/<zone> /etc/localtime

Ersetzen Sie <zone> mit Ihrer Zeitzone. Prüfen Sie die möglichen Werte, indem Sie in /usr/share/zoneinfo suchen. Für die Schweiz tippen Sie::

sudo cp /usr/share/zoneinfo/Europe/Zurich /etc/localtime

Starten Sie den Zeitsynchronisierungsdienst (ntp) mit:

sudo /etc/init.d/ntp restart

Tippen Sie

date

und prüfen Sie, ob der Zeitpunkt richtig ist. Wenn dies nicht der Fall ist, erzwingen Sie die Synchronisation mit:

sudo ntpd -gq
sudo /etc/init.d/ntp restart

 


 

Echtzeit-Uhr auf der Basis des DS1307 Chips

 

Bei vielen Echtzeitanwendungen hat der Raspberry Pi beim Starten keinen Zugang zum Internet. Ähnlich wie bei jedem PC, wo eine Pufferbatterie die Systemuhr im Betrieb hält, kann beim Raspberry Pi eine Echtzeituhr (Realtime Clock, RTC) basierend auf dem DS1307 Chip diese Funktion übernehmen. Die RTC-Module können Sie bei verschiedenen Internetquellen finden. Einige davon sind Boards, die direkt am GPIO-Stecker eingesteckt werden und über I2C kommunizieren. Sie können aber auch Ihre eigene RTC mit dem DS1307 Chip auf einer Steckplatine aufbauen.

timer1  
Schema von binerry.de
 

Aus dem Datenblatt des DS1307 entnehmen Sie, dass der Datenaustausch sehr einfach ist. In den 8-bit Registern mit den Adressen 0x00 bis 0x06 werden die Sekunden, Minuten, Stunden, Wochentag, Tag, Monat, Jahr des aktuellen Zeitpunkts im BCD-Format gespeichert (Binär-Coded-Dezimal: zwei Dezimalstellen als 2 Halbbytes binär kodiert, beispielsweise dezimal 41 als binär 01000001). Durch Schreiben in die Register kann die Uhr voreingestellt werden. Solange der Chip durch eine externe Spannungsquelle oder die Batterie versorgt bleibt, kann der aktuelle Zeitpunkt durch Lesen der Register geholt werden. Das Register mir der Adresse 0x07 ist ein Kontrollregister und wird Im Normalbetrieb nicht benötigt.

Wie üblich strukturieren wir den Code für das Clock-Modul und verwenden eine einfache Klasse, genannt RTC, in der Datei RTC_DS1307.py . Dieses können Sie hier herunterladen. Mehr Informationen finden Sie in der Python-Dokumentation.

Nach der Installation sollten Sie die RTC zuerst mit setDate() auf den aktuellen Zeitpunkt setzen.

Programm:[►]

# SetDate.py

from RTC_DS1307 import RTC

rtc = RTC()
rtc.setDate(seconds = 0, minutes = 47, hours = 9, dow = 3,
            day = 8, month = 6, year = 16)
print "Date set to:", rtc.getDateStr()
Programmcode markieren (Ctrl+C copy, Ctrl+V einfügen)

Um den aktuellen Zeitpunkt zu holen, rufen Sie die Funktionen getDate() oder getDateStr() auf.

Programm:[►]

# GetDate.py

from RTC_DS1307 import RTC

rtc = RTC()
print "Got date:", rtc.getDateStr()

Programmcode markieren (Ctrl+C kopieren, Ctrl+V einfügen)

In diesem Programm wird die Linux-basierte Uhr (Systemzeit) nicht auf die RTC synchronisiert. Es ist Ihnen überlassen, dies mit einigen zusätzlichen Programmzeilen zu tun.