Activer le bus i2c du Raspberry Pi ou du Pi Zero W (toutes générations) • Domotique et objets connectés à faire soi-même

Le bus de données i2c permet d’échanger des données numériques entre un capteur (ou un actionneur) et un mini-PC tel que le Raspberry Pi. Le bus i2c est très répandu également sur les micro-contrôleurs (Arduino, ESP8266, ESP32).

Tutoriel actualisé le 1er mai 2020

Par défaut (sécurité), le bus i2c n’est pas activé sur la distribution Raspbian. On peut l’activer directement depuis les préférences du système ou depuis le Terminal à l’aide de l’utilitaire de configuration raspi-config.

Activer le bus i2c depuis le menu préférences de Raspbian

Si vous avez choisi d’installer Raspbian Buster avec une interface graphique, ouvrez le menu Préférences puis lancez Pi Configuration.

On active le bus I2C en cliquant sur Enable. Cliquez sur OK pour enregistrer la modification. Redémarrez Raspbian pour activer le bus I2C.

Activer le bus i2c avec l’outil raspi-config

Pour des projets qui ne nécessitent pas d’interface graphique (projets robotique à base de Raspberry Pi Zero par exemple), le bus I2C est géré à l’aide de l’utilitaire raspi-config sur Raspbian.

Connectez-vous en SSH (lire ce tutoriel pour apprendre comment faire) ou ouvrez un Terminal puis lancez l’outil de configuration de Raspbian.

sudo raspi-config

Choisissez l’option (5) Interfacing Options

Puis dans la liste l’option (P5) I2C. Activez en choisissant YES. No pour désactiver.

7ghr4j1fabuuowxk29e1-4263065

Il est nécessaire de redémarrer le Raspberry Pi pour prendre en compte la modification.

sudo reboot

Installer les outils i2c

Tout d’abord, faites une mise à jour du système.

sudo apt update 
sudo apt upgrade -y

Une fois le système mis à jour, lancez l’installation les outils permettant de communiquer avec les périphériques i2c en Python (python-smbus) et les outils de diagnostic (i2c-tools).

sudo apt-get install -y python-smbus i2c-tools

L’installation terminée, on peut déjà tester si les modules sont bien chargés

pi@raspberrypi:~ $ lsmod | grep i2c_
i2c_bcm2835             6433  0 
i2c_dev                 6642  0

Vous devez le module i2c_bcm2708 (ou i2c_bcm2835 sur le Raspberry Pi Zero W), c’est que les modules ont été correctement chargés.

Broches i2c sur le GPIO du Raspberry

Les broches i2c se trouvent sur les broches 3 (SDA) et 5 (SCL).

Si vous débutez avec le Raspberry Pi, je vous conseille de vous procurer un adaptateur pour breadboard (T-Cobber) sur lequel les broches sont déjà repérées. La broche 1 du GPIO est symbolisée par un carré. 

Brancher et tester un périphérique i2c au Raspberry Py

Pour éviter toute détérioration de votre Raspberry Pi, il est impératif d’éteindre le système avec la commande sudo halt et débrancher l’alimentation électrique.

Pour illustrer ce tutoriel, j’ai capteur de luminosité BH1750 (GY-302 de CJMCU) présenté dans cet article. N’importe quel autre capteur i2c pourra faire l’affaire. Par défaut, le BH1750 possède l’adresse 0x23.

pufg948q19geqeaibtny-5539884

Vérifier l’adresse du périphérique avec i2cdetect

La commande i2cdetect permet de connaitre l’adresse du périphérique sur le bus i2c. Le bus i2c permet de connecter jusqu’à 255 appareils. En fonction de la version du Raspberry Pi, la commande est différente. Pour les Pi 3 et Pi 2 (modèles A, B, B+) et le Pi Zero, exécutez

sudo i2cdetect -y 1

Pour les anciens modèles, exécutez

sudo i2cdetect -y 0

En cas d’erreur, vous obtiendrez le message suivant

Error: Could not open file `/dev/i2c-0' or `/dev/i2c/0': No such file or directory

Voici ce que vous devriez obtenir. Le BH1750 se trouve bien à l’adresse prévue.

pi@raspberrypi:~ $ sudo i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- 23 -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --

Voilà, tout est prêt pour utiliser des capteurs i2c dans vos programmes python, C++ ou Node-RED.

Avez-vous aimé cet article ? [Total: 1 Moyenne: 5]