Pendant que votre Pi est connecté à un réseau, il pourra régler son horloge correctement à l’aide de NTP. Sans connexion réseau, l’heure et la date du système seront presque certainement erronées. Pour certains projets, cela pose un problème, en particulier si vous enregistrez des horodatages ou effectuez d’autres opérations sensibles au facteur temps.
Cela peut être résolu à l’aide d’un module d’horloge temps réel (RTC). Cela utilisera une petite pile bouton pour garder l’heure du Pi même s’il est éteint. Lorsque le Pi redémarre, il peut régler sa propre horloge interne en utilisant l’heure retenue par le RTC.
Le moyen le plus simple de mettre en œuvre un RTC est d’acheter un module préfabriqué. Heureusement, les modules RTC sont relativement bon marché et faciles à obtenir. Certains modules attacheront directement l’en-tête GPIO du Pi, mais ceux-ci peuvent gêner d’autres appareils, je préfère donc des modules plus génériques qui gardent le GPIO clair à d’autres fins.
DS1307 ou DS3231 ?
Les modules basés sur les puces DS1307 et DS3231 sont des appareils populaires et vous les verrez en vente chez divers détaillants. J’ai acheté les deux types et j’ai rapidement réalisé que mes modules DS1307 étaient inutiles. Mon conseil serait d’opter pour un module basé sur DS3231. Ils sont plus précis et fonctionnent avec bonheur à partir de 3,3V. Mes deux modules DS1307 « Tiny RTC » sont allés directement à la poubelle.
Retrait de la résistance
La plupart des modules I2C génériques ont des résistances de rappel sur les broches SDA et SCL, mais celles-ci ne sont pas nécessaires car le Pi a ses propres rappels. Je ne voulais pas que ces résistances embarquées interfèrent avec le fonctionnement du bus I2C, je les ai donc supprimées.
Le module dispose également d’un circuit de charge de base à utiliser avec une pile bouton rechargeable LIR2032. Je voulais utiliser une cellule normale non rechargeable, j’ai donc retiré une autre résistance pour désactiver ce circuit de charge. Les résistances ont été retirées du module à l’aide d’un fer à souder et de quelques pincettes ou petites pinces. L’emplacement des résistances est indiqué sur la photo ci-dessous :

Les résistances pull-up sont le bloc marqué en rouge sur la gauche. Le circuit de charge est le bloc marqué en rouge à droite.
Configuration I2C
Comme pour tous les appareils I2C, vous devez configurer l’interface I2C. C’est assez facile à faire et expliqué dans mon tutoriel Activation de l’interface I2C sur le Raspberry Pi.
Configuration du module DS3231
Afin de vous assurer d’avoir les dernières mises à jour, vous devez exécuter les commandes suivantes :
sudo apt-get update sudo apt-get -y upgrade
Maintenant, nous devons modifier un fichier système en utilisant :
sudo nano /etc/modules
Si ce n’est pas déjà le cas, ajoutez « rtc-ds1307 » en bas pour qu’il ressemble à quelque chose comme :
snd-bcm2835 i2c-bcm2835 i2c-dev rtc-ds1307
Vous pouvez enregistrer et quitter en utilisant CTRL-X, Y et ENTER.
Arrêtez le Pi à l’aide de « sudo halt » et coupez l’alimentation une fois le processus terminé.
configuration materielle
Avec le Raspberry Pi éteint, vous pouvez maintenant connecter le module. C’est une configuration assez simple mais elle doit être correcte, alors vérifiez-la. Reportez-vous à mon diagramme GPIO pour vous assurer d’obtenir les bonnes broches sur l’en-tête du Pi.
| DS1307 | Pi GPIO |
|---|---|
| GND | P1-06 |
| Vcc | P1-01 (3.3V) |
| ADD | P1-03 (I2C SDA) |
| SCL | P1-05 (I2C SCL) |
N’oubliez pas la batterie 3V !

Test d’interface
Allumez le Pi et exécutez la commande suivante :
sudo i2cdetect -y 1
Noter : Si vous utilisez un Rev 1, vous devrez utiliser « sudo i2cdetect -y 0 ».
Vous devriez voir quelque chose de similaire à ceci :

Dans cet exemple, « 68 » est l’adresse hexadécimale du module RTC sur l’interface I2C.
Configuration du périphérique I2C
Pour nous assurer que l’appareil DS1307 est configuré et que l’heure est synchronisée lorsque le Pi démarre, nous devons éditer un autre fichier système :
sudo nano /etc/rc.local
Ajoutez les deux lignes suivantes avant la ligne exit 0 :
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device hwclock -s
donc ça ressemble à quelque chose comme :

Noter : Si vous utilisez un Rev 1, vous devrez utiliser « /i2c-0/ » au lieu de « /i2c-1/ ».
Vous pouvez enregistrer et quitter en utilisant CTRL-X, Y et ENTER.
Redémarrez maintenant le Pi en utilisant :
sudo reboot
Maintenant, lorsque vous répétez la commande i2cdetect (voir ci-dessus), le 68 se transformera en UU :

Fuseaux horaires et heure d’été
Par défaut, le Pi a tendance à afficher l’heure au format GMT ou UTC. Pour moi, assis à Bristol, cela se traduit par un retard d’une heure par rapport à mon heure locale. Pour indiquer à votre Pi dans quelle région vous vous trouvez, vous pouvez utiliser :
sudo raspi-config
puis sélectionnez « Options d’internationalisation » suivi de « Changer de fuseau horaire ». Vous pouvez ensuite sélectionner votre emplacement à partir des écrans suivants.
J’ai défini mon emplacement sur « Europe/Londres » et cela se traduit par « date » indiquant l’heure en BST (heure d’été britannique) plutôt qu’en UTC. L’heure est alors correctement ajustée de +1 heure.
Lire la date et l’heure
Vous pouvez lire l’heure système du Pi en utilisant :
date
Si vous devez régler l’heure du système pour une raison quelconque, vous pouvez utiliser la commande suivante :
sudo date -s "29 AUG 1997 13:00:00"
Une fois correct, vous pouvez écrire la date et l’heure du système dans le module RTC en utilisant :
sudo hwclock -w
Vous devriez pouvoir lire la date et l’heure du RTC en utilisant :
sudo hwclock -r
En séparant les commandes par un point-virgule, vous pouvez relire l’heure système et l’heure RTC en même temps. J’espère qu’ils devraient correspondre et ressembler à ceci :

Le « hwclock -s » que nous avons ajouté à « rc.local » définit l’heure du système à partir du module RTC.
L’épreuve finale
Le test final consiste à déterminer si le module RTC conserve l’heure et que le Pi utilisera cette heure au démarrage. La meilleure façon de le faire est de :
- Éteignez le Pi
- Retirez le câble d’alimentation
- Supprimer la connexion réseau
- Attachez le Pi à un moniteur et un clavier
- Laissez-le toute la nuit
- Allumez-le et utilisez « date » pour voir l’heure que le Pi pense qu’il est
Espérons que votre Pi affiche maintenant la date et l’heure correctes et les conservera lorsque le Pi sera éteint.
-
AZDelivery 3X Real Time Clock RTC I2C Compatible avec DS3231, Horloge en Temps Réel avec Batterie RTC DS3231 I2C, Module d’Horloge Haute Précision Compatible avec Arduino et Raspberry Pi
-
3X Real Time Clock, Modules d'Horloge Temps Réel Haute Précision, Compatibles avec Montre en Temps Réel I2C RTC DS3231, Module Precision Real Time Clock Module Compatible avec Arduino et Raspberry Pi
