Le bus I2C (ou I²C), pour Inter Integrated Circuit, a été développé en 1982 par Philips 1) et permet de connecter divers équipements électroniques entre eux. Il dispose d'un système d'adressage permettant de connecter de nombreux périphériques I2C sur les mêmes câbles, ce qui signifie ici que l'on utilisera un nombre restreint de GPIO, quel que soit le nombre de périphériques I2C installés. Dans le contexte du Raspberry Pi, ce bus est très utile, puisqu'il permet de rajouter diverses fonctionnalités. On trouvera par exemple des puces pour ajouter des GPIO, des horloges temps réel, des capteurs, et bien d'autres composants en I2C. Par défaut, l'I2C n'est pas forcément activé, et nous verrons comment faire cela.
Nous utilisons dans ce contexte une Raspbian sur le Raspberry Pi, mais le principe sera similaire pour les autres distributions linux du Raspberry pi. La première chose à faire sera de se connecter en ssh sur le Raspberry pi, ou alors d'ouvrir un terminal avec un clavier et un écran connecté sur le machine.
Avant toute chose, nous vérifierons que le système est à jour, en utilisant les commandes suivantes :
sudo apt-get update sudo apt-get upgrade
Une fois ce processus effectué, nous sommes certains d'avoir un système à jour, avec les dernières versions des paquets. Vous pouvez essayer sans, mais si le résultat obtenu n'est pas celui escompté, cette procédure permet souvent de régler le problème.
Nous allons maintenant installer des outils qui nous permettront de vérifier le bon fonctionnement de nos périphériques I2C, via les commandes suivantes :
sudo apt-get install python-smbus sudo apt-get install i2c-tools
Nous reviendrons ultérieurement sur leur utilisation.
Par défaut, le support de l'I2C n'est pas activé dans le noyau linux 2) de Raspbian. Pour pouvoir le faire, nous allons utiliser l'utilitaire raspi-config, que l'on lancera en tapant la commande suivante :
sudo raspi-config
Cela lancera un menu, dans lequel on se déplace avec les flèches directionnelles du clavier, ou l'on confirme avec entrée, et on annule avec echap. Il faudra donc faire bas jusqu'à arriver sur le menu Advanced options, avant d'appuyer sur entrée : Cela ouvrira un nouveau menu, dans lequel on sélectionnera l'option I2C avant de confirmer avec entrée :
Cela ouvrira une boite de dialogue demandant si l'on veut activer l'I2C, il faut répondre yes : Une seconde boite de dialogue viendra confirmer que l'I2C est activé. Une nouvelle boite de dialogue s'affichera, demandant si l'on souhaite charger le module au démarrage, ce à quoi on répondra par yes une fois de plus: Comme précédemment, une boite de dialogue viendra confirmer l'action effectuée. Nous reviendrons alors au menu principal, qu'on pourra alors quitter en appuyant sur la touche tabulation,, avant de faire flèche droite pour se rendre sur finish, puis entrée. Il est également possible de quitter en faisant echap.
Dès lors, une boite de dialogue devrait vous proposer de redémarrer le Raspberry pi, ce à quoi il faut répondre oui. Si ce n'est pas le cas, il suffira de redémarrer en tapant la commande suivante :
sudo reboot
Vous pouvez quitter la session SSH, qui se terminera de toutes façons automatiquement.
Une fois que le Raspberry pi aura redémarré, il sera alors possible d'utiliser les outils installés pour regarder ce qui est connecté sur le bus I2C. Sur les anciens Raspberry Pi (les vieux modèles B,en révision 1), le bus I2C est 0. Les nouveaux modèles B, ainsi que les A+, B+ et les Raspberry pi 2 B ont un bus I2C en 1. Ainsi nous utiliserons la commande suivante pour visualiser les périphériques I2C connectés :
sudo i2cdetect -y 1
Si l'on a une ancienne révision du Raspberry pi, on pourra alors faire ceci à la place :
sudo i2cdetect -y 0
Si quelque chose est connecté sur le bus I2C, on verra apparaître un écran ressemblant à ceci : Dans le cas contraire, l'écran sera similaire, mais il n'y aura que des 00 dans le tableau.
Sur la capture ci dessus, le 20 indique qu'un périphérique d'adresse 20 est présente sur ce bus. Dans ce cas, il s'agit d'un MCP23017 utilisé pour commander un affichage LCD. Les chiffres qui apparaîtront dans cet écran dépendront du périphérique I2C connecté et de l'adresse qui lui est attribuée. Pour certains périphériques, elle est déjà définie par le constructeur, tandis que pour d'autres elle est réglable par l'utilisateur. Même pour les adresses prédéfinies, il est généralement possible de changer la valeur en soudant ou coupant une piste sur le composant.
Quoi qu'il en soit, chaque périphérique I2C devra avoir une adresse unique, sinon cela ne fonctionnera pas.
Le bus I2C est maintenant disponible et peut être utilisé sur la machine. Il est à noter qu'après une mise à jour, on peut avoir à réactiver le bus I2C en suivant cette même procédure.
Une application pratique de l'I2C sera par exemple d'ajouter des GPIO au Raspberry Pi, en utilisant une puce MCP23008 ou MCP23017. Nous avons un tutoriel sur l'utilisation du MCP23008/MCP23017 3).
Ce tutoriel est en partie basé sur le tutoriel d'Adafruit, qui mentionne en plus une méthode pour activer l'I2C sans raspi-config : Tutoriel d'Adafruit sur l'I2C4)