Un chiffre sec : 40. C’est le nombre de broches GPIO que l’on retrouve sur un Raspberry Pi 4. Trente-huit points de contact, deux d’alimentation, et derrière chacun, une promesse d’interaction directe avec la matière. Les GPIO, General Purpose Input/Output, ont redessiné le paysage du prototypage électronique, en ouvrant aux bricoleurs et ingénieurs la porte d’un univers où le code dialogue avec le tangible. Allumer une LED, faire vibrer un moteur, interroger un capteur : la magie opère à chaque déclenchement.
Comprendre les broches GPIO
Les broches GPIO, ces General Purpose Input/Output, incarnent le cœur pulsant du Raspberry Pi dès que l’on pose les mains sur un projet électronique. Ce sont elles qui assurent la passerelle électrisante entre capteurs et actionneurs. Pour chaque idée, il faut choisir : broche en entrée pour écouter un signal, en sortie pour agir sur le monde physique. Prendre le pouls d’un thermomètre, faire s’allumer un afficheur, détecter le passage d’un objet… Chaque broche se fait relais entre code et réalité.
Numérotation des broches
Il suffit parfois d’une petite erreur de repère pour perturber tout un prototype : la numérotation change le jeu. Deux standards rivalisent : GPIO.BOARD avec son comptage physique (de 1 à 40, dans l’ordre du connecteur), et GPIO.BCM, qui fait référence à la dénomination du processeur Broadcom. Confondre les deux, c’est risquer d’activer le mauvais composant ou de laisser un capteur injoignable, un détail qui s’avère vite frustrant lors des essais.
États logiques
Sur chaque broche, deux valeurs seulement : GPIO.HIGH (niveau haut) et GPIO.LOW (niveau bas). Ce principe binaire permet de commander précisément LEDs, relais ou moteurs. Différencier ces états, c’est bâtir un circuit digne de ce nom, fiable à chaque activation.
Quelques configurations courantes
De nombreux modes de fonctionnement existent pour les GPIO. Voici les principaux cadres d’utilisation :
- GPIO.IN : transforme la broche en entrée pour recueillir l’état d’un capteur ou d’un bouton.
- GPIO.OUT : configure la broche en sortie pour piloter relais, LED ou moteur sans effort.
- GPIO.PWM : active la modulation de largeur d’impulsion, parfaite pour régler la luminosité d’une led ou ajuster la vitesse d’un ventilateur.
- GPIO.PUD_UP et GPIO.PUD_DOWN : intègrent des résistances internes, pour stabiliser la lecture des signaux en évitant les fausses détections.
En complément, certains modes, comme GPIO.RISING, GPIO.FALLING et GPIO.BOTH, réagissent aux variations instantanées de l’état d’une broche. Impossible d’ignorer ces configurations : elles rendent les boutons, capteurs ou contacteurs parfaitement réactifs.
Configurer et utiliser les broches GPIO
Configurer les broches
Impossible d’échapper à la phase de préparation. La bibliothèque RPi.GPIO sous Python simplifie le travail : il suffit de quelques lignes pour installer la configuration nécessaire selon la nature du composant branché. Les manipulations reviennent souvent à ces réglages :
- GPIO.IN pour la réception d’informations depuis un capteur ou un bouton.
- GPIO.OUT dès lors qu’il faut commander une action, qu’il s’agisse d’une led, d’un buzzer ou d’un relais.
- GPIO.PWM pour les usages nécessitant la variation du signal, comme la gradation d’une lumière ou la gestion d’un petit moteur électrique.
- GPIO.PUD_UP ou GPIO.PUD_DOWN pour fiabiliser les entrées, éviter les parasites, garantir la stabilité d’une lecture.
Utiliser les broches
Une fois la bibliothèque importée et le mode de numérotation défini, le terrain est prêt. Allumer une LED connectée à la broche 18 ne prend que quelques lignes de code :
python
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.OUT)
GPIO.output(18, GPIO.HIGH)
Détection d’événements
Pour ceux qui veulent donner vie aux objets, la détection d’événements devient vite un passage obligé. Grâce à des fonctions dédiées, le Raspberry Pi réagit de façon instantanée à la pression d’un bouton ou au déclenchement d’un capteur :
python
GPIO.add_event_detect(18, GPIO.RISING, callback=my_callback)
Ce procédé autorise des scénarios dynamiques : il suffit d’un appui pour ouvrir une porte, enclencher un moteur ou déclencher une alerte. Dès lors, les GPIO ne se contentent plus de transmettre le courant, ils orchestrent l’interaction entre logiciel et hardware avec une efficacité redoutable.
Programmer les broches GPIO
Initialiser les GPIO
Avant d’aller plus loin, il faut s’assurer que la bibliothèque RPi.GPIO est bien installée. Cela ne prend qu’une ligne :
shell
sudo apt-get install python3-rpi.gpio
Une fois installée, l’intégration dans le code ne pose aucune difficulté :
python
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
Contrôler les composants
Piloter une LED, gérer un relais ou un moteur, communiquer avec des capteurs : l’éventail des appareils contrôlés en sortie s’élargit à mesure que l’on maîtrise la configuration des GPIO. Par exemple, pour faire briller une LED :
python
GPIO.setup(18, GPIO.OUT)
GPIO.output(18, GPIO.HIGH)
Pour des échanges plus complexes comme ceux avec des capteurs sur bus I2C ou SPI, il peut être nécessaire d’installer d’autres modules, mais la logique de configuration ne change pas.
Gestion des interruptions
Les interruptions ouvrent la voie à des appareils réactifs, voire temps réel. Il suffit de définir une fonction de rappel pour s’emparer au vol de tout changement sur une broche :
python
def my_callback(channel):
print(‘Détection d\’un événement sur la broche’, channel)
GPIO.add_event_detect(18, GPIO.RISING, callback=my_callback)
Nettoyer après utilisation
Lorsque plusieurs scripts se succèdent, il devient indispensable de réinitialiser le statut des GPIO pour démarrer chaque expérience sur des bases saines :
python
GPIO.cleanup()
De la simple commande d’une ampoule à la synchronisation de réseaux de capteurs, chaque projet donne une nouvelle dimension à ces broches minuscules. Les GPIO sur Raspberry Pi ne se contentent pas de transmettre ou lire le courant : ils offrent une liberté rare, celle d’inventer sans cesse. Qui sait jusqu’où mèneront ces quarante contacts et ceux qui osent les assembler ?


