Développez les GPIO du Raspberry Pi avec le port d’extension I2C

1591963207 Developpez les GPIO du Raspberry Pi avec le port dextension
1591963207 Developpez les GPIO du Raspberry Pi avec le port dextension

Si vous avez plusieurs projets plus petits ou plus grands, vous découvrirez bientôt que les broches GPIO de la Raspberry PI deviennent rapidement trop petites. Pour vous tous, ce tutoriel vous montrera comment utiliser un expandeur de port I2C pour multiplier facilement plusieurs fois les broches GPIO.

Dans certaines situations, vous pouvez avoir besoin de plus de broches GPIO qu’il n’a de sorties et vous êtes à ses limites physiques. Mais il existe un extenseur de port très utile. Sur l’utilisation de l’un d’entre eux, nous en discuterons dans ce post.

Matériels requis et général

Pour ce didacticiel, vous avez besoin des pièces matérielles suivantes:

Tout d’abord, la configuration des micropuces:

mcp23017_pinout-300x243

Comme vous pouvez le voir, les différences sont minimes, pour ce tutoriel, peu importe lequel est utilisé.

Préparation

Une petite explication des broches principales:

  • GPA0-7 et GPB0-7 sont les broches GPIO
  • A0, A1, A2 sont connectés à + (3,3 V) ou – (GND) et définissent le nom en interne. Si plusieurs extensions de port sont connectées, chacune doit être clairement identifiable. Avec le premier I²C, vous vous connecteriez tous à GND, le prochain A0 à 3,3 V et les deux autres à GND. Au troisième a! à 3,3 V et les deux autres à GND, etc. Il est donc possible jusqu’à 2³ et de connecter un extenseur à 8 ports.
  • VDD (broche 9) obtient la tension d’entrée (3,3 V)
  • VSS (broche 10) est connecté à GND
  • SCL (broche 12) est connecté à la broche GPIO 5 du Pi
  • SDA (broche 13) est connecté à la broche GPIO 3 du Pi

En conséquence, j’ai construit un petit circuit avec 3 LED (comme des résistances série 330Ω).

i2c_breadboard

(Nous avons besoin du bouton uniquement dans la partie 2 du didacticiel.)

La première chose à faire est de déverrouiller l’I2C dans le Pi. La façon la plus simple de procéder consiste à

sudo raspi-config

Il est activé sous «Options avancées»> «I2C».
Pour les anciennes versions de Raspbian, vous devez également modifier un fichier

sudo nano /etc/modules

et ajoute ces deux lignes à la fin:

i2c-bcm2708
i2c-dev

Enregistrez et quittez avec CTRL + O et CTRL + X.

Maintenant, les modules doivent être supprimés du fichier de liste noire, sinon, ils ne fonctionneront pas.

sudo nano /etc/modprobe.d/raspi-blacklist.conf

et mettez un # devant les deux entrées.

#blacklist spi-bcm2708
#blacklist i2c-bcm2708

Enregistrez à nouveau avec CTRL + O et CTRL + X et quittez.

Pour que nous puissions traiter l’I2C maintenant, nous devons installer quelques packages supplémentaires.

sudo apt-get install python-smbus i2c-tools

Arrêtez ensuite le Pi, attendez quelques secondes et débranchez-le.

sudo shutdown now

Test du matériel

Une fois que tout est connecté et que toutes les connexions ont été vérifiées à nouveau, démarrez le Pi et attendez qu’il ait démarré.

J’utilise un Raspberry Pi Rev.2, donc je le teste avec:

sudo i2cdetect -y 1

Si vous avez un Pi Rev.1, vous devez entrer 0 au lieu de 1. La sortie ressemble à ceci:

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: 20 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

L’adresse 0x20 (hexadécimale) contient le I2C. Si A2 était par exemple connecté à 3,3V (A1 et A0 à GND), il serait adressable à l’adresse 0x24. Ceci est, comme mentionné ci-dessus, important si vous avez connecté plusieurs extensions de port afin de pouvoir y répondre clairement.

Pour adresser les LED, les ports doivent être déclarés comme entrée ou sortie (Rev1 veuillez ajuster à nouveau l’utilisateur).

sudo i2cset -y 1 0x20 0x01 0x00

Voici quelques exemples qui expliquent le fonctionnement de la commande:

i2cset -y 1 0x20 0x01 0x00   #all pins of GPB are output
i2cset -y 1 0x20 0x01 0x04   #GPB2 is input, the rest of GPB output (since 0x04 in binary 00000100)
i2cset -y 1 0x20 0x00 0x80   #GPA7 is input, the rest of GPA output

Tout d’abord l’adresse adressée par i2cdetect est adressé. La deuxième valeur est dans ce tableau (à partir de la Fiche technique):

enregistrer

Donc, après avoir spécifié la direction (IODIRB) (0 = sortie, 1 = entrée), nous voulons laisser les trois LED s’allumer (binaire 00000111 = 0x07):

sudo i2cset -y 1 0x20 0x15 0x07

Si nous devions utiliser les broches GPA, au lieu de 0x15, ce serait 0x14.
Pour que les LED cessent de s’allumer, nous devons réinitialiser le niveau des broches à 0:

sudo i2cset -y 1 0x20 0x15 0x00

Script Python Raspberry Pi MCP23017 pour entrée et sortie

Nous créons donc un script

sudo nano i2c_input_output.py

avec le contenu suivant:

Enregistrez et quittez avec CTRL + O et CTRL + X.

Pour démarrer le script maintenant, nous entrons

sudo python i2c_input_output.py

Dès que vous appuyez sur le bouton, les LED s’allument. En appuyant sur CTRL + C, vous pouvez annuler le script et revenir à la console.

Comme vous pouvez le voir, son utilisation est assez facile et vous avez créé 16 autres broches GPIO.