Stopknop voor Raspberry Pi

      Reacties uitgeschakeld voor Stopknop voor Raspberry Pi

Wat op de Pi ontbreekt, is een knop om het systeem netjes af te sluiten. Zo maak je die.
Het ergste dat je je Raspberry Pi  en met name je sd-kaartje kunt aandoen, is tijdens gebruik klakkeloos de stekker (van de voeding) eruit trekken. Dit zal in de meeste gevallen het bestandssysteem op het sd-kaartje om zeep helpen. En het is bovendien ook niet gezond voor het sd-kaartje zelf.

Shutdown!

Daarom is het altijd het beste om de Pi en het besturingssysteem netjes af te sluiten, via de grafische desktopinterface of met een commando in de terminal/console: sudo shutdown -h now

Heb je een headless Pi (dus zonder monitor of toetsenbord) en is die misschien ook niet via ssh te bereiken, dan kun je een fysieke drukknop aan de Pi bevestigen. Daarmee kun je twee pinnen kortsluiten (een GPIO-pin en een GND-pin). GPIO21 en de GND daartegenover zijn handig, want dat zijn de twee laatste pinnen. Dus die kun je blindelings vinden.

Makkelijkste manier

De makkelijkste manier is om vervolgens een regeltje toe te voegen onderin het bestand /boot/config.txt:

dtoverlay=gpio-shutdown, gpio_pin=3

In het geval van de dtoverlay-entry is GPIO-pin 3 de standaard, omdat je alleen met die pin de Pi niet alleen kunt afsluiten, maar ook weer kunt opstarten.  Maar voor alleen afsluiten werkt GPIO21 net zo goed.

Andere manier

Maak een Python-script dat bij het indrukken van de knop het bash-commando sudo shutdown -h now uitvoert en zorg dat het automatisch wordt opgestart bij het booten van de Pi .

Bijvoorbeeld:

#!/bin/python3
import RPi.GPIO as GPIO
import time
import os

# We gebruiken de Broadcom SOC pinnummers, 
# met interne pullup geactiveerd en pin in reading mode.
GPIO.setmode(GPIO.BCM)
GPIO.setup(21, GPIO.IN, pull_up_down=GPIO.PUD_UP)

# De shutdown-functie
def Shutdown(channel):
    print("Shutting Down")
    time.sleep(5)
    os.system("sudo shutdown -h now")

# Code voor het uitvoeren van de shutdown-functie als knop wordt ingedrukt. 
GPIO.add_event_detect(21, GPIO.FALLING, callback=Shutdown, bouncetime=2000)

while 1:
    time.sleep(1)

Ander voorbeeld:

import RPi.GPIO as GPIO
import os

GPIO.setmode(GPIO.BCM)
GPIO.setup(21, GPIO.IN, pull_up_down=GPIO.PUD_UP)
input = GPIO.input(21)

while True:
    inputValue = GPIO.input(21)
    if (inputValue == False):
        os.system("sudo shutdown -h now")

Nu nog automatiseren

Tot slot moeten we zorgen dat bij het booten de stopknop automatisch op scherp gezet wordt. Voeg daarom de onderstaande @reboot-regel toe aan de crontab van root:

sudo crontab -e
@reboot python3 /home/pi/stopknop.py &