MAJ (21.03.2013) : une amélioration notable est ici
S’il manque une seule chose au Raspberry Pi, c’est un bouton d’extinction. En effet, on a pas toujours un clavier sous la main, ou un ordinateur pour lancer le fameux « sudo halt » en SSH… Parfois il nous arrive même de faire des erreurs, et le Raspberry Pi peut se retrouver bloqué, avec pour seule solution de le débrancher à chaud. Cette dernière méthode est d’ailleurs à proscrire, puisqu’elle peut totalement détruire votre système d’exploitation, voire la carte SD. Nous allons donc connecter un bouton, qui nous servira à éteindre le Pi une fois pressé (pour l’allumage, ce sera le sujet d’un autre article). De cette façon, même si le Pi est planté, on devrait toujours pouvoir l’éteindre proprement.
Prérequis
Nous aurons besoin pour ce guide :
- d’un Raspberry Pi (la préparation grâce au mini-guide ~4 est idéale)
- d’une platine d’expérimentation (un petit modèle suffira),
- d’un bouton de type micro-switch,
- de deux fils Dupont male-femelle,
- du guide ~5 : Ajouter un bouton matériel (avec Python) pour le câblage et les explications techniques
Explication
Le code du bouton sera un peu amélioré par rapport à l’exemple du guide. En effet, nous allons utiliser une autre technique, appelée threaded callback, qui permettra à notre script de faire autre chose pendant qu’il attend un appui sur le bouton. En clair, le threaded callback peut par exemple permettre de gérer plusieurs boutons avec un seul et même script !
Le code
En admettant qu’on désire que notre script se trouve dans le dossier /home/pi/, lancer la commande sudo nano /home/pi/bouton_extinction.py. Cela créera le fichier et l’ouvrira pour l’édition.
Coller ce code dans le fichier qu’on vient de créer :
#!/usr/bin/env python2.7 # on importe les modules necessaires import time import os import RPi.GPIO as GPIO # on met RPi.GPIO en mode notation BCM (numero des pins) GPIO.setmode(GPIO.BCM) # on initialise le GPIO 23 en mode ecoute GPIO.setup(23, GPIO.IN, pull_up_down=GPIO.PUD_UP) # on definit notre fonction qui sera appelee quand on appuiera sur le bouton def extinction(channel): # on affiche un petit message pour confirmer print("Appui détecté sur le GPIO 23") # on reinitialise les GPIO GPIO.cleanup() # on lance la commande d extinction os.system('sudo halt') # on met le bouton en ecoute GPIO.add_event_detect(23, GPIO.FALLING, callback=extinction) # on lance une boucle infinie, pour garder le script actif while 1: # une petite pause entre chaque boucle, afin de réduire la charge sur le CPU time.sleep(0.02) # on reinitialise les ports GPIO en sortie de script GPIO.cleanup()
CTRL+O puis ENTREE pour sauvegarder, CTRL+X pour quitter
Il suffit maintenant de lancer notre script au démarrage du Raspberry Pi, et on aura terminé !
- Rendre le script exécutable avec la commande sudo chmod +x /home/pi/bouton_extinction.py
- ouvrir le script de démarrage automatique avec la commande sudo nano /etc/rc.local
- juste avant la ligne # Print the IP address, insérer la commande suivante : sudo python /home/pi/bouton_extinction.py
A l’avenir, si vous devez lancer des commandes au démarrage, veillez à les lancer après le script bouton_extinction.py. De cette façon, le bouton devrait fonctionner quoi qu’il arrive (a part en cas de gros problème de démarrage, mais dans ce cas, le bouton ne sera pas une priorité).
Nous avons terminé avec ce tutoriel, et vous avez maintenant un bouton matériel pour éteindre votre Raspberry Pi… Félicitations !
5 réflexions au sujet de « Raspberry Pi : Ajouter un bouton d’extinction (avec Python) »