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:
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Ω).
(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):
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:
1 2 3 4 5 6 7 8 9 dix 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
importation smbus importation temps #bus = smbus.SMBus (0) # Rev 1 Pi autobus = smbus.SMBus(1) # Rev 2 Pi DISPOSITIF = 0x20 # Adresse de l’appareil (A0-A2) IODIRA = 0x00 # Pin Register fuer die Richtung IODIRB = 0x01 # Pin Register fuer die Richtung OLATB = 0x15 # Register fuer Ausgabe (GPB) GPIOA = 0x12 # Register fuer Eingabe (GPA) # Définissez la broche 7 du GPA comme entrée (10000000 = 0x80) # Binaire: 0 signifie sortie, 1 signifie entrée autobus.write_byte_data(DISPOSITIF,IODIRA,0x80) # Définissez toutes les broches GPB comme sortie (00000000 = 0x00) autobus.write_byte_data(DISPOSITIF,IODIRB,0x00) # Mettez les 7 bits de sortie à 0 autobus.write_byte_data(DISPOSITIF,OLATB,0) # Fonction qui allume toutes les LED. def aufleuchten(): pour Mes données dans gamme(1,8): # Comptez de 1 à 8, qui est binaire # de 001 à 111. autobus.write_byte_data(DISPOSITIF,OLATB,Mes données) impression « Zahl: », Mes données, « Binaer: », «{0: 08b}».format(Mes données) temps.dormir(1) # Remettez toutes les broches à 0 autobus.write_byte_data(DISPOSITIF,OLATB,0) # Boucle sans fin en attente sur simple pression d’un bouton tandis que Vrai: # Statut de lecture du registre GPIOA Dégustateur = autobus.read_byte_data(DISPOSITIF,GPIOA) si Dégustateur & 0b10000000 == 0b10000000: impression « Taster gedrueckt » aufleuchten() |
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.