RasPi per Taster hoch- und herunterfahren

  • Da immer mal wieder die Frage nach der Möglichkeit gestellt wird, einen RasPi per Taster hoch- und herunter zu fahren, habe ich überlegt wie man dies realisieren kann, ohne auf den "Bug" des RasPi angewiesen zu sein, der in diesem sehr ähnlichen Projekt genutzt wird. Auch sollte es keine Probleme geben, wenn der Taster zu kurz oder zu lang gedrückt wird.


    Die Lösung sollte möglichst einfach zu benutzen, aber auch anwendungssicher sein.

    Hierzu habe ich dieses Projekt mit der Schaltung aus Fig. 5 kombiniert und auf eine gemeinsame Platine gesetzt. Der Mikro-USB-Stecker, der eigentlich zur Spannungsversorgung des RasPi dient, wird in die Buchse auf der Platine gesteckt. In die zweite Buchse (USB A) auf der Platine wird ein zweites USB-Kabel gesteckt, dass dann zur Spannungsversorgung des RasPi führt. Die Platine wird also nur "dazwischen" geschaltet. Die Platine ist etwa 20 x 40mm groß.


    Angeschlossen werden müssen vom RasPi an die Platine
    - ein GPIO
    - 3,3V (wird für den Pull-up Widerstand benötigt)
    - die beiden Anschlüsse "Eckig" und "Rund" vom RUN-Anschluss des RasPi


    Außerdem muss ein beliebiger Taster angeschlossen werden.


    Wird der Taster gedrückt, fährt der im Standby befindliche RasPi hoch. Wird er nochmals (kurz) gedrückt, passiert nichts. Er muss für rund 4 Sekunden (die Zeit kann fast beliebig über die Änderung von Bauteilewerten geändert werden) gehalten werden, damit der RasPi das Signal zum Shutdown bekommt. Dies verhindert ein versehentliches Herunterfahren weil man den Taster ungewollt drückt.


    Auf dem RasPi muss dazu ein Skript laufen, dass den GPIO, der mit der Platine verbunden ist, überwacht. Ist der GPIO LOW, dann läuft der RasPi, wechselt der GPIO von LOW zu HIGH, soll der RasPi herunter fahren.


    Man könnte dazu dieses Script von meigrafd nehmen. Es überwacht GPIO25. An dieser Stelle ein großes Dankeschön an meigrafd, der mir Softwareanalphabeten in mühevoller Kleinarbeit erklärt hat, wie das Script zu installieren ist :thumbs1:



    Das angehangene Script muss entpackt werden und kann dann beispielsweise nach /home/pi kopiert werden. Damit es bei jedem Start des RasPi ausgeführt wird, ergänzt man die Datei rc.local um den entsprechenden Eintrag durch folgenden Befehl: sudo nano /etc/rc.local
    Nun fügt man vor der Zeile exit 0 dies ein:
    /usr/bin/python /home/pi/shutdown &


    Somit sollte bei jedem Start das Script ausgeführt werden. Gut erläutert ist das hier.


    Mit dieser Lösung wird kein Bug des RasPi ausgenutzt. Insofern sollte die Schaltung mit jedem RasPi (und auch anderen Geräten) funktionieren. Auch ist es im Gegensatz zum oben verlinkten Projekt für den Start egal, ob ich den Taster beispielsweise 0,5 oder 1,3 Sekunden drücke.


    Wer Interesse an der Platine hat, darf sich gerne bei mir melden, da ich wieder einmal mehr Platinen als eigenen Bedarf habe.