Die GPIO Pins (General Purpose Input Output) bilden die Schnittstelle zwischen dem Raspberry Pi und externen Geräten wie z.B. Sensoren oder Relais. Dafür ist es notwendig Daten auf die einzelnen GPIO Pins zu scheiben oder Daten zu lesen. Der große Teil der Pins kann nur zwei Zustände annehmen. Ein (high) oder Aus (low). Weitere Pins sind z.B. für Anwendungen vorgesehen, die UART oder PWM nutzen. Die Belegung der Pins ist unter https://de.pinout.xyz/ zu sehen. Dieser Beitrag beschätigt sich mit den „einfachen“ Pins, die nur zwei Zustände annehmen können. Für das Lesen und Schreiben dieser Pins git es bei dem Raspberry Pi mehrere Varianten
Der Zugriff auf die GPIOs ist nur Benutzern gestattet, die Mitglied der Gruppe gpio sind. Wenn Sie also mit einem anderen Benutzer als dem Standardbenutzer pi die GPIOs ansteuern wollen, müssen Sie diesen der Gruppe gpio hinzufügen.
sudo usermod -a -G gpio <Benutzername>
Das ist zum Beispiel relevant, wenn Sie die GPIOs über ein PHP Script des Webservers ansteuern wollen. Der Apache Webserver läuft unter dem Benutzer www-data, der per default keine Rechte hat auf die GPIOs zuzugreifen. Hierzu müssen Sie den Benutzer www-data der Gruppe gpio hinzufügen.
sudo usermod -a -G gpio www-data
Pinbelegung
Egal wie man die GPIOs ansprechen will, es besteht immer das gleiche Problem. Es existieren für die Ansteuerung verschiedene Nummernsysteme. Zum einen das BCM-System (Broadcom SOC channel). Es wurde vom Entwickler des Chips, der auf dem Raspberry verbaut ist, entwickelt. Und zum anderen die Wiring Pi Anschlussnummern. Dieses System wurde vom Entwickler der wiringPi Library entworfen. Beides ist nicht identisch und wird gerne mal verwechselt. Welches Nummernsystem man verwendet ist eigentlich egal. Man muss halt immer darauf achten, welches System die Software zu Grunde legt, mit der man die Pins ansteuern will. Die Pinbelegung für beide Systeme findet man auf der Seite von pinout. Alternativ kann man auf der Konsole eines neueren Raspbian auch den Befehl gpio readall eingeben. Man bekommt dann eine tabelarische Übersicht über die GPIO Pins und deren Nummer in beiden Systemen. Bei älteren Raspbian Systemen muss erst noch die wiringPi Bibliothek installiert werden, bevor dieser Befehl zur Verfügung steht.
Bash
Über die Kommandozeile können Sie mit Hilfe des Pseudo-Verzeichnisses /sys/class/gpio/ auf die GPIO-Pins zugreifen.
Als erstes muss man den gewünschten GPIO-Pin „einschalten. Dieser Befehl müssen Sie bei jedem Neustart des Raspberry durchführen.
# Pin für Schreib- und Lesevorgänge registrieren
echo "17" > /sys/class/gpio/export
Als nächstes legt man fest, ob man von dem GPIO-Pin lesen möchte, oder auf dem GPIO-Pin schreiben möchte
# Pin 17 zum schreiben öffnen
echo "out" > /sys/class/gpio/gpio17/direction
# Pin 17 zum lesen öffnen
echo "in" > /sys/class/gpio/gpio17/direction
Nun kann man den Pin auf Ein oder Aus setzen
# Pin 17 einschalten
echo "1" > /sys/class/gpio/gpio17/value
# Sets pin 17 ausschalten
echo "0" > /sys/class/gpio/gpio17/value
Zum lesen des GPIO-Pins wird folgender Befehl ausgeführt. Das Ergebnis ist 1 oder 0.
cat /sys/class/gpio/gpio17/value ... mehr lesen