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

Ajout d'une horloge temps réel DS3231 au Raspberry Pi

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 ?

Module RTC DS1307Les 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 :

Module RTC DS3231

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 !

Module RTC DS3231

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 :

Configuration du module RTC DS3231

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 :

Configuration du module RTC DS1307

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 :

Configuration du module RTC DS3231

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 :

Configuration du module RTC DS3231

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 DS3231 Real Time Clock RTC I2C, Horloge en Temps Réel avec Batterie RTC DS3231 I2C, Module d’Horloge Haute Précision compatible avec Arduino et Raspberry Pi incluant un E-Book!
    ✅ Le cristal d'horloge DS3231 de haute précision, utilisé dans l'AZDelivery DS3231 RTC, réduit l'écart à quelques minutes par an! ✅ Grâce à la batterie intégrée, l'heure est stockée même en cas de panne de courant. De plus, cela permet la mise en œuvre de la date en tenant compte des années bissextiles jusqu'à 2100. ✅ Câblage simple via seulement quatre broches grâce à l'interface I2C. ✅ Intégration facile dans les projets grâce à des bibliothèques open source prêtes à l'emploi. Nos horloges en temps réel sont compatibles avec tous les modèles actuels de Raspberry Pi. ✅ Ce produit inclut un E-Book qui fournit des informations utiles sur la façon de commencer votre projet. Il permet une installation rapide et fait gagner du temps sur le processus de configuration. On y trouve une série d'exemples d'applications, des guides d'installation complets et des bibliothèques.
  • WINGONEER Minuscule DS3231 AT24C32 I2C Module de précision Horloge en Temps réel Module pour Arduino
    DS3231 est un faible coût, extrêmement précis I2C horloge temps réel (RTC), avec un oscillateur à quartz intégré à compensation de température (TCXO) et le cristal. Le dispositif comprend une entrée de la batterie, débranchez l'alimentation principale et maintient un chronométrage précis. Oscillateur intégré pour améliorer la précision à long terme du dispositif et réduit le nombre de composants de la chaîne de production. Le DS3231 est disponible dans les gammes de températures commerciales et industrielles, en utilisant un 300mil 16 broches SO package. RTC maintient secondes, minutes, heures, jours, la date, le mois, et l'information de l'année. Note: Ceci est produit Arduino pas original. elle seulement substituer les accessoires de WINGONEER