Ajout d’une horloge en temps réel au Raspberry Pi

Dans cet article je vais ajouter un module d’horloge en temps réel RTC (RTC signifie Real Time Clock en anglais) DS3231 à mon Raspberry Pi.

circuit horloge DS3231
circuit horloge DS3231

Par défaut, le Raspberry Pi se connecte sur internet pour avoir l’heure exacte et régler son horloge interne. Il est obligé de se mettre à l’heure après chaque arrêt. Avec ce module d’horloge en temps réel le réglage se fait une fois pour toute (enfin presque ! ). Ensuite le module sauvegarde la date et l’heure grâce à un circuit imprimé alimenté par une batterie, et le Raspberry Pi utilise la date et l’heure prise sur ce circuit.

Installation du module horloge en temps réel sur le Raspberry Pi

Le module RTC DS3231 se connecte sur les broches 1 3 5 7 9 du Raspberry pi. Il suffit d’embrocher le connecteur du module sur les broches du Raspberry Pi.

PIN Raspberry pi
PIN Raspberry pi

Bien sur avant de connecter quoi que ce soit il faut arrêter et débrancher le Raspberry Pi de son alimentation (Cela va de soi, mais cela va mieux en le faisant).

  • Broche 1: VCC / 5V / Vin (broche d’alimentation IC)
  • Broche 3: SDA (ligne de données série)
  • Broche 5: SCL (ligne d’horloge série)
  • Broche 7: GPCLK0 (horloge à usage général)
  • Broche 9: GND (broche de masse)

Pour tout dire je ne sais pas à quoi sert la broche 7 GPCLK0 (General Purpose CLock), mais elle se trouve sur le connecteur alors voila.

Configuration du Raspberry Pi pour I2C

Pour commencer il faut bien sûr que le Raspberry Pi soit déjà installé avec son système d’exploitation. Vous trouverez une explication dans cet article.

Avant de commencer à configurer et à utiliser le RTC, il faut d’abord mettre à jour le Raspberry Pi.

sudo apt update && sudo apt upgrade

Une fois que c’est fait il faut activer le protocole I2C pour que la communication soit possible entre le Raspberry Pi et le circuitDS3231. Pour ça il faute passer par raspi-config.

sudo raspi-config

Sur le premier menu on sélectionne la ligne « 3 Interface Options« . Puis sur le menu suivant on choisi la ligne « 5 I5 I2C ».
Une fois que tout ça est fait il faut redémarrer le Raspberry Pi par un violent.

sudo reboot

Une fois le redémarrage du Raspberry Pi terminé, nous devons installer deux packages supplémentaires. Ces packages nous aideront à savoir si nous avons configuré I2C avec succès et s’il fonctionne comme prévu.

sudo apt install python3-smbus i2c-tools

Ces outils installés, il faut exécuter la commande suivante sur votre Raspberry Pi pour savoir si le circuit d’horloge en temps réel est détecté et s’il fonctionne correctement.

sudo i2cdetect -y 1
RTC

Voila ce que l’on option quand tout est bien en place. Une fois le pilote du noyau opérationnel, l’outil commencera à afficher UU à la place, c’est une indication qu’il fonctionne comme prévu.

Une foit I2C configuré avec succès et vérifié que nous pouvons voir notre circuit RTC, nous pouvons alors commencer la configuration du Raspberry Pi pour utiliser notre puce RTC pour avoir l’heure et la date à jour en permanence.

Configuration de l’heure et de la date de l’horloge en temps réel du Raspberry Pi.

Il faut d’abord modifier le fichier de configuration de démarrage du Raspberry Pi afin que le pilote de noyau soit chargé correctement.

On commence par modifier le fichier   « /boot/firmware/config.txt« .

sudo nano /boot/firmware/config.txt

Dans ce fichier, il suffit d’ajouter la ligne:

dtoverlay=i2c-rtc,ds3231

Au bas du fichier. On enregistre et on quitte l’éditeur.

Une fois cette modification effectuée, il faut redémarrer le Raspberry Pi afin qu’il charge les dernières modifications de configuration

sudo reboot

Une fois que votre Raspberry Pi a fini de redémarrer, on exécute la commande suivante pour nous assurer que les pilotes pour la puce RTC sont chargés. Voila ce que l’on doit voir normalement.

sudo i2cdetect -y 1
rtc2

Après avoir activé avec succès le pilote du noyau et que nous savons qu’il communique avec le Raspberry Pi, on peut supprimer le package « fake-hwclock ». Ce package simule une véritable horloge matérielle lorsque vous n’en avez pas.

Entrez les deux commandes suivantes dans le terminal de votre Raspberry Pi pour supprimer le package fake-hwclock. Il faut également supprimer hwclock de tous les scripts de démarrage car il est maintenant totalement inutile.

sudo apt remove fake-hwclock
sudo systemctl disable fake-hwclock

Une fois que le « fake-hwclock » est désactivé, il faut procéder à la remise en service du script d’horloge matérielle d’origine inclus dans Raspbian en commentant une partie de code dans le fichier « /lib/udev/hwclock-set »

sudo nano /lib/udev/hwclock-set

.Recherchez et commentez les trois lignes suivantes en plaçant un hashtag ( #) devant elles.

if [ -e /run/systemd/system ] ; then
    exit 0
fi

Qui doit devenir

# if [ -e /run/systemd/system ] ; then
#    exit 0
# fi

Une fois la modification effectuée, enregistrez le fichier et quitter l’éditeur ‘CTRL + X‘ puis ‘Y‘ puis ‘ENTER'.

Synchronisation du temps du Pi avec le module horloge en temps réel

Maintenant que notre module RTC est connecté et que Raspbian et le Raspberry Pi sont correctement configurés, il faut synchroniser l’heure avec notre module RTC. En effet l’heure fournie par un nouveau module RTC sera forcement incorrecte.

Vous pouvez lire l’heure directement depuis le module RTC en exécutant la commande suivante.

sudo hwclock -D -r

Avant de synchroniser l’heure de notre Raspberry Pi avec notre module RTC, nous devons exécuter la commande suivante de manière à ce que l’heure sur le Raspberry Pi soit bien exacte.

Si l’heure n’est pas correcte, vérifions qu’on est bien connecté à internet.

date

Normalement vous devriez avoir un date et une heure correcte sur votre Raspberry Pi avant de le synchroniser. Car je ne vois pas bien l’utilité de synchroniser une mauvaise date et une mauvaise heure avec le module RTC.

Pour écrire l’heure du Raspberry Pi dans le module d’horloge en temps réel il faut utiliser la commande:

sudo hwclock -w

En conclusion, pour lire à nouveau l’heure directement à partir du module d’horloge en temps réel.

Vous ne devriez jamais avoir à refaire la commande précédente si vous conservez une batterie en bon état.