Dans mon cas, des écrans OLED possèdent l’adresse 0x68, et il n’y a pas de jumpers à l’arrière du PCB pour en modifier l’adresse. On peut donc relier un seul et unique module par bus. Or je ouhaite connecter 5 modules à un raspberry dans le cadre du projet cerberus.
Heureusement, Il est possible sur raspberry pi de déclarer des bus I2C en plus de celui disponible de base (broches 3 et 5).
Choix de la Numérotation
Les bus 0 et 2 sont réservés.
Toujours déclarer en premier le bus avec le numéro le plus haut, et le bus 3 en dernier.
Par exemple pour 3 bus supplémentaires, l’ordre sera : 5 4 3
Mise en place des bus
Dans la section précédée par ce commentaire :
Ajouter les lignes suivantes (numéro des pins en BCM):
On aura donc :
- bus 5 sur les GPIO BCM5 et BCM6
- bus 4 sur les GPIO BCM23 et BCM24
- bus 3 sur les GPIO BCM17 et BCM27
- bus 1 sur les GPIO BCM2 et BCM3
Enregistrer, fermer, connectez vos modules sur les nouveaux bus et rebooter le raspberry.
Détection des nouveaux bus
Lancer la détection des bus I2C :
Si vous obtenez :
sudo: i2cdetect: command not foundInstallez :
sudo apt-get install i2c-toolsN’oubliez pas d’activer l’I2C :
sudo raspi-config # puis choix 5 puis choix P5 et yes
Lister les périphériques sur les bus :
sudo i2cdetect -y 4
sudo i2cdetect -y 3
sudo i2cdetect -y 1
Les adresses des périphériques devraient s’afficher dans la grille sur les différents bus, sinon vérifier le cablage.
Remarque
Une autre solution est d’utiliser des multiplexeurs, mais la vitesse du bus est alors considérablement réduite. D’autant plus si le nombre de capteurs est important sur le système global. Privilégier l’usage des bus I2C virtuels, si des ports sont disponibles sur votre GPIO.
Source : lien