Le gros problème que j’ai découvert avec le Raspberry Pi, c’est qu’il n’a pas d’horloge. Lorsqu’on le démarre, il commence au 1er Janvier 1970; et il a besoin de se connecter à Internet pour aller chercher l’heure. Ce n’est pas bien pratique pour les usages que j’avais en tête.
On trouve des petits horloges toutes faite pour quelques euros comme la Tiny RTC; elle est faite pour les Arduino mais peut tout à fait fonctionner sur un Raspberry Pi moyennant une légère adaptation. Le Raspberry Pi est en 3.3V et ne supporte pas de recevoir 5V. Sur le bus I²C, pas de soucis, les deux fils SDA et SCL sont censé être en collecteurs ouverts, il faut juste placer une résistance de rappel quelque part sur le bus. Le Raspberry Pi possède ces résistances qui tirent les lignes vers le 3,3V. Le problème est que le Tiny RTC possède aussi des résistances de rappel vers le 5V, ce qui risque d’endommager le Raspberry Pi; il n’y a qu’a les supprimer: Tiny_RTC_schematic
Voila le Tiny RTC avant et après (Suppression de R2 et de R3):
Ensuite on fait un petit montage qui permet de laisser le module horloge dans le boîtier connecté au bus, et de faire sortir le bus I²C via quelques fils pour pouvoir y brancher d’autres choses.
Ça donne cela (bus 0 pour la révision A, la révision B expose le bus 1):
root@raspberrypi:~# i2cdetect -y 0 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 4f 50: 50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --
On trouve a l’adresse 68 le DS1307 intégré dans le TinyRTC, en 50 c’est l’EEPROM de 4 Ko AT24C32 que je n’ai pas particulièrement prévu d’utiliser, le Raspberry Pi étant bien pourvu de ce coté. En 4f, c’est une sonde de température, un DS1621 (thermomètre).
On déclare l’horloge via /sys (dans /etc/rc.local) et on peut alors la régler:
root@raspberrypi:~# date Sat Feb 1 14:12:26 CET 2014 root@raspberrypi:~# hwclock -r Wed Nov 12 11:22:16 2031 -0.656396 seconds root@raspberrypi:~# hwclock --systohc --utc root@raspberrypi:~# hwclock -r Sat Feb 1 14:15:07 2014 -0.724980 seconds
Et voila !
Pour mémoire le code couleur:
GND (noir) 5V (rouge) 3.3V (orange) SDA (bleu) SCL (vert)