Wanneer een Raspberry Pi is verbonden met een netwerk dan zal deze bij het opstarten de interne klok via het NTP (Network Time Protocol) synchroniseren met een tijd server op het internet.
Het kan natuurlijk voorkomen dat je een Raspberry Pi gaat inzetten die niet is altijd verbonden is met het internet. Op het moment dat een netwerkloze Raspberry Pi wordt herstart zal de tijd automatisch worden teruggezet naar de datum waarop het image dat je gebruikt is aangemaakt. Door het ontbreken van een netwerkverbinding kan de tijd niet worden gesynchroniseerd.
De oplossing voor dit probleem is een DS3231 RTC module (Real Time Clock) aansluiten op de Raspberry Pi. Dit is een zeer goedkope add-on module (vanaf € 1,00) die je op de GPIO pinnen van de Raspberry Pi kunt plaatsen. De module bevat een klok-chip en een batterij die de tijd laat doorlopen en kan via GPIO worden uitgelezen.
Gebruikte componenten
• DS3231 Real-Time Clock Module
Raspberry Pi Zero
Raspbian Jessie (2016-05-27 kernel 4.4.13)
I2C Activeren
Een DS3231 RTC board maakt in de meeste gevallen gebruik van het I2C protocol om te kunnen communiceren met de Raspberry Pi. Het mooie van I2C is dat meerdere apparaten/modules kunnen communiceren via de GPIO pinnen die worden gebruikt voor I2C.
Standaard is de I2C functionaliteit op de Raspberry Pi uitgeschakeld. Je kunt deze activeren met behulp van raspi-config.
sudo raspi-config
Selecteer de optie ‘Advanced Options’ ▸ ‘I2C’ en kies ‘YES’ om de I2C interface te activeren.
DS3231 RTC module aansluiten
Voordat je iets aansluit op de GPIO is het verstandig om de Raspberry Pi uit te schakelen. Dit kun je doen met behulp van het commando:
sudo shutdown -h 0
De Raspberry Pi zal direct beginnen met de shutdown, nadat de groene 5x met dezelfde interval heeft geknipperd kun je de netvoeding verwijderen en de RTC module aansluiten.
De RTC module plaats je linksonder op de GPIO interface (met GPIO interface naarboven), zie de foto.
Nadat de RTC module is geplaatst gaan we de Raspberry Pi configureren zodat de module kan worden uitgelezen. Als eerste controleren we of de RTC module wordt gedetecteerd op de I2C interface.
i2cdetect -y 1
Na het uitvoeren van het commando krijg je een overzicht van de aangesloten I2C apparaten. In dit overzicht zal je de RTC module als ID #68 terugvinden.
Mocht het i2cdetect commando niet werken ‘i2cdetect: command not found’, installeer dan eerst de I2C tools:
sudo apt-get install i2c-tools
RTC clock gebruiken
Om gebruik te kunnen maken van de RTC moeten we eerst de RTC module toevoegen aan de kernel. Dit doe je door de onderstaande vier commando’s uit te voeren:
sudo modprobe rtc-ds1307 sudo bash echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device exit
Hierna controleren we de tijd van de DS3231 RTC module:
sudo hwclock -r
Bij de eerste maal gebruik zal een datum in het bereik van 1 Januari 2000 worden weergegeven. We moeten dus de RTC module vertellen wat de huidige tijd en datum is. Dit gaat het eenvoudigste als de Raspberry Pi is verbonden met het netwerk, omdat dan automatisch de klok wordt goedgezet. De huidige tijd van de Raspberry Pi kun je bekijken met behulp van het commando date.
date
Is de Raspberry Pi niet verbonden met een netwerk gebruik dan het onderstaande commando om de tijd van de Raspberry Pi handmatig aan te passen. Bijvoorbeeld:
sudo date -s '2015-12-25 17:40:56'
Als de datum en tijd goed zijn ingesteld op de Raspberry Pi dan moeten we deze kopiëren naar de RTC module.
sudo hwclock -w
Controleer hierna of de tijd op RTC module correct is met:
sudo hwclock -r
Automatisch de klok aanpassen
Als laatste stap moeten we de Raspberry Pi vertellen dat iedere keer na een herstart de huidige tijd moet worden opgehaald bij de RTC module. Hiervoor moet we de RTC kernel module toevoegen aan /etc/modules
sudo nano /etc/modules
Voeg onderaan bestand toe:
rtc-ds1307
Bewaar de wijzigingen: ctrl+X, Y, enter
Hierna moeten we DS1307 activeren bij het opstarten, die doen we in het bestand /etc/rc.local
sudo nano /etc/rc.local
Voeg de onderstaande regels toe, voor de regel met ‘exit 0’
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device sudo hwclock -s date
Bewaar de wijzigingen: ctrl+X, Y, enter
Werking testen
Sluit je Raspberry Pi af en verwijder de aanwezige ethernet kabel of wifi dongle. Start hierna de Raspberry Pi opnieuw op. Tijdens het opstarten wordt de tijd van de RTC module gekopieerd naar de interne klok van de Raspberry Pi. Je kunt dit controleren door het date commando te gebruiken.
date
De huidige datum en tijd zal nu worden weergegeven.
In China een module besteld en via deze handleiding eenvoudig geïnstalleerd! Dank u!
Ik krijg UU ipv 68 te zien, maar het werkt wel.
(met dit cmd: i2cdetect -y 1)
hallo Richard, ik heb een rpi ups bij aliexpress gekocht en jouw installatiemodel toegepast.
Werkt als een tierelier, bedankt.