Table des matières:

Périphériques I2C multiples Raspberry PI : 3 étapes
Périphériques I2C multiples Raspberry PI : 3 étapes

Vidéo: Périphériques I2C multiples Raspberry PI : 3 étapes

Vidéo: Périphériques I2C multiples Raspberry PI : 3 étapes
Vidéo: Использование второго порта (I2C 0) на Raspberry Pi 2024, Juillet
Anonim
Périphériques I2C multiples Raspberry PI
Périphériques I2C multiples Raspberry PI
Périphériques I2C multiples Raspberry PI
Périphériques I2C multiples Raspberry PI

Frustré parce que vous ne pouvez pas utiliser plusieurs des mêmes appareils I2C dans votre projet. Pas besoin d'utiliser des multiplexeurs lents. Le dernier noyau Raspbian prend en charge la création de plusieurs bus I2C à l'aide de broches GPIO. Cette solution est ultra rapide.

Étape 1: Quelques commandes Shell

Quelques commandes Shell
Quelques commandes Shell

Connectez un de vos appareils i2c pendant que votre raspberry pi est éteint, démarrez votre raspberry pi et lancez

sudo i2cdetect -y 1

Vous verrez un tableau comme dans la figure ci-jointe. J'ai attaché un capteur de température et de pression barométrique BMP280. L'adresse i2c est 0x76 selon le tableau. Notez cette adresse.

Faites cela pour tous vos appareils i2c.

Étape 2: Premier cas: les appareils I2c ont la même adresse

Premier cas: les appareils I2c ont la même adresse
Premier cas: les appareils I2c ont la même adresse

Ce fut toujours le cas problématique. Un bus i2c peut gérer plusieurs périphériques, mais ils doivent avoir des adresses i2c différentes. Certains appareils i2c ont des cavaliers pour définir d'autres adresses i2c, mais beaucoup n'en ont pas. Dans ce cas, vous pouvez utiliser un multiplexeur i2c (matériel) pour faire pivoter l'i2c SDA (données) et SCL (horloge) ou vous pouvez créer un bus i2c supplémentaire ou plus.

Je vais créer deux bus supplémentaires, nl bus 3 et 4

Ouvrez le cli et exécutez

cd/démarrage

sudo nano config.txt

Ajoutez la ligne de code suivante, de préférence dans la section où spi et i2c sont activés.

dtoverlay=i2c-gpio, bus=4, i2c_gpio_delay_us=1, i2c_gpio_sda=23, i2c_gpio_scl=24

Cette ligne créera un bus i2c supplémentaire (bus 4) sur GPIO 23 en tant que SDA et GPIO 24 en tant que SCL (GPIO 23 et 24 sont les valeurs par défaut)

Ajoutez également la ligne suivante pour créer le bus i2c 3

dtoverlay=i2c-gpio, bus=3, i2c_gpio_delay_us=1, i2c_gpio_sda=17, i2c_gpio_scl=27

GPIO 17 sera le SDA et GPIO 27 sera le SCL pour le bus i2c 4.

Tipe contrôle X pour sortir.

Remarque sur la numérotation et la commande des bus:

N'utilisez jamais les bus 0 et 2, il est utilisé pour d'autres choses dans la carte comme l'eprom sur les chapeaux, etc.

Pour la version raspbian d'avril 2019:

Vous devez toujours commencer par le bus le plus élevé (Bus 4 dans ce cas) dans votre config.txt et continuer jusqu'au bus le plus bas (bus 3).

Le bus le plus bas doit toujours être le bus 3

Si vous avez besoin de 5 bus supplémentaires, les bus doivent bi dans l'ordre de 7, 6, 5, 4, 3

Ce problème sur la commande de bus n'était pas là lorsque ce Instructable a été écrit à l'origine. Il semble que des modifications aient été apportées au noyau.

Éteignez votre PI, éteignez-le. Connectez vos appareils i2c au bus 4 (SDA à GPIO 23 et SCL à GPIO 24) et l'autre au bus i2c 3 (SDA à GPIO 17 et SCL à GPIO 27).

Allumez le pi.

Courir:

sudo i2cdetect -l (L minuscule)

Vous verrez maintenant que les bus i2c 3 et 4 sont également répertoriés. Exécutez également:

sudo i2cdetect -y 3

sudo i2cdetect -y 4

Vous pouvez maintenant utiliser votre capteur dans votre langage de programmation. N'oubliez pas de spécifier les bus i2c corrects.

Attach est un exemple du populaire capteur de température et de pression BMP280. Aucun multiplexeur ne peut lire 2 BMP280 aussi rapidement.

Un exemple de 2 capteurs Sensirion SDP 810 est également joint. Fonctionne à nouveau beaucoup plus rapidement que le multiplexeur que j'ai utilisé dans le passé

J'ai créé du code python pour lire deux nouveaux BMP388 d'adafruit.

Je pourrais également ajouter d'autres capteurs à l'avenir à

Étape 3: Cas 2: Différentes adresses I2c

Simple. i2c est un bus. Un bus a pour but de communiquer avec plusieurs appareils. Connectez les appareils en parallèle sur le même bus i2c. Vous pouvez utiliser le bus un.

Courir:

sudo i2cdetect -y 1

Vous verrez les appareils répertoriés.

Conseillé: