====== Horloge Temps Réel (RTC) ====== {{:materiel:rtc:rtc-rpi.jpg?600|}} La [[materiel:rpi:accueil|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 : [[http://www.framboise314.fr/avant-lheure-cest-pas-lheure-apres-lheure-offrez-une-horloge-temps-reel-rtc-a-votre-raspberry-pi/|Offrez une horloge temps réel (RTC) à votre Raspberry Pi]] ===== Avec une Raspberry ===== Sources de documentation : * [[http://hardware-libre.fr/2013/08/raspberry-pi-ajouter-une-horloge-rtc-en-i%C2%B2c/|]] * [[https://learn.adafruit.com/adafruits-raspberry-pi-lesson-4-gpio-setup/configuring-i2c|RPI - Configuring I2C]] * [[https://www.abelectronics.co.uk/kb/article/1/i2c--smbus-and-raspbian-linux|I2C, SMBus and Raspbian Linux]] ==== 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. {{:materiel:rtc:rpi-rtc-config-1.jpg?800|}} {{:materiel:rtc:rpi-rtc-config-2.jpg?800|}} 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 {{:materiel:rtc:rpi-rtc-config-confi.png?|}} 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 {{:materiel:rtc:rpi-rtc-config-module.png?|}} 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. {{:materiel:rtc:i2cdetect.png|}} ==== 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 !