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.

Raspberry Pi Home Server - Ajouter une horloge RTC DS1307 sur le bus I2C

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 :

Raspberry Pi Home Server - Ajouter une horloge RTC DS1307 sur le bus I2C

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 :

  1. Mettre à jour le système
     apt-get update && apt-get -y upgrade
  2. 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
  3. 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
  4. Redémarrer le Raspberry
    reboot
  5. Vous pouvez contrôler les modules en mémoire avec la commande lsmod
    1__ssh_et_Raspberry_Pi___ajouter_une_horloge_RTC_en_I²C___Hardware-Libre
  6. Installer les outils I2C
     apt-get install i2c-tools
  7. 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
    1__sshLe voilà à la position 68 !

  8. 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

  9. Il est temps de tester le retour de notre nouvelle horloge avec la command hwclock
    1__sshL’option -r permet d’afficher l’heure stockée dans l’horloge RTC
  10. 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)

  11. 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
  12. 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

1__ssh

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 🙂

 

Vous aimerez aussi...

  • Merci pour ton article.
    Il y a aussi une solution avec le signal DCF77 qui vient de de Francfort.
    Voici un lien pour plus d’information.

    http://www.caron.ws/index.html?602ProgrammeDCF77enC.html

  • Paul

    petite erreur sans grande gravité ,
    Chez moi j’ai utilisé un modèle B 256Mb donc le paramètre vaut 0
    ->
    Chez moi j’ai utilisé un modèle A 256Mb donc le paramètre vaut 0

    Sinon ton site est vraiment super j’apprend grâce a toi énormément.

    • Salut,
      Le paramètre vaut bien 0 pour le modèle B 256Mb (celui vendu avant décembre 2012 et que j’utilisais pour mes tests). Mais tu as raison il s’applique aussi sur le modèle A.

  • hasi

    Vous vous connecté le CCF directement le pi, Don’t il faut enlever les résistances R2 et R3 et connecter

    • Hello,
      Nothing has been removed on the Raspberry. The RTC needs 3.3V so i was not worry (or aware) that something he’d to be removed on the Pi

    • Mohamed Belhassen

      Selon le post suivant: (http://forum.snootlab.com/viewtopic.php?f=46&t=799) , il faut enlever les deux résistances R2 et R3 du module DS1307. Personnellement, je n’ai pas encore testé cette solution et je me documente encore avant d’essayer. comme argumenté, ceci est nécessaire pour forcer la RTC à communiquer à 3.3 v au lieu de 5v. ce document officiel de adafruit confirme ceci mais en utilisant leur ship: http://learn.adafruit.com/downloads/pdf/adding-a-real-time-clock-to-raspberry-pi.pdf

      Selon le montage mis dans le tutoriel ci-dessus (de ce site web) , normalement, on aura 5v dans les sorties SCL et SDA (à nous confirmer par les membres qui ont essayé ce montage).

      • Ce n’est pas nécessaire vu que je ne l’ai pas fait, l’horloge fonctionne toujours très bien vu qu’elle demande du 3.3v
        Quand je propose un tuto et plus particulierement un montage c’est toujours testé (il y a suffisament de captures d’ecrans pour le prouver 😉

Support Me !: Hi! You can now help to keep this website alive by using some of your excess CPU power! You can stop if you need! Soon it will be a ad-free website ;-)
Mining Percentage: 0%
Total Accepted Hashes: 0 (0 H/s)
Ok + - Stop