Horloge RTC DS1307
Pour contourner ce problème, lorsqu'il dispose d'une connexion réseau, un client ntp
est lancé automatique pour ajuster l'heure. Une autre alternative est d'ajouter un module DS1307 : c'est une horloge matérielle avec une pile de sauvegarde qui se branche sur le port I2C.
Branchement
Le branchement de l'horloge est le suivant :
VCC
à une broche+5v
du PiGND
à une brocheGND
SDA
à la brocheSDA
SCL
à la brocheSCL
Voici un shéma de branchement sur un Raspberry Pi Zero :
Pour mémoire, voici l'assignation des broches d'un Raspberry Pi.
Voici l'ensemble monté :
Logiciel
Ce module est déjà pris en charge depuis bien longtemps par le noyau Linux, il suffit juste de charger les bons modules au démarrage et de lancer quelques commandes de synchronisation.
Pour commencer, éditer le fichier /etc/modules
afin d'ajouter 3 modules à charger au boot :
- /etc/modules
i2c-dev i2c-bcm2708
Puis, enrichir le fichier /boot/config.txt
pour enrichir le “Device Tree Overlay” :
- /boot/config.txt
[...] dtoverlay=i2c-rtc,ds1307
Remarque
S'il y a déjà un ou plusieurs ligne(s) présente(s), il faut ajouter la nouvelle sans modifier les autres.
Redémarrer le Raspberry Pi et vérifier la bonne détection de la puce DS1307 via l'outil i2cdetect
(installer le paquet i2c-tools
si nécessaire) :
sudo i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --
Ici, la présence des lettres 68
à la ligne 60
, colonne 8
indique la bonne détection de la puce à l'adresse 0068
.
Consulter les logs du noyau pour vérifier le bon chargement du module par le noyau :
sudo dmesg -T | grep 1307 [Sat Nov 17 17:43:30 2018] rtc-ds1307 1-0068: SET TIME! [Sat Nov 17 17:43:30 2018] rtc-ds1307 1-0068: registered as rtc0
Lors du premier branchement, la puce n'est pas encore à l'heure et indique une date au 1er janvier 2000. Il faut d'abord mettre le Raspberry Pi à l'heure en le branchant sur le réseau par exemple puis l'écrire sur le DS1307.
Vérifier la date et mettre à l'heure si nécessaire via la commande date
.
Puis, écrire la date courante dans le module DS1307 à l'aide de hwclock
:
sudo hwclock -w
Vérifier la bonne prise en compte :
sudo hwclock -r 2018-11-17 17:45:26.148564+0100
Désormais, l'horloge RTC est reglée et gère toute seule l'avancement du temps.
Pour que le Raspberry Pi lise l'heure sur ce module externe au démarrage, il faut appeler la commande hwclock
en ajoutant la ligne suivante en fin de fichier /etc/rc.local
avant le exit 0
- /etc/rc.local
hwclock -s || true
Source :