Utilisation du bus i2c sur un Raspberry Pi
Autorisez le bus i2c au boot : Ajoutez la ligne suivante au fichier /boot/config.txt :
device_tree_param=i2c_arm=on
Installez les packages nécessaires :
# pacman -S i2c-tools
# modprobe i2c-dev
Chargement du module i2c-dev au démarrage : Créez le fichier /etc/modules-load.d/i2c.conf en ajoutant la ligne suivante :
i2c-dev
Créez un groupe i2c et ajoutez l'utilisateur (franck ici) à ce groupe :
# groupadd i2c
# gpasswd -a franck i2c
Modification des droits des devices i2c : Créez le fichier /etc/udev/rules.d/i2c.rules :
KERNEL=="i2c-[0-9]*", GROUP="i2c"
Rebootez :
# shutdown -r now
Enfin, vous pouvez utiliser les outils i2c pour accéder aux devices en tant que simple user :
[franck@jannequin ~]$ i2cdetect -y 0
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
[franck@jannequin ~]$ i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- UU -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
Vous constatez la présence d'un chip i2c à l'adresse 0x68 (si l'horloge sauvegardée est bien connectée au bus i2c).
Accéder au bus i2c en Python
Le package i2c-tools contient un module Python pour accéder au poirt i2c.
Voir cet article pour voir des exemples.
Mise en oeuvre d'une horloge sauvegardée
Le module en ma possession est à base d'un composant ds3231 qui est compatible avec le ds1307.
Pour indiquer au kernel la disponibilité d'une horloge sauvegardée : Ajoutez la ligne suivante au fichier /boot/config.txt :
dtoverlay=i2c-rtc,ds3231
Chargement du module au démarrage : Ajoutez la ligne suivante au fichier /etc/modules-load.d/i2c.conf :
rtc-ds1307
Rebootez.
Le device /dev/rtc (lien symbolique sur /dev/rtc0) est créé :
# ls -l /dev/rtc*
lrwxrwxrwx 1 root root 4 Jul 23 22:50 /dev/rtc -> rtc0
crw------- 1 root root 254, 0 Jul 23 22:50 /dev/rtc0
Pour un démarrage automatique avec systemd, créez un fichier /usr/lib/systemd/scripts/rtc :
#!/bin/bash
hwclock -s
et le rendre exécutable :
# chmod +x /usr/lib/systemd/scripts/rtc
Créez le fichier de configuration pour systemd /etc/systemd/system/rtc.service :
[Unit]
Description=RTC clock
Before=netctl-auto@wlan0.service
[Type]
Type=oneshot
[Service]
ExecStart=/usr/lib/systemd/scripts/rtc
[Install]
WantedBy=multi-user.target
et testez le :
# systemctl start rtc
en l'absence d'erreur, on l'autorise au démarrage :
# systemctl enable rtc
Lecture directe du matériel :
# hwclock -r
Sat Jul 26 00:56:49 2014 -0.222152 seconds