Blog der Heimetli Software AG

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:

Schema für die Hardware

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 herunterladen

Das 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