Les broches GPIO (General Purpose Input/Output) du Raspberry Pi permettent d’interagir directement avec le monde physique : allumer une LED, lire un bouton poussoir, déclencher un relais, etc.
Depuis les dernières versions de Raspberry Pi OS (basées sur Debian Bookworm), l’ancienne méthode via /sys/class/gpio
est dépréciée.
La nouvelle méthode recommandée utilise la librairie libgpiod
, beaucoup plus moderne et performante.
1. Installation de libgpiod
Ouvrez un terminal sur votre Raspberry Pi et installez la librairie avec :
sudo apt update
sudo apt install gpiod libgpiod-dev
Cela installera les outils en ligne de commande :
gpiodetect
gpioinfo
gpioget
gpioset
gpiomon
2. Principales commandes libgpiod
Commande | Description |
---|---|
gpiodetect |
Liste les puces GPIO disponibles (souvent gpiochip0 ) |
gpioinfo |
Affiche les informations des broches disponibles |
gpioset |
Écrit une valeur (0 ou 1) sur une broche GPIO |
gpioget |
Lit la valeur d’une broche GPIO |
gpiomon |
Surveille les changements d’état d’une broche GPIO |
Exemple :
Pour obtenir des détails sur les broches :
gpioinfo gpiochip0
3. Comprendre les GPIO
Chaque GPIO (General Purpose Input/Output) est une broche numérique programmable du Raspberry Pi.
Ces broches peuvent être configurées en entrée (pour lire un signal) ou en sortie (pour envoyer un signal).
-
Sortie (Output) : le Raspberry Pi envoie un signal logique
0
(0 V) ou1
(3,3 V). -
Entrée (Input) : la broche lit la tension appliquée dessus.
-
Si la tension est proche de 0 V, l’état lu est
0
. -
Si la tension est proche de 3,3 V, l’état lu est
1
.
-
⚠️ Attention : les GPIO du Raspberry Pi fonctionnent en 3,3 V.
Appliquer une tension supérieure (comme 5 V) peut endommager définitivement le processeur.
Les GPIO ne peuvent pas fournir beaucoup de courant — environ 16 mA maximum par broche et 50 mA au total sur l’ensemble.
C’est pour cette raison qu’il est indispensable d’utiliser une résistance série pour protéger la LED qu’on installera après, ou tout autre composant consommateur de courant.
4. Allumer une LED sur la broche GPIO 24
Une LED est une diode électroluminescente : elle laisse passer le courant dans un sens, mais n’a pas de résistance interne suffisante.
Si on la relie directement à un GPIO, elle pourrait tirer trop de courant → la broche serait surchargée, la LED ou le Raspberry Pi pourraient être endommagés.
Le rôle de la résistance :
-
Limiter le courant dans la LED à une valeur sûre (typiquement 5 à 10 mA).
-
Protéger le GPIO.
Exemple de calcul :
Si la LED rouge a une chute de tension de ~2 V et le GPIO fournit 3,3 V :
R=(U/I) = (3.3V − 2V)/0.005A)= 260Ω
R = \frac{3.3V – 2V}{0.005A} = 260 Ω
On prend la valeur normalisée supérieure → 330 Ω.
Matériel
- 1 LED
- 1 résistance (330 Ω)
- Câbles Dupont
Branchement :
- Broche GPIO24 (pin 18) → anode de la LED (patte longue)
- Cathode de la LED (patte courte) → résistance → GND (pin 20)
Test avec gpioset
Pour allumer la LED, dans un terminal :
gpioset gpiochip0 24=1
Pour l’éteindre :
gpioset gpiochip0 24=0
5. Clignoter une LED 5 fois avec un script Bash
Nous allons créer un script shell permettant de faire clignoter la LED 5 fois.
Créez un fichier clignote.sh
:
#!/bin/bash
# Clignoter une LED 5 fois sur GPIO 24
for i in {1..5}
do
gpioset gpiochip0 24=1
sleep 1
gpioset gpiochip0 24=0
sleep 1
done
Rendez-le exécutable et exécutez-le :
chmod +x clignote.sh
./clignote.sh
Votre LED clignote 5 fois
6. Lire un bouton poussoir sur la broche GPIO 18
Lorsqu’un bouton est appuyé ou relâché, il connecte ou déconnecte un circuit.
Mais une broche en entrée ne doit jamais rester “flottante” (non connectée à 0 V ou 3,3 V), car elle capterait du bruit électrique et donnerait des valeurs aléatoires.
Pour éviter cela, on utilise des résistances de tirage (pull-up ou pull-down).
Pourquoi deux résistances (ou pas)
Deux options :
-
Utiliser les résistances internes du Raspberry Pi
Chaque GPIO peut activer une résistance interne de pull-up (vers 3,3 V) ou pull-down (vers GND).
Cela se fait par logiciel, mais aveclibgpiod
, c’est parfois moins pratique à configurer. -
Utiliser des résistances externes
On place une résistance de 10 kΩ entre la broche et le 3,3 V (pull-up), et le bouton relie la broche au GND lorsqu’on appuie.
Ainsi :-
Bouton relâché → GPIO lit
1
(via la pull-up) -
Bouton appuyé → GPIO lit
0
(car relié au GND)
-
Branchement :
Lecture simple :
gpioget gpiochip0 18
Retourne 0 (relâché) ou 1 (appuyé) selon le câblage.
7. Exemple : Allumer la LED quand le bouton est appuyé
Ce script surveille en permanence l’état d’un bouton poussoir (connecté sur le GPIO 18) et allume ou éteint une LED (connectée sur le GPIO 24) en fonction de cet état.
C’est donc une sorte de boucle de contrôle temps réel très simple :
Quand j’appuie sur le bouton → la LED s’allume
Quand je relâche le bouton → la LED s’éteint
Créez un script bouton_led.sh
:
#!/bin/bash
# Allume la LED sur GPIO24 quand le bouton (GPIO18) est pressé
while true
do
value=$(gpioget gpiochip0 18)
if [ "$value" == "1" ]; then
gpioset gpiochip0 24=1
else
gpioset gpiochip0 24=0
fi
sleep 0.1
done
Exécution :
chmod +x bouton_led.sh
./bouton_led.sh
8. Créer un bouton d’arrêt sur GPIO3
Le GPIO3 (pin 5) est spécial : il permet de réveiller ou éteindre le Raspberry Pi. Branchez simplement un bouton poussoir sur cette Pin 5 (GPIO3).
Activer la fonction de shutdown :
Éditez le fichier de configuration :
sudo nano /boot/config.txt
Ajoutez à la fin :
dtoverlay=gpio-shutdown,gpio_pin=3,active_low=1,gpio_pull=up
Enregistrez et redémarrez :
sudo reboot
Désormais, en appuyant sur le bouton poussoir, le Raspberry Pi s’éteindra proprement !