Arrêter le Raspberry Pi avec un bouton


Achtung : Dieser Artikel wurde automatisch von Google Translate übersetzt


Advertencia : Este artículo ha sido traducido automáticamente por Google Translate

Si vous avez un Raspberry dans un coin, difficile d’accès et encore plus pour y brancher un écran, vous devez pouvoir l’arrêter proprement sans risque d’endommager le système de fichier. Voici une petite solution simple et peu couteuse.

Arrêter le Raspberry Pi avec un bouton

Le bouton est un composant simple et peu cher. Du coup il est vraiment facile à mettre en place et à lier à votre Raspberry.

Le montage en place, il faut passer à la partie logiciel. J’ai choisi le Python car c’est simple, les GPIO sont bien gérés et je n’en ai jamais fait donc c’est la bonne occasion ! 🙂

Avec le bouton, j’ai choisi d’ajouter une LED pour indiquer quand le script est prêt. Dans le processus de démarrage, j’ai choisi de lancer le script en dernier grâce aux tags LSB. La LED s’allumera donc quand tous les scripts seront démarrés.

Vous pouvez désactiver le script qui tourne en arrière plan en arrêtant le service de manière classique. La LED sera alors éteinte.

Voici donc le montage avec un bouton, une LED et une résistance 220Ω.

Arrêter le Raspberry Pi avec un bouton

  1. Mettre à jour la distribution
     apt-get update && apt-get upgrade -y
  2. Installer les paquets nécessaires
     apt-get install -y python python-rpi.gpio
  3. Créer le script Python qui va être utilisé lors de la séquence de boot. Je l’ai appelé /etc/init.d/shutdownBtn.py
    #!/usr/bin/env python2.7
    # -*- coding: utf-8 -*-
    import RPi.GPIO as GPIO
    import time as time
    import os
    import signal
    # Define mode to access GPIO pins
    GPIO.setmode(GPIO.BCM)
    GPIO.cleanup()
    # pin id for the shutdown button
    GPIO_shutdown=23
    # pin id for the LED status
    GPIO_led=17
    
    # GPIO_shutdown will be an input pin
    GPIO.setup(GPIO_shutdown, GPIO.IN, pull_up_down=GPIO.PUD_UP)
    # GPIO_led will be an output pin
    GPIO.setup(GPIO_led, GPIO.OUT)
    
    # Handler to stop the process
    def signal_handler(signal, frame):
        # Turn off the status LED
        GPIO.output(GPIO_led, False)
        GPIO.cleanup()
        exit(0)
    
    # Define what to do when the shutdown button is pressed
    def funcShutdown(channel):
        start_time = time.time()
        intSeconds = 0
        # How long to wait for the button
        maxWaitPushButton = 2
        while intSeconds < maxWaitPushButton and GPIO.input(channel) == GPIO.LOW :
             intSeconds = time.time() - start_time
             time.sleep(0.1)
        if intSeconds >= maxWaitPushButton:
            # Turn off the status LED
            GPIO.output(GPIO_led, False)
            GPIO.cleanup()
            os.system('sudo halt')
            #exit()  
    
    # Add a signal handler for the SIGTERM signal
    signal.signal(signal.SIGTERM, signal_handler)
    # Wait for the shutdown button to be pressed
    GPIO.add_event_detect(GPIO_shutdown, GPIO.FALLING, callback=funcShutdown, bouncetime=300) 
    # Light up the status LED
    GPIO.output(GPIO_led, True)
    # Loop
    while 1:
        time.sleep(0.2)
  4. Créer le script qui va être utilisé lors de la séquence de boot. Je l’ai appelé /etc/init.d/shutdownBtn. Attention aux paramètres LSB (plus d’informations ici). J’ai choisi de démarrer ce script en dernier, une fois que le système est prêt.
    #!/bin/bash
    
    ### BEGIN INIT INFO
    # Provides:          shutdownBtn
    # Required-Start:    $all
    # Required-Stop:    
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: Script to add the capability to shutdown the Raspberry Pi with a button
    # Description:       Script to add the capability to shutdown the Raspberry Pi with a button
    ### END INIT INFO
    
    case "$1" in
        start)
    	/usr/bin/python /etc/init.d/shutdownBtn.py &
    	echo $! > /tmp/.shutdownBtn-pid
            ;;
        stop)
    	kill `cat /tmp/.shutdownBtn-pid`
            ;;
        reload|restart)
            $0 stop
            $0 start
            ;;
    
        *)
            echo "Usage: $0 start|stop|restart|reload"
            exit 1
    esac
    exit 0
  5. Changer les droits du script
    chmod 755 /etc/init.d/shutdownBtn
  6. Ajouter le script dans la séquence de démarrage
     insserv shutdownBtn

Vous voilà prêt. Soit vous redémarrez votre machine soit vous lancez le service manuellement. Appuyez au moins 2 secondes pour éteindre votre précieux !

Vous aimez cet article ? Supportez-moi sur Patreon!

Vous aimerez aussi...