Horloge pour le Raspberry PI

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):

IMG_0276_low IMG_0280_low

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.

IMG_0278_low IMG_0288_low IMG_0293_low

Ç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 !

IMG_0298_low

Pour mémoire le code couleur:

GND (noir)
5V (rouge)
3.3V (orange)
SDA (bleu)
SCL (vert)