Raspberry Pi : Ajouter un bouton d’extinction (avec Python)

1119_LRG

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 !

A propos Captain Stouf

Spécialiste en systèmes informatiques, Développeur matériel et logiciel, Inventeur, Maker : électronique, Systems on Chip, micro-controlleurs, Internet of Things, Modélisation / Scan / Impression 3D, Imagerie...

5 réflexions au sujet de « Raspberry Pi : Ajouter un bouton d’extinction (avec Python) »

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.