Le Raspberry Pi n’enregistre pas la date de façon permanente. Avec l’aide du module Raspberry Pi RTC (Real Time Clock) DS1307, vous disposez d’une horloge en temps réel – indépendamment d’une connexion Internet existante. C’est un avantage dans de nombreuses applications qui nécessitent un horodatage mais ne peuvent pas être connectées à l’Internet. En particulier pour les Pi d’extérieur et les systèmes de journalisation, il est important de connaître la date et l’heure exactes.
Ce tutoriel porte sur l’installation d’une horloge en temps réel (RTC) et la synchronisation de l’heure du système Linux/Raspbian.
Pièces de matériel requises
Vous aurez besoin des pièces de quincaillerie suivantes :
- Petit module I2C RTC DS1307
- kit de soudure (important, voir l’explication)
- Câble de connexion femelle-femelle
Alternativement, le module RTC DS3231 devrait également fonctionner, mais je ne l’ai pas (encore) testé avec.
Préparation
Les modules Tiny RTC sont en fait conçus pour l’Arduino, dont les broches IO fonctionnent à 5V. Comme les GPIOs du Raspberry Pi ne fonctionnent qu’à 3.3V et qu’une tension plus élevée peut les endommager, nous devons enlever deux résistances de la carte.
A l’arrière se trouvent les deux résistances (R2 et R3) que l’on retire. Pour ce faire, on chauffe les fixations avec la pointe à souder. En outre, on peut souder des bandes de broches, qui sont généralement incluses. Nous n’avons besoin que du côté avec 7 broches (à droite) :
Alternativement, un convertisseur de niveau logique (comme ici) pourrait être interposé.
Connexion du module RTC I2C de Raspberry Pi
Le module est connecté via l’interface I²C. Pour cela, nous utilisons le côté droit des broches (qui en compte 7), car en mode hors ligne du Raspberry, le courant doit être tiré de la batterie pour que l’horloge ne s’arrête pas. D’autres modules peuvent n’avoir qu’une bande de broches. L’affectation est la suivante :
RTC Module | Raspberry Pi |
---|---|
SCL | GPIO 3 / SCL (Pin 5) |
SDA | GPIO 2 / SDA (Pin 3) |
VCC / 5V | 5V (Pin 2) |
GND | GND (Pin 6) |
Les modules RTC diffèrent légèrement de la structure, l’image suivante ne doit donc être prise qu’à titre indicatif. Il est important que les broches connectées soient correctes :
Logiciel RTC pour Raspberry Pi
Avant de pouvoir réellement commencer, il faut s’assurer que tous les paquets et sources de paquets sont à jour, nous les mettons donc d’abord à jour, puis nous installons le logiciel I2C :
sudo apt-get update && sudo apt-get upgrade --yes sudo apt-get install i2c-tools
Ensuite, le bus I2C doit être activé, si ce n’est pas encore fait :
sudo raspi-config
Activez tout sous « Options avancées »> « I2C » (confirmez simplement par Oui). Un redémarrage peut être nécessaire.
Maintenant nous éditons le fichier des modules
sudo nano /etc/modules
et ajouter les entrées manquantes à la fin :
i2c-bcm2708 i2c-dev rtc-ds1307
Vous sauvegardez et quittez avec CTRL + O, CTRL + X.
Pour activer les modules, il faut les charger :
sudo modprobe i2c_bcm2708 sudo modprobe i2c_dev sudo modprobe rtc-ds1307
Nous pouvons maintenant voir si le module RTC a été reconnu par I2C (le paramètre -y 1
indique qu’il s’agit de la révision 2. Seulement que le premier Raspberry Pi correspond à la Révision 1) :
i2cdetect -y 1
Vous devriez voir le résultat suivant :
pi@raspberrypi:~ $ i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: 50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --
Le module est donc reconnu et peut être interrogé à l’aide de la fonction i2cget -y 1 0x68
. Comme un code hexadécimal est difficile à lire, nous entrons le module comme un nouveau périphérique I2C :
sudo bash echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device exit
Ensuite, nous pouvons simplement lire l’heure en utilisant sudo hwclock -r
. Vous pouvez obtenir l’heure locale du système avec date
.
Pour moi, l’horloge en temps réel n’était pas réglée correctement (1er janvier 2000), c’est pourquoi j’ai dû la régler d’abord. Puisque l’heure du système local est correcte (accès automatique via un serveur NTP), je l’ai synchronisée comme suit (à propos, toutes les commandes peuvent être trouvées dans la documentation de hwclock) :
sudo hwclock --set --date="$(date "+%m/%d/%y %H:%M:%S")"
Si vous voulez changer l’heure du système (et le fuseau horaire !), vous devez le faire en utilisant sudo raspi-config
, avant de synchroniser les heures.
Afin de régler l’heure du système automatiquement à chaque redémarrage, nous devons écrire une commande set dans l’autostart. Pour ce faire, nous éditons le fichier :
sudo nano /etc/rc.local
Les deux lignes suivantes sont ajoutées avant exit 0
:
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device hwclock --hctosys
Après un redémarrage, l’heure correcte devrait maintenant être lue et réglée à partir du module RTC du Raspberry Pi – sans connexion Internet.