Programme auf dem Raspberry PI mit einem Taster (oder Schalter) starten
Warnung: Dieser Post dokumentiert, wie der Aufbau bei mir funktioniert hat. Wenn Sie Ihren Raspberry beim Nachbau dieser Anleitung ruinieren, lehne ich jede Verantwortung ab.
Der folgende Code wurde unter Raspbian entwickelt und getestet.
Die Hardware
Die Schaltung hat folgenden Aufbau:
Der Widerstand ist absolut unkritisch. Er sorgt bloss dafür dass der Eingang auch bei offenem Schalter ein definiertes Potential hat.
Das Script
Um einen Taster einzulesen ist auch ein Shell-Script noch schnell genug. Zudem war es einfach zu schreiben und zu testen:
#!/bin/bash
# Das Pin als Eingang definieren
echo "4" > /sys/class/gpio/export
echo "in" > /sys/class/gpio/gpio4/direction
# Den Zustand des Eingangs lesen
previous=$(cat /sys/class/gpio/gpio4/value)
# Endlose Schleife
while true
do
# Den Zustand des Eingangs lesen
pin=$(cat /sys/class/gpio/gpio4/value)
# Wenn der Eingang von 0 auf 1 gewechselt hat
if [ $pin -gt $previous ]
then
# Das Programm starten
echo "Hier das Programm starten"
else
# Eine halbe Sekunde schlafen, damit der Prozessor nicht heissläuft
sleep 0.5
fi
# Der aktuelle Wert wird der alte Wert für den nächsten Durchlauf
previous=$pin
done
Wenn der Schalter stark prellt und das Programm nur kurz läuft, wird es unter Umständen mehrfach gestartet. Dem hilft ein sleep nach dem Programmstart ab.
Das Script herunterladenDas Script muss natürlich ausführbar sein. Das machen Sie mit dem Befehl chmod 755 trigger auf der Kommandozeile oder mit Ihrem Lieblings-Filemanager.
Das Script muss mit root-Rechten laufen. Auf der Kommandozeile kann es so gestartet werden:
sudo ./trigger
Autostart
Der Autostart erfolgt über /etc/rc.local.
In dieses File vor dem exit 0 folgende Zeile einsetzen:
/home/pi/trigger &
Mehrere Eingänge?
Immer wieder kam der Wunsch nach mehreren Eingaengen auf. Das habe ich in einem weiteren Post realisiert: Sound-Files mit GPIOs abspielen