Horloge Temps Réel (RTC)

La Raspberry Pi est un mini-ordinateur très pratique mais il ne possède pas de “temps”. Pour économiser ils n'ont pas installé d'horloge. Si, pour une installation artistique par exemple, on veut allumer ou éteindre notre programme il faut bien savoir à quelle heure .. C'est pourquoi on peut ajouter un petit module qui va enregistrer le temps et le garder en mémoire le temps de décharger la pile (~ 9 ans!). Ce type de module peut aussi être utilisé avec une Arduino.

Sur cette page un comparatif des modules : Offrez une horloge temps réel (RTC) à votre Raspberry Pi

Avec une Raspberry

Installations

D'abord il faut mettre sa Raspberry à jour en la branchant à Internet pour installer les paquets nécessaires. Ouvrez un terminal.

sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade

Installer ces paquets pour gérer l'I2C (tous ne sont peut-être pas utiles, à vérifier)

sudo apt-get install python-smbus python3-smbus python-dev python3-dev i2c-tools

Ce type de module d'horloge communique en I2C, il faut donc configurer ce moyen de communication sur la Raspberry

sudo raspi-config

Sélectionnez “8 Advanced Options” et “A7 I2C - Enable/Disable automatic loading”. Répondez “Yes” à toutes les questions, sortez et redémarrez la Raspberry.

Activer les protocoles I2C et le SPI sur la Raspbian Wheezy en éditant le fichier “/etc/modprobe.d/raspi-blacklist.conf”. Si le fichier n'existe pas, alors vous pouvez sauter cette étape :

sudo nano /etc/modprobe.d/raspi-blacklist.conf

Commenter ces lignes en ajoutant un “#”

#blacklist spi-bcm2708
#blacklist i2c-bcm2708

Save your changes and exit the nano editor.

Pour les versions récentes de Raspberry (3.18 kernel ou plus) vous devez éditer le fichier “/boot/config.txt”. Pour connaître le numéro du kernel, tapez “uname -a” dans un terminal.

sudo nano /boot/config.txt

Ajoutez ces lignes à la fin du fichier et sauvez le fichier Ctl-x, Ctl-o :

dtparam=i2c1=on
dtparam=i2c_arm=on

Démarrer la communication I2C automatiquement en éditant le fichier “/etc/modules” :

sudo nano /etc/modules

Ajoutez ces lignes à la fin et sauver.

i2c-bcm2708 
i2c-dev

Pour éviter d'utiliser i2c-tools en tant qu'administrateur root, vous pouvez ajouter “pi” au groupe I2C :

sudo adduser pi i2c

Redémarrez

sudo reboot

Quand la Raspberry va redémarrer, elle supportera dorénavant l'I2C et SMBus Python.

Branchement

Pour le moment rien de bien compliqué, on pourrait même difficilement faire plus simple, c’est un avantage du bus I²C qui communique sur 2 fils (hors alimentation):

  • connectez VCC à une broche +5v du Pi
  • connectez GND à une broche GND du Pi
  • connectez SDA à la broche SDA0 du Pi
  • connectez SCL à la broche SCL0 du Pi

Si vous n’avez pas de pile bouton de 3V sous la main (ce qui est mon cas lors de ce tuto), connectez également 2 piles de 1.5V entre les bornes BAT et GND du module RTC. Sinon, installez la pile bouton dans son logement.

Test de l’interface I²C

On va utiliser la commande i2cdetect, qui permet de voir la liste des périphériques I²C reliés au Pi. La commande est différente si vous utiliser un Raspberry Pi Rev 1 ou Rev 2 (l’adresse du bus I²C est différente), donc choisissez la bonne :

sudo i2cdetect -y 0 (pour la Rev 1)
sudo i2cdetect -y 1 (pour la Rev 2) i2cdetect

Si comme sur cette capture, vous voyez votre RTC avec l’ID #68 (il est probable qu’à la place de ‘UU’, soit indiqué ’68’, c’est parfaitement normal), tout est correctement cablé et configuré. Dans le cas contraire, il faudra reprendre depuis le début et vérifier chaque étape.

Installation et configuration du module RTC

Maintenant que notre RTC est correctement câblée et que notre système est prêt à utiliser le bus I²C, nous pouvons passer à la configuration du module. Commençons par lancer le module logiciel RTC :

sudo modprobe rtc-ds1307

On va maintenant activer le module DS1307 dans le module logiciel I²C. Encore une fois, la commande dépend de la version de Raspberry Pi. Ouvrons un bash en tant que root :

sudo bash 
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-0/new_device (pour la Rev 1)
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device  (pour la Rev 2)
exit

Nous allons vérifier l’heure de la RTC. En effet, si c’est la première fois que le circuit est utilisé (ou si la pile vient d’être changée), il devrait indiquer le 1er Janvier 2000, et il faudra le mettre à l’heure.

sudo hwclock -r

Donnez le bon temps et écrire dans le module

date -s "20 OCT 2016 19:20:20"
sudo hwclock -w (pour écrire)
sudo hwclock -r (pour lire)

Démarrage automatique

Nous allons maintenant rajouter le module logiciel RTC au fichier /etc/modules, afin qu’il soit chargé au démarrage de la machine.

sudo nano /etc/modules 

Ajouter à la fin du fichier la ligne :

rtc-ds1307

Il faut maintenant créer le périphérique DS1307 au démarrage en modifiant le fichier /etc/rc.local :

sudo nano /etc/rc.local

Ajouter, avant la ligne « exit 0 » : pour la Rev 1 :

echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-0/new_device
sudo hwclock -s

pour la Rev 2 :

echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
sudo hwclock -s

Vous pouvez également y rajouter un hwclock -r pour vérifier visuellement l’heure du module RTC au démarrage… C’est terminé, désormais votre Raspberry Pi sera constamment à l’heure, qu’il soit connecté à internet ou pas !