Ajouter au Raspberry Pi une horloge RTC DS1307 sur le bus I2C
Pour ceux qui souhaitent utiliser leur Raspberry Pi dans un projet mobile ou bien qui ne peuvent pas le connecter à Internet, cet article va vous permettre de conserver la date et l’heure du système à jour après chaque redémarrage.
Pour des raisons qui semblent avant tout économiques, il a été décidé au moment de la conception du Raspberry Pi, de ne pas lui intégrer d’horloge temps réel (RTC donc). C’est ce composant qui permet lorsque vous éteignez votre ordinateur de lui redonner l’heure exacte au prochain redémarrage. Vous savez la pile plate qui se trouve sur votre carte mère d’ordinateur ? C’est elle !
Comme je travaille sur un projet mobile, j’ai donc eu ce problème. Pas de processus NTPd pour me remettre le système à jour via Internet. Donc comment faire ?
Il faut commencer par acheter le petit composant qui va se brancher sur le Raspberry. Je l’ai acheté ici pour la somme de 2.30$ frais de port compris (ici un peu plus chère mais livraison plus rapide). Voici ce que j’ai reçu :
Il existe peut être des composants de meilleure qualité et/ou adaptés au connecteur du Raspberry Pi (voir cet article qui contient un excellent comparatif) mais celui-ci me paraissait un très bon compromis. D’abord le prix peu élevé, ensuite l’utilisation du bus I2C donc pas besoin de 50 GPIO (oui j’exagère un peu) et enfin la taille vraiment minuscule.
Une fois assemblée, il faut connecter notre RTC au Raspberry. Pour ça rien de plus simple ! On commence par relier la broche VCC à la sortie 5V du Raspberry, la broche GND à la broche 6, la broche SDA à la broche 3 du pi et enfin la broche SCL à la broche 5.
Voilà le résultat :
- Mettre à jour le système
apt-get update && apt-get -y upgrade
- Activer l’interface I2C en modifiant le fichier /etc/modules. Il faut ajouter les lignes suivantes à la fin du fichier :
i2c-bcm2708 i2c-dev rtc_ds1307
- Enlever le module I2C de la blacklist. Dans le fichier /etc/modprobe.d/raspi-blacklist.conf mettez en commentaire la ligne
blacklist i2c-bcm2708
Il faut ajouter un # en début de ligne
#blacklist i2c-bcm2708
- Redémarrer le Raspberry
reboot
- Vous pouvez contrôler les modules en mémoire avec la commande lsmod
- Installer les outils I2C
apt-get install i2c-tools
- Vous pouvez maintenant vérifier que votre horloge est détectée avec la commande
i2cdetect -y X
où X vaut :
- 0 pour les modèles A et B 256Mb
- 1 pour les modèles B 512Mb
Chez moi j’ai utilisé un modèle B 256Mb donc le paramètre vaut 0
Le voilà à la position 68 !
- L’étape suivante consiste à définir le type de périphérique installé en 0x68.
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-0/new_device
Pensez à remplacer i2c-0 par i2c-1 si vous utilisez un modèle B
- Il est temps de tester le retour de notre nouvelle horloge avec la command hwclock
L’option -r permet d’afficher l’heure stockée dans l’horloge RTC
- Pour maintenant mettre à l’heure l’horloge, il faut mettre à l’heure votre Raspberry puis envoyer l’heure vers l’horloge. Pour ça, soit vous utilisez la commande
date mmjjhhmmaaaa
soit vous branchez une première fois l’ordinateur à internet et vous synchronisez l’heure grâce au service NTP (ça se fait automatiquement)
- Une fois l’heure système réglée, vous envoyez l’heure système vers l’horloge RTC
hwclock -w
La commande ne retourne aucune information. Vous pouvez vérifier le résultat avec la commande de lecture
hwclock -r
- Maintenant si vous voulez définir l’heure système à partir de l’horloge RTC
hwclock -s
Pour faire la synchronisation automatiquement au démarrage du Raspberry, vous devez modifier le fichier /etc/rc.local en y ajoutant les lignes suivantes avant le exit 0 de la fin
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-0/new_device
sudo hwclock -s
Ou les lignes suivantes pour la révision 2
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
sudo hwclock -s
Voici ce que ça donne en édition pour la révision 1 du Raspberry Pi
Vous avez maintenant une horloge pas chère pour conserver l’heure de votre système si vous n’avez pas d’accès Internet !
Personnellement j’en ai besoin pour un projet mobile. C’était mon dernier élément pour finaliser le projet, que je vais bientôt partager avec vous 🙂