Introduction au GPIO sur le Raspberry-Pi
L’un des points les plus intéressants sur le Raspberry-Pi (et malgré tout encore délaissé sur le site..) est la partie GPIO !
Ainsi, je vais donc faire dans ce billet une petite introduction sur le sujet. Cela dans le but de déjà savoir de quoi ça parle et à quoi cela va bien pouvoir nous servir par la suite.
Les périphériques GPIO comportent un ensemble de ports d’entrée/sortie qui peuvent être configurés pour jouer soit le rôle d’une entrée, soit le rôle d’une sortie.
Le GPIO : A quoi ça sert ?
L’interface GPIO permet une extension des fonctionnalités du Raspberry-Pi. Les broches permettent ainsi au Raspberry-Pi d’avoir un accès au « monde extérieur ». Notamment en agissant en sortie depuis des LED, des afficheurs LCD, des capteurs, ou encore lire l’état d’un interrupteur (on/off).
Description du connecteur
Le connecteur GPIO (schéma ci-dessous) est composé de 26 broches dont 17 sont dédiées au GPIO (permets des changements d’état on/off). Les autres broches ont le rôle d’alimentation (3.3v, 5v) et de terre (ground).
Le connecteur dispose ainsi de différents types de connexion :
- Broches pour une interface I2C. (permet de se connecter sur du matériel avec seulement 2 broches.)
- Broches utilisables en entrée ou sortie numérique. Également dite « tout ou rien ».
- Broches Rx et Tx. (Communication avec des périphériques séries.)
- Broches pouvant être utilisé en PWM (« Pulse Width Modulation »)ou PPM (« Pulse Position Modulation »).
- Une interface SPI.
Exemple de fonctionnement
Afin de mieux assimiler les notions de GPIO, nous allons développer avec l’allumage d’une LED.
Pour commencer, voici ci-dessus le schéma d’un circuit électrique simple correspondant à se que l’on peut réaliser avec notre Raspberry-Pi.
Nous avons donc, une batterie (3.3v – RPI) qui émet un courant vers un commutateur (Switch on/off) qui le dirige vers une source lumineuse (LED). (La résistance étant présente pour protéger la LED).
Après le schéma électrique, repassons maintenant au Raspberry-Pi avec le schéma « physique » comme ci-dessous.
Nous allons donc redéfinir les éléments vu précédemment.
Lors de l’utilisation du GPIO le Raspberry va effectuer en même temps le rôle de batterie (3.3v) et de commutateur (Switch).
Les broches spécifiques GPIO peuvent passer à l’état On/Off (High/Low en terme « machine »). Soit :
- Quand la broche est On (High) > le courant de 3.3v passe dans le circuit.
- Quand la broche est Off (Low) > aucun courant ne circule.
Explication du schéma « physique » :
La LED et connecté à une broche GPIO (qui peut transmettre un courant de 3.3v) et à une broche de « terre » (qui est à 0v. Représente la partie négative de la batterie).
Une fois le branchement effectué, il ne reste qu’a écrire un programme pour pouvoir modifier l’état de broche On/Off (High/Low).
Comment modifier l’état des broches ? (lecture/modification)
Pour modifier l’état des broches (On/Off) est ainsi pour voir éteindre ou allumer la source lumineuse vu précédemment (LED), il nous faut passer à la partie logiciel.
Il existe plusieurs méthodes pour changer l’état des broches GPIO. Voici ci-dessous 3 méthodes avec un exemple d’utilisation pour chacune.
Depuis WiringPi :
WiringPi est une librairie écrite en C permettant l’accès au GPIO du BCM2835 utilisé par le Raspberry Pi. (Partagés par Gordon).
Exemple pour passer l’état de la broche 16 (GPIO 23) à 1 :
1 | pi@rpi:~ # gpio -g write 23 1 |
Depuis WebioPi :
Webiopi est une application web qui permet de contrôler les broches GPIO du raspberry depuis une interface web. L’interface permet ainsi de changer l’état d’une broche de « IN » à « OUT » ou inversement comme l’image ci-dessous.
(Je réaliserai bientôt un tutoriel complet pour mettre en place cette solution.)
Depuis le Shell :
Voici un exemple pour passer l’état de la broche 16 (GPIO 23) à 1 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | pi@rpi:~ # cd /sys/class/gpio/ pi@rpi: /sys/class/gpio # ls export gpiochip0 unexport pi@rpi: /sys/class/gpio # echo 23 > export pi@rpi: /sys/class/gpio # ls export gpio24 gpiochip0 unexport pi@rpi: /sys/class/gpio # cd gpio23/ pi@rpi: /sys/devices/virtual/gpio/gpio23 # ls active_low direction edge subsystem uevent value pi@rpi: /sys/devices/virtual/gpio/gpio23 # echo out > direction pi@rpi: /sys/devices/virtual/gpio/gpio23 # cat value 0 pi@rpi: /sys/devices/virtual/gpio/gpio23 # echo 1 > value |
Câbles d’interface
Il existe de nombreuses façons de relier les différents éléments au Raspberry-Pi. Vous pouvez utiliser notamment une carte Pi-cobbler. Surement la méthode la plus simple pour commencer vos expérimentations. (Solution que nous développerons dans la deuxième partie de l’article).
Vous avez également la possibilité de fabriquer un câble par vous même ! comme le montre très bien l’excellent tutoriel du site faitmain.org.
GPIO : Cas pratique
Afin de mieux assimiler les notions « théoriques » , nous allons voir ici un cas très simple, mais représentatif de l’ensemble des possibilités du connecteur GPIO sur le Raspberry-Pi.
Nous allons simplement allumer une LED à partir des broches GPIO du raspberry-PI. Ce qui correspond à l’image ci-dessous :
Avant de commencer, voici les éléments qu’il vous faut acquérir si vous souhaitez réaliser ce tutoriel de A à Z .
Tutoriels :
Matériel :
Préparation du Raspberry-Pi
Pour commencer ce cas pratique, nous allons préparer le Raspberry-Pi en configurant la partie logicielle. Dans cet article, j’utilise l’OS Raspbian fraîchement installé et mis à jour. (Installer Raspbian)
Partie Logiciel
Il existe comme nous l’avons vu dans l’article précédent plusieurs méthodes pour modifier l’état d’une broche GPIO :
- Depuis le Shell
- Avec WritingPi
- Depuis un navigateur web avec Webiopi.
Dans cet article nous utiliserons la méthode WritingPi.
Installation de WritingPi
Nous allons maintenant installer WritingPi pour modifier l’état de notre LED du mode « éteint » à« Allumé ».
On installe tout d’abord GIT, indispensable pour la suite :
1 | sudo apt-get install git-core |
Puis on récupère les fichiers et on compile le tout :
1 2 3 4 | git clone git: //git .drogon.net /wiringPi cd wiringPi git pull origin . /build |
Nous pouvons maintenant mettre en place notre circuit avec l’ensemble des éléments.
Partie matérielle
Pour réaliser cette partie, je vous propose d’utiliser 2 méthodes.
- En câblage « direct », méthodes avec simplement des fils.
- Avec le Pi-Cobbler, un petit bloc qui ajoute directement toutes les broches du GPIO sur la breadbord.
Avant la mise en place, voici ci-dessous quelques notions qu’il est utile de connaitre.
Elle permet de réduire la tension d’alimentation (comme un transformateur délivrant du 12V en courant continu) afin d’obtenir la tension nécessaire pour illuminer une LED (par exemple 2,3V).
LED : Une LED fonctionne en courant et tension continus. Comme une diode classique, la LED ne conduit que dans un sens. Dans l’autre sens, elle est bloquée, mais ne supporte pas des tensions inverses élevées (souvent 5V max).
Pour en savoir plus sur les LED et le calcul des résistances, je vous conseille les articles suivants :
- LED et calcul de résistance (Astuces-pratiques.fr)
- Calcul de résistance pour une LED (Fantaisyland.fr)
- Ports GPIO et LED (iTechnoFrance)
- Code Couleur Résistance (nymphomath.ch)
Schéma des broches GPIO (Modèle B et B+)
Pour rappel, voici les schémas des Raspberry-Pi modèles B et B+ afin de repérer les broches à utiliser. Dans le cas pratique, j’utilise le modèle B.
Model B :
Model B+ :
Montage du circuit : « en direct »
Pour commencer, on va relier les différents éléments du circuit comme suit :
- Le fil rouge sur la broche 8 (GPIO 4)
- Le fil bleu sur la broche 6 (Ground)
La Résistance
Placer la résistance sur la breadboard, puis relier le fil rouge (+) sur la même ligne que la résistance (en « Entrée »).
On passe ensuite à l’ajout de la diode.
La LED (Diode)
Placer la broche positive (+) de la diode sur la « sortie » de la résistance. Puis pour terminer, raccorder le fil bleu vers la broche négative (–) de la LED.
- Positif (+) > Broche la plus longue
- Négatif (–) > Broche la plus petite
Soit comme le schéma et les photos ci-dessous :
Une fois que vous avez mis en place les éléments, vous pouvez passer au branchement de votre Raspberry-Pi. (La prise électrique et la connexion réseau en Wifi ou Ethernet).
Maintenant que les branchements sont effectués, connectez-vous à votre Raspberry-Pi en SSH pour la suite.
Allumage de la LED avec WritingPi
Pour changer l’état de la LED avec WritingPi, on passe la broche GPIO en mode « out » (sortie). Puis pour allumer la diode en lance la commande « write » (écriture) avec 1 pour allumer et 0 pour éteint.
Soit en ligne de commande :
1 2 3 | gpio -g mode 4 out gpio -g write 4 1 gpio -g write 4 0 |
Voilà pour la première méthode !
Montage du circuit : « Pi-Cobbler »
La méthode avec le Pi-Cobbler et tout aussi simple que la précédente. Il faut également faire attention à relier correctement les éléments. Pour se faire, il vous suffit de suivre les étapes ci-dessous une à une.
Brancher le socle Pi-Cobbler sur la plaque à essai :
Ensuite on met en place le circuit avec le reste des éléments (comme dans la méthode précédente) sauf que les fils sont directement raccordés à la breadboard.
Soit, comme le schéma et les images suivantes :
Une fois tous les éléments branchés, il vous suffit de vous connecter en SSH à votre Raspberry-Pi et de lancer les commandes vu dans la première méthode pour allumer la diode.
Et, voilà pour la méthode Pi-Cobbler.
Conclusion
Vous avez maintenant deux solutions pour allumer une diode. Évidemment ce tutoriel n’est qu’un avant-goût des possibilités du GPIO sur le Raspberry-Pi.
J’espère que cette petite introduction sur le GPIO vous aura donné des idées pour mettre en place vos propres réalisations! N’hésitez pas à m’en faire part si c’est le cas.
J’essayerai de vous présenter dans de prochains articles des cas pratiques un peu plus « poussés » sur le sujet :
- Utilisation d’un bouton d’allumage ;
- Mise en place d’un tableau de contrôle avec diode ;
- Utilisation d’un script Bash ;
- etc…
A très bientôt !