GPIO
Général Purpose Input/Ouput
Les GPIO permettent de communiquer avec d'autres circuits électronique. A l'instar de l'Arduino (un microcontrôleur), le Raspberry en possède lui aussi un, ce qui en fait à la fois un micro ordinateur et un microcontrôleur.
Dans le cadre bleu, le GPIO sur raspberry PI2
Et celui du raspberry PI3. Pas beaucoup de différences entre les deux images non ?
Des
différences existent avec les versions antérieures au raspberry Pi 2 (hors
Pi A+ et B+ qui sont identiques)
Les GPIO des versions précédentes avaient moins de connecteurs et le mapping diffère.
Le GPIO peut donc envoyer ou recevoir des signaux, mais ne traitre que des données numériques (binaire, 1 ou 0). Il fonctionne en 3.3 Vcc et le courant sera de faible intensité (attention à ne pas lui envoyer du 5V) .
Il existe un connecteur fournissant du 5Volt. Idéale pour faire quelques tests mais pour des projets électroniques sur du plus long terme, il sera préférable d'avoir une source externe en 5V.
Voici le schéma du gpio sur 40 pins
Cependant, à chaque position de pins existe un nom composé de "GPIO" et d'un numéro qui n'a évidemment rien à voir avec son pin...
- En rouge: 5Volts
- En orange: 3.3Volts
- En noir, la terre...
D'où le tableau de correspondance suivant:
Position PIN(N°) |
Position sous Wiring Pi | GPIO | Fonction complémentaire ou nom correspondant |
1 | 3.3Volt | ||
2 | 5Volt | ||
3 | 8 | GPIO2 | I2C - SDA |
4 | 5Volt | ||
5 | 9 | GPIO3 | I2C - SCL |
6 | Ground (terre) | ||
7 | 7 | GPIO4 | |
8 | 15 | GPIO14 | UART - TXD |
9 | Ground (terre) | ||
10 | 16 | GPIO15 | UART - RXD |
11 | 0 | GPIO17 | |
12 | 1 | GPIO18 | PCM - CLK |
13 | 2 | GPIO27 | |
14 | Ground (terre) | ||
15 | 3 | GPIO22 | |
16 | 4 | GPIO23 | |
17 | 3.3Volt | ||
18 | 5 | GPIO24 | |
19 | 12 | GPIO10 | SPI - MOSI |
20 | Ground (terre) | ||
21 | 13 | GPIO9 | SPI - MISO |
22 | 6 | GPIO25 | |
23 | 14 | GPIO11 | SPI - SCLK |
24 | 10 | GPIO8 | SPI - CE0 |
25 | Ground (terre) | ||
26 | 11 | GPIO7 | SPI - CE1 |
27 | 30 | GPIO0 | I2C ID_SDA (I2C ID EEPROM) |
28 | 31 | GPIO1 | I2C ID_SC (I2C ID EEPROM) |
29 | 21 | GPIO5 | |
30 | Ground (terre) | ||
31 | 22 | GPIO6 | |
32 | 26 | GPIO12 | |
33 | 23 | GPIO13 | |
34 | Ground (terre) | ||
35 | 24 | GPIO19 | PCM - FS |
36 | 27 | GPIO16 | |
37 | 25 | GPIO26 | |
38 | 28 | GPIO20 | PCM - DIN |
39 | Ground (terre) | ||
40 | 29 | GPIO21 | PCM - DOUT |
Comme vous pouvez le constater, c'est du grand n'importe quoi...
Certains PIN n'ont pas de GPIO correspondant. Il s'agit dans ce cas d'alimentation permanente ou de masse (terre/gnd/ground) et ne sont donc pas programmables. Tous les GPIO peuvent être utilisés comme vous le voulez. Cependant, certains de ces GPIO peuvent avoir une spécialisation que vous pourrez utiliser moyennant activation (raspi-config) et/ou l'installation de driver correspondant (I2C, UART, PCM ou SPI).
Wiring Pi
Une bien triste nouvelle, M. Gordon, le développeur de la première heure qui avait créé cette géniale librairie à mis fin à son développement pour le publique en Août 2019...
Wiring Pi, une librairie C/C++ pour piloter le GPIO.
En principe, WiringPi est déjà installé sur votre système
Tapez gpio readall ou gpio -v vous le confirmera !
WiringPi 2.60
Une version 2.60 de WiringPi "non officielle" (en même temps, comme son développeur a cessé de le maintenir, elle ne peut qu'être non officielle !) existe et prend en charge le PI 4:
Après contrôle du code, celui-ci est très bien ! Conforme au code d'origine, en ajoutant que le nécessaire pour le Pi 4 !
https://github.com/WiringPi/WiringPi
Et cela me permet de voir que je suis passé à côté de quelque chose (En même temps, comme je ne l'utilisais pas, ...): Le mécanisme de pin pull-up/down/enable est aussi changé sur le pi 4...
Se faire son propre WiringPi 2.52
Le mécanisme de pin pull-up/down/enable est changé sur le pi 4...et les explications ne sont pas données ici !
Pour ceux qui n'ont pas la V2.52 mais ont un PI 4, vous pouvez repartir des sources d'une V2.50 et faire vous même votre propre wiringPi 2.52 !
N'ayant pas la version 2.50 originale de Gordon, je suis reparti de celle-ci fonctionnant très bien sur mes Pi:
used to build the wiringPython, Ruby, Perl, etc. wrappers for these other languages.
Après comparaison avec la 2.44 que j'avais, cette copie est très bien !
Le code de Gordon est plutôt propre, et il n'est pas trop difficile d'intervenir dedans !
Dans le fichier wiringPi.h, vous trouvez la définition des constantes sur les différents modèles de PI
Exemple pour le pi3B+, ce sera le code 13:
#define PI_MODEL_3BP 13
Pour le PI 4B, il s'agit du code 17 (celui qui est pour le moment inconnu lorsque vous tapez gpio -v)
Ajoutez une nouvelle constante pour le PI 4
Dans wiringPi.c, on retrouve la définition des pi, mémoire, …
Ajouter une nouvelle constante pour prendre en compte la nouvelle adresse de base du mapping des GPIO du Pi 4 (C'est pour cette raison que votre led ne clignote plus ! ; ) )
Par exemple
#define GPIO_PERI_BASE_NEW_2 0xFE000000
et remplacez le modèle unknow17 dans piModelNames pour prendre en compte le modèle Pi 4!
Maj piMemorySize pour les codes sur les différents capacités de la mémoire, ajoutez les capacités 2048 et 4096 manquantes !
La commande gpio -v devrait déjà refonctionner...
Dans la fonction wiringPiSetup, remplacez le switch case par celui-ci pour prendre en compte la nouvelle adresse de base du mapping des GPIO
Cette fois-ci gpio write pin valeur doit fonctionner, puisque l'on adresse maintenant dans la bonne zone mémoire ! Votre led doit s'allumer !
A ce stade, la commande gpio readall ne fonctionne toujours pas, cela ne va pas durer...
Dans readall.c, la fonction doReadall, il faut ajouter le nouveau modèle, sinon, refus de lancer les traitements.
De plus, pour afficher correctement le type au niveau entête et fin du tableau, il faut maj la fonction plus2header()
Voilà, gpio readall doit refonctionner !
Vous pouvez changer le numéro de version de wiringPi
il y a 2 fichiers
version.h
Et le fichier VERSION utilisé pour nommer la librairie libwiringPi.so.x.xx lors de la compilation.
Et il y a aussi un fichier de control: debian-template/wiringPi/DEBIAN/control
Reste à tout reconstruire, tapez ./build ...
Voilà, c'était pas difficile... Bien évidemment, ces explications ne sont pas données à ce "DanielK" qui ne comprendra sûrement rien à ce qu'il faut faire de toute façon ...
Reste à surveiller les forks de wiringPi qui a n'en pas douter auront des maj compatibles pi4.
Sinon
Pour installer la dernière version pour Raspberry Pi4, tapez
wget https://project-downloads.drogon.net/wiringpi-latest.deb
sudo dpkg -i wiringpi-latest.deb
Sinon
Pour l'installer, vous pouvez passer par GIT:
Si non installé, tapez:
apt-get install git-core
Pour récupérer la librairie:
git clone git://git.drogon.net/wiringPi
Dans votre répertoire courant, vous avez maintenant un répertoire wiringPi
cd wiringPi
./build pour construire les librairies
Des exemples sont disponibles dans le répertoire examples
Pour compiler votre programme avec la librairie Wiring Pi:
gcc -Wall -o votre programme_executable_genere votre_fichier_source -lwiringPi
Exemple de programme:
Positionner à 1 (ON) ou non (OFF) un ou des ports du GPIO en ligne de commandes
Pourra être utile pour contrôler votre premier montage de led. Celle-ci s'allumera ou s'éteindra. Enfin, si vous n'avez pas monté votre circuit à l'envers et que vous ne vous êtes pas trompé de n° de port (entre autre) !
Dans vos projets, pensez bien à initiliser les ports qui seront utilisés avant d'effectuer vos traitements. Leur état étant à considérer comme inconnu.
GPIO
Un autre librairie pour le langage Python.
Pi4J
Utilisé pour le langage JAVA.
bcm2835
Encore une autre librairie...
Annexes
https://pinout.xyz/pinout/wiringpi#