raspberrytips.nl

Raspberry Pi voorzien van een shutdown-knop

De Raspberry Pi is niet voorzien van een aan-uit schakelaar, je kunt deze alleen veilig afsluiten met behulp van het shutdown commando. Het simpelweg verwijderen van de netstroom is niet aan te bevelen omdat hierdoor het bestandssysteem op de SD kaart corrupt kan geraken. Na het uitvoeren van het shutdown commando is dit geen probleem omdat het systeem in ‘halt’ modus is geplaatst.

Met hulp van een drukschakelaar en twee verbindingsdraden is het mogelijk om een Raspberry Pi te voorzien van een shutdown schakelaar. Een drukschakelaar aangesloten op de GPIO pinnen kan gebruikt worden om een python script te activeren die op zijn beurt Raspbian veilig laat afsluiten.

Componenten voor dit project

1x drukschakelaar
2x Dupont verbindingskabels (female/female)

Aansluitschema shutdown schakelaar

Raspberry Pi A+/B+, 2 en 3

Het aansluitschema is vrij simpel verbind de twee pinnen van de drukschakelaar met de Raspberry Pi op pin 5 (GPIO3) en pin 6 (GND). We maken gebruik van GPIO3 (is pin 5) omdat deze een pull-up weerstand heeft, die eenvoudig kan worden uitgelezen met python.

Python script

Nadat de drukschakelaar is aangesloten hebben we het onderstaand python script nodig om de status van de schakelaar uit te lezen. Het script plaatsen we in de home folder van gebruiker ‘pi’.

nano /home/pi/shutdown.py

Kopieer de onderstaande code in de nano editor:

#!/usr/bin/python
import RPi.GPIO as GPIO
import time
import subprocess

GPIO.setmode(GPIO.BOARD)
# set pin 5 to input, and enable the internal pull-up resistor
GPIO.setup(5, GPIO.IN, pull_up_down=GPIO.PUD_UP)

oldButtonState1 = True
while True:
    buttonState1 = GPIO.input(5)

    if buttonState1 != oldButtonState1 and buttonState1 == False :

        subprocess.call("init 0", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

    oldButtonState1 = buttonState1

    time.sleep(.1)

Bewaar de wijzigingen (ctrl X, y, enter).

Script toevoegen aan cron

Om de status van de drukknop te kunnen detecteren moeten we het python script op de achtergrond actief maken en automatisch starten na een herstart. Dit doen we met behulp van crontab:

crontab -e

Plaats onderaan het bestand de onderstaande regel:

@reboot sudo python /home/pi/shutdown.py

Het script en crontab zijn nu ingesteld, herstart hierna de Raspberry Pi.

sudo shutdown -h 0

Werking schakelaar testen

Na de herstart, kunnen we onze drukschakelaar gaan testen. Druk op de schakelaar, je zult zien dat de groene led op de Rapsberry Pi 5x zal knipperen. Hierna zal de groene led blijven branden, de shutdown heeft plaatsgevonden en je kunt nu zonder problemen de netstroom verwijderen.