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 &