[Raspberry Pi] Ein und Ausschalter

Von Haus aus bietet der Raspberry Pi keine Möglichkeit für ein einfaches aus beziehungsweise einschalten. Zum einschalten muss der Raspberry Pi nur mit Spannung versorgt werden, zum ausschalten muss er sauber heruntergefahren werden. Möchte man den Pi nun wieder einschalten, muss er von der Spannungsversorgung getrennt und wieder verbunden werden.

Für das wieder einschalten gibt es eine einfache Möglichkeit und zwar müssen hierfür nur die beiden Kontakte neben dem HDMI Anschluss (gekennzeichnet mit P6) verbunden werden. Ich habe die beiden Kontakte mit einem einfachen Taster verbunden und kann nun den Raspberry Pi wieder einschalten. Wenn das Betriebssystem auf dem Raspberry noch nicht herunterfahren ist, würde ich vermeiden den Taster zu betätigen. Durch den Reset wird das Betriebssystem vorher nicht sauber heruntergefahren und könnte im schlimmsten Fall im Anschluss nicht mehr starten.

Reset beim Raspberry Pi

Raspberry Pi und der Ausschalter
Für das Ausschalten benötigt man einen der GPIO Ports, ich nutze im weiteren Verlauf den GPIO 22.
Um den Port als Eingang zu definieren, müssen die folgenden zwei Befehle auf der Kommandozeile ausgeführt werden:
echo 22 > /sys/class/gpio/export
echo in > /sys/class/gpio/gpio22/direction

Über cat /sys/class/gpio/gpio22/value wird der Zustand abgefragt.

Damit der Port den entsprechenden Zustand erreicht, lege ich ihn auf Masse (Zustand 0) oder 3,3 Volt (Zustand 1).
Ich habe den Port 22 mit einen Pullup Widerstand (10 kOhm) an Pin 1 (3,3V) angeschlossen und über einen Kippschalter kann ich den Gpio 22 Port auf Masse legen. Per Cronjob wird der Wert in der Datei /sys/class/gpio/gpio22/value abgefragt und bei einer 0 wird das System heruntergefahren.

shutdown script
#!/bin/bash
i=`cat /sys/class/gpio/gpio22/value`
if [ $i -eq 0 ]
then
/sbin/shutdown -h now
fi

Reset der GPIO Ports nach neustart
Leider gehen nach einem Neustart die Einstellungen für die GPIO Ports verloren. Mit Hilfe eines Scripts, welches in der /etc/rc.local hinterlegt wird, werden die Einstellungen beim starten neu gesetzt.

set_gpio22.sh:
#!/bin/bash
echo 22 > /sys/class/gpio/export
echo in > /sys/class/gpio/gpio22/direction

8 Gedanken zu „[Raspberry Pi] Ein und Ausschalter

  1. Klaus Schwarzkopf

    Hi,
    mir gefällt an dieser Lösung das dauernde pollen durch den cronjob nicht. Kannst du es mal mit inotify probieren? Ich hab leider nicht die Hardware um es selbst zu testen.

    Ungetestet:

    sudo apt-get install inotify-tools


    #!/bin/bash

    FILE="/sys/class/gpio/gpio22/value"

    while true;
    do
    inotifywait -e modify "${FILE}"

    i=`cat ${FILE}`

    if [ $i -eq 0 ]
    then
    /sbin/shutdown -h now

    fi

    done

    Antworten
  2. Oliver Wieland

    hi,

    die Geschichte mit inotify gefällt mir. Ich würde aber nach dem shutdown-Kommando die while-Schleife verlassen, sonst wird bei einem Prellen des Eingangs mehrmals shutdown aufgerufen. Keine Ahnung, was dann passiert. Alternativ kann der Eingang natürlich auch über einen Tiefpass (RC-Glied) extern entprellt werden, was aber wieder aufwändiger wäre.

    Da ich im Moment selbst auf der Suche nach einer schönben Lösung für dieses Problem bin, werde ich das mal so versuchen.

    Gruß
    Oli

    Antworten
  3. Michael

    Hi, danke für die Anleitung. Die rc.local habe ich bereits bearbeitet und damit kann das value eines gpios auch jederzeit über cat etc. abgefragt werden.

    Meine frage ist nun, wo speichere ich das shutdown script hin und wie lege ich den cronjob mit diesem an?

    Danke schonmal!!

    Gruß Micha

    Antworten
    1. hermann Beitragsautor

      Moin Michael,

      ich habe das Script unter /root/cron/ abgelegt.
      Unter dem root Benutzer habe ich folgenden Cronjob angelegt
      */5 * * * * /root/cron/

      Den müsstest du entsprechende anpassen.

      Antworten
      1. Michael

        Hi, danke für die Antwort. Leider funktioniert es noch nicht.
        Habe mittels „vi /root/cron/shutdown.sh“ das shutdown Skript angelegt. Dann unter „crontab -e“ den cronjob „*/5 * * * * sh /root/cron/shutdown.sh“ angelegt.

        Führe ich „sh /root/cron/shutdown.sh“ aus und drücke zeitgleich den Taster, dann fährt der Pi bereits runter. Wie funktioniert die Überwachung des gpio’s?

        Gruß Micha

        Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.