Auto Shutdown

Automatisches Herunterfahren des Raspberry Pi

TT PI verfügt über einen Taster, der für einen Soft Shutdown eingesetzt werden kann. Wird der RPi mit einer Batterie (2S LiPo) betrieben, wird ein Soft Shutdown bei kritischem Ladezustand automatisch ausgelöst.

Funktionsweise

TT PI hält einen Raspberry Pi GPIO Pin solange auf HIGH (3.3V) bis auf den Taster gedrückt wird. Der Status des Pins fällt dann auf GND (0V). Raspberry überwacht den Pin in kurzen Zeitintervallen und löst ein Herunterfahren des Systems per Software aus.

Im Folgenden wird erklärt, wie sich das Ganze mit C++ umsetzen lässt.

Benötigte Komponenten

  • TT PI
  • wiringPi für das Abfragen der GPIO Pins
  • Shutdown Programm

Installation wiringPi

Aktuelles wiringPi Repository klonen. Falls nötig, git mit “apt-get install git” installieren.
git clone git://git.drogon.net/wiringPi
In Programmverzeichnis wechseln
cd wiringPi
Programmbibliothek kompiliren mit
./build
Anschliessend können die Quelldateien wieder gelöscht werden.
cd ..
rm -rf wiringPi
Die Komponente wurde dann erfolgreich Installiert, wenn folgender Befehl ausgeführt werden kann.
gpio readall

Shutdown Programmcode

Das untenstehende Programm in einen Texteditor einfügen und und unter dem Dateinamen “shutdown.cpp” abspeichern.
Z.B.
nano shutdown.cpp

Programmcode:

#include <cstdlib>
#include <wiringPi.h>
#include <stdio.h> 
int keep_on_pin = 4;
int delayms = 1000;
int main (void){
       if (wiringPiSetup() == -1) return 1;
       //init pin
       pinMode(keep_on_pin, INPUT);
       pullUpDnControl(keep_on_pin, PUD_UP);
       //loop
       for (;;){
       	if(digitalRead(keep_on_pin) == 0){
       		system("poweroff");
       		delay(60000);
       	}
       	delay(delayms);
       }
       return 0 ;
}

Nach dem Speichern kann das Programm mit diesem Befehl kompiliert werden.
gcc shutdown.cpp -lwiringPi -o gpioShutdown
Das Programm muss nun ausführbar gemacht werden.
chmod +x gpioShutdown
Damit die Shutdownfunktion auch nach jedem Neustart des RPi aktiviert ist, wird das erstellte Programm in rc.local eingetragen. gpioShutdown wird zudem an einen sinnvollen Ort verschoben.
mv gpioShutdown /opt
sudo nano /etc/rc.local
Nun folgende Zeile vor “exit 0” eintragen und Datei speichern mit Ctrl-X, Y, Enter
/opt/gpioShutdown &
Soft Shutdown ist nun nach einem Neustart des RPi aktiv.