Bouton physique “shutdown”¶
Objectif¶
Créer un bouton physique permettant d’éteindre proprement le Raspberry Pi
➡️ Si on débranche directement l’alimentation :
- risque de corruption de la carte SD
- perte de données
- système instable
Compatibilité¶
Cette doc fonctionne sur Raspberry Pi 2 Model B avec un système Linux (Raspberry Pi OS, Debian, Ubuntu, Fedora..)
Le script utilise la commande shutdown disponible uniquement sur Linux
La méthode système (gpio-shutdown) peut fonctionner selon la configuration mais peut être interceptée par une interface graphique.
Note
Ce montage est réalisé sur un Raspberry Pi 2 Model B, mais fonctionne normalement sur la plupart des autres modèles (Raspberry Pi 3, 4, Zero…).
Les GPIO étant standardisés le principe reste le même. Seule la disposition physique des pins peut varier légèrement selon le modèle.
Matériel nécessaire¶
Pour réaliser ce montage, il faut :
- un Raspberry Pi 2 Model B
- un bouton poussoir
- 2 fils jumper (Dupont)
Les fils (important)¶
Les fils utilisés sont appelés fils jumper (ou Dupont).
➡️ Ce sont des câbles avec des embouts adaptés aux pins du Raspberry Pi
Types de fils¶
Il existe plusieurs types :
- mâle → mâle (le plus courant)
- mâle → femelle
- femelle → femelle
➡️ Pour ce projet le plus simple est d’utiliser :
- 2 fils mâle → mâle
Pourquoi ces fils ?¶
Ils permettent de :
- connecter facilement le bouton aux GPIO
- éviter de souder
- brancher / débrancher rapidement
Tip
Les fils jumper permettent de tester facilement sans soudure.
Comment brancher¶
🪢Chaque fil relie :
- un côté du bouton
- une pin du Raspberry Pi
➡️ Exemple :
- fil 1 → GPIO17 (pin 11)
- fil 2 → GND (pin 6)
Warning
Vérifiez le schéma des pins de votre modèle de Raspberry Pi avant de brancher.
Étape 0 : branchement du bouton¶
Brancher le bouton entre :
GPIO17 → pin physique 11
GND → pin physique 6
Schéma des pins :
(extérieur) (intérieur)
1 2
3 4
5 6
7 8
9 10
11 12
Orientation
Place le Raspberry Pi :
- ports USB vers toi
- pins en haut à droite
➡️ pin 1 = en haut à gauche
Test du bouton¶
_OUUVRE UN TERMINAL
📁Créer un fichier :
bash
nano shutdown.py
copie colle ce code dans shutdown.py :
from gpiozero import Button
from signal import pause
button = Button(17, pull_up=True)
def test():
print("BOUTON APPUYE")
button.when_pressed = test
pause()
CTRL + O → ENTER → CTRL + X
Execute dans le terminal :
sudo python3 shutdown.py
Si tu vois "BOUTON APPUYE" le bouton fonctionne bien
Comment fonctionne le bouton (très important)¶
Un bouton 4 pattes :
-
A est connecté à C
-
B est connecté à D
En réalité quand tu appuies
- A se connecte à B
- (et donc C à D)
➡️ Il faut donc brancher A + B (= un côté + l’autre côté)
Installation¶
Étape 1 : créer le script Python¶
_ Ouvrir un terminal
📁 Ouvre le fichier :
nano shutdown.py
Étape 2 : écrire le code¶
Copier et coller le code suivant :
from gpiozero import Button
from signal import pause
import os
Button(17, pull_up=True).when_pressed = lambda: os.system("shutdown now")
pause()
-
Importe les modules nécessaires
-
dit que le bouton est branché sur GPIO17
-
lorsqu'on appuie sur le bouton il faut lancer
shutdown now -
reste en attente afin de continuer à écouter le bouton
Étape 3 : sauvegarder 💾¶
Dans nano shutdown.py : CTRL + O → ENTER → CTRL + X
Étape 4 : lancer le script¶
_ Dans le terminal :
sudo python3 shutdown.py
Etape 5 : tester¶
appuyer sur le bouton (normalement instantané, mais si ça ne marche pas, maintenir appuyé quelques secondes)
le Raspberry Pi s’éteint proprement (NORMALEMENT😅)
Lancement automatique au démarrage¶
_ Ouvrir le fichier dans le terminal :
sudo nano /etc/rc.local
Copie colle ça dedans :
#!/bin/sh -e
sudo python3 /home/<utilisateur>/shutdown.py &
exit 0
-
Permet l'exécution dans le shell (nécessaire pour que rc.local fonctionne)
-
Exécution du script python avec les droits admin
-
le & lance le script en arrière-plan
-
exit 0 : le script s'est terminé proprement
💾 Sauvegarde CTRL + O → ENTER → CTRL + X
il faut rendre le fichier exécutable :
sudo chmod +x /etc/rc.local
sudo reboot
Success
🎉🥳🥳🥳🥳🥳Normalement, tout fonctionne !!!👏👏👏👏🥳🥳
bravo, t'es un.e machine💚
Méthodes possibles¶
Méthode avec un script Python¶
- contrôle direct du GPIO
- fonctionne souvent
- nécessite un script
Méthode système (gpio-shutdown)¶
Configuration dans /boot/firmware/config.txt :
dtoverlay=gpio-shutdown,gpio_pin=17
- peut ouvrir un menu au lieu d’éteindre directement
Glossaire¶
-
GPIO (General Purpose Input/Output)
Broches du Raspberry Pi permettant d’envoyer ou recevoir des signaux -
PIN
Emplacement physique numéroté sur le Raspberry Pi -
GPIO17
Nom du GPIO utilisé dans le code. Correspond à la pin physique 11 -
GND (Ground)
Masse électrique. Permet de fermer le circuit -
Pull-up
Résistance interne qui maintient le signal à l’état haut par défaut -
Button (gpiozero)
Objet Python représentant un bouton connecté à un GPIO. -
when_pressed
Événement déclenché lorsque le bouton est appuyé. -
Lambda
Fonction courte écrite sur une seule ligne en Python -
shutdown
Commande système permettant d’éteindre proprement le Raspberry Pi -
sudo
Commande permettant d’exécuter une action avec les droits admin -
rc.local
Fichier exécuté au démarrage du Raspberry Pi -
dtoverlay
Configuration permettant d’activer des fonctionnalités matérielles comme gpio-shutdown -
gpio-shutdown
Méthode système permettant d’éteindre le rpi via un GPIO sans script Python