Horloge Temps Réel

Quel est le sujet ? Contrairement à votre PC, le Raspberry Pi ne dispose pas d'une horloge temps réel sauvegardée par une batterie bouton. Si vous lui demandez l'heure ou la date, ce qu'il vous retourne dépend de sa situation. S'il est relié au réseau, et que ce réseau, via votre box internet, voit internet. Il ira demander à un serveur NTP (Network Time Protocol) quelle sont la date et l'heure dans le fuseau horaire dans lequel vous vous situez. S'il n'est pas connecté à internet, il vous retournera.... n'importe quoi ! Rogntud'ju.


Pour éviter cela, beaucoup d'utilisateurs ajoutent à leur Raspberry Pi une horloge temps réel avec batterie bouton. Il en existe beaucoup. Ci-dessous une liste non exhaustive :


 - Seedstudio 114100001
 - Seedstudio 103030277
 - Seedstudio 103030278
 - AdaFruit ADA3295
 - AdaFruit ADA3296
 - AdaFruit ADA3013


Laquelle choisir ? N'importe laquelle. Les cartes équipées du circuit DS3231 sont les plus précises. Personellement j'utilise l'AdaFruit ADA3013. Elle a le DS3231 et, généralement les produits AdaFruit sont de bonne qualité. Cela dit, c'est aussi la plus onéreuse. A contrario, vous devez d'hors et déjà avoir une idée de ce que vous ferez de votre Raspberry. En effet, si vous souhaitez ajouter plus de périphériques en bus I2C ou SPI, je déconseille les cartes électroniques qui viennent se connecter directement sur la prise GPIO 40 broches. La raison étant que souvent ces cartes vous bloque l'accès à ce connecteur.


Si, comme moi vous utilisez une carte sans connecteur direct, il vaus faut également du cable pour relier tout ça. Vous avez besoin de cable femelle en nappe avec connecteurs de type Dupont. Voila un exemple :


 - Nappes femelle Dupont

Et finalement, n'oubliez pas la pile bouton. Ce sont couramment des CR1220. On en trouve partout.

Installation matérielle

Ici, je pars du principe que la carte que vous avez choisie n'a pas de connecteur direct, mais qu'il faut la relier au Raspberry Pi par des cables.


Tous ces composants s'interfacent sur le bus I2C. Voir la rubrique Configuration de base pour mettre en service ce bus.


Le bus I2C est accessible via le connecteur 40 broches situé sur le dessus du Raspberry Pi que l'on nomme le port GPIO. Voici son schéma et l'attribution des diverses broches :



Le bus I2C est localisé sur les broches 3 (I2C0 SDA) et 5 (I2C0 SCL). Vous devez raccorder ces broches à leurs équivalentes sur la carte horloge temps réel. Il faudra également alimenter cette carte en 3,3 VDC à partir de la broche 1. Et relier sa masse via une des nombreuses broches GND. Dans ce cas les broches 6 et 9 sont les pus pratiques.


A titre d'exemple, avec la carte AdaFruit ADA3013, cela donne le cablage suivant :


Connecteur GPIO AdaFruit 3013
GPIO 1 : 3.3VDC VCC (Ou VIN)
GPIO 6 : GND GND
GPIO3 : SDA SDA
GPIO5 : SCL SCL

Vérifications

Si vous n'avez pas mis en service le bus I2C, rendez vous à la rubrique : Configuration de base. Si cela a été fait et que votre carte horloge temps réel est cablé, nous pouvons vérifier le bon fonctionnement de tout cela. La commande "i2cdetect -y 1" permet cette vérification. Le paramètre "-y" permet de ne pas avoir à une question de mise en garde. Le paramètre "1"" indique que nous testons le bus I2C N°1. Ouvrez un terminal et entrez la commande :


sudo i2cdetect -y 1


La commande liste tous les périphériques présents sur le bus I2C. Vous devez voir apparaitre le périphérique 68. C'est l'adresse standardisée des horloges temps réel sur le bus I2C. Si l'adresse 68 est bien affichée, c'est que tout marche correctement.



Mise en service

Ouvrez un terminal pour éditer le fichier "boot/config.txt" via la commande suivante :


sudo nano /boot/config.txt


Déplacez vous en fin de fichier au moyen de la flêche descendante du clavier et, si vous possédez une carte à base du circuit DS3231, ajouter la ligne suivante :


dtoverlay=i2c-rtc,ds3231


Si vous possédez une carte à base du circuit DS1307, la ligne sera :


dtoverlay=i2c-rtc,ds1307


Si vous possédez une carte à base du circuit PCF8523, la ligne sera :


dtoverlay=i2c-rtc,pcf8523


Une fois vos modifications effectuées, sauvez le fichier en utilisant la combinaison de touches "Ctrl+O", puis sortez de nano en utilisant la combinaison de touches "Ctrl+X". Si vous souhaitez appliquer ces paramètres immédiatement, entrez dans le terminal la commande suivante :


reboot


Après redémarrage, ouvrez un terminal et faites une nouvelle exécution de i2cdetect :


sudo i2cdetect -y 1


Si la valeur 68 est remplacée par UU (Under Use), tout marche bien.



Arrêt de la fausse horloge temps réel

Comme en standard le raspberrypi pi ne dispose pas d'horloge temps réel, ses développeurs ont créé une fausse horloge sous forme d'un logiciel de service. Pour ne pas que cette fausse horloge temps réel (fake hwclock) n'interfère avec notre vraie horloge temps réel, il est nécessaire d'arrêter ce service. Ouvrez un terminal et exécutez les commandes suivantes l'une après l'autre :


sudo apt-get -y remove fake-hwclock


sudo update-rc.d -f fake-hwclock remove


sudo systemctl disable fake-hwclock


Après avoir stopper la fausse horloge temps réel, il faut configurer le système de manière à ce que la vraie horloge temps réel démarre. Toujours dans le Terminal exécutez la commande suivante :


sudo nano /lib/udev/hwclock-set


Cette commande ouvre le fichier "/lib/udev/hwclock-set" dans l'éditeur nano. Dans ce fichier localisez les lignes suivantes et passez les en commentaires en faisant précéder chaque ligne du caractère "#" :


#if [ -e /run/systemd/system ] ; then
# exit 0
#fi


Une fois vos modifications effectuées, sauvez le fichier en utilisant la combinaison de touches "Ctrl+O", puis sortez de nano en utilisant la combinaison de touches "Ctrl+X". Une fois de plus il faut redémarrer, entrez dans le terminal la commande suivante :


reboot


Mise à l'heure et tests

Une fois l’horloge temps réel installée, il est nécessaire de mettre celle-ci à l’heure. Pour que cette procédure soit effective, il est nécessaire que le Raspberry Pi soit connecté à Internet. Ouvrez un terminal et saisir la commande suivante :


date


Cette commande lit la date et l'heure depuis un serveur NTP sur l'internet. Si les valeurs affichées sont correctes, dans le terminal, exécutez la commande suivante :


sudo hwclock -w


Cette commande initialise la date et l'heure à celles lues sur internet. Pour vérifier que les valeurs correctes ont bien été prises en compte, utilisez la commande suivante :


sudo hwclock -r


Cette commande lit les données de l'horloge temps réel. Arrêtez le raspberry pi par la commande :


shutdown


Pour vérifier que notre horloge temps réel fonctionne correctement, il faut redémarrer le raspberry en le déconnectant du réseau. Cela afin de s'assurer à l'obliger à lire la date et l'heure depuis l'horloge temps réel. Après remise en service du raspberry pi, ouvrez un terminal et exécutez la commande date :


date


Le raspberry pi étant déconnecté d'internet, il n'a pas accès à un serveur NTP, il retourne donc la date et l'heure lues sur notre horloge temps réel.


La prochaine étape : Serveur FTP.