pigpio – Remote GPIO – Raspberry Pi Pins aus der Ferne steuern

Kein Kommentar Autor: Jürgen (jdo)

Eine vielleicht weniger bekannte Funktion beim Raspberry Pi ist, dass Du die GPIO Pins auch von einem anderen Rechner aus steuern kannst. Ich habe in den letzten paar Tagen damit etwas experimentiert und das funktioniert wunderbar. Ich möchte Dir hier kurz zeigen, wie das funktioniert und was dafür notwendig ist. Das ist einfacher als Du denkst, da Raspberry Pi OS alle Funktionen zugänglich macht, um Deine GPIO Pins aus der Ferne zu steuern.

Der entfernte Rechner, von dem Du die GPIO Pins ansprichst, muss dabei kein Raspberry Pi sein. Die Komponente pigpio gibt es auch für andere Linux-Distributionen, macOS und Windows. Ich gehe später darauf ein. Für den Moment machen wir uns die Geschichte etwas einfacher und benutzen zwei Raspberry Pis.

Aufbau des Versuchs

Beide Rechner müssen sich im gleichen Netzwerk befinden oder über das Netzwerk miteinander kommunizieren können. Für mein Experiment benutze ich einen Raspberry Pi 4 und einen Raspberry Pi 2. Mit dem Pi 4 möchte ich die GPIO Pins des Pi 2 steuern.

Mittels pigpio / Remote GPIO will ich die Pins des Pi 2 (links) mit dem Pi 4 (rechts) steuern

Mittels pigpio / Remote GPIO will ich die Pins des Pi 2 (links) mit dem Pi 4 (rechts) steuern

Hier eine kurze Beschreibung, was ich vorhabe.

  • Raspberry Pi 2 und 4 mit Raspberry Pi OS Lite – ich brauche keine grafische Oberfläche für das Experiment
  • pigpio installiert und aktiviert
  • Fixe IP-Adressen – macht das Leben einfacher
  • Ein ganz kurzes Programm, um die GPIO Pins des Pi 2 aus der Ferne zu steuern

Die fixen IP-Adressen lasse ich im DHCP-Server vergeben. Das ist viel leichter, als die WLAN-Karten der beiden Pis zu konfigurieren. Der Pi 2 hat keine WLAN-Karte, aber wie Du im Screenshot oben siehst, ist er mit einer USB-WLAN-Karte bestückt. Klar, ich könnte auch ein Kabel benutzen, aber WLAN ist bequemer. Raspberry Pi OS kannst Du mit dem Imager (ab 1.6) gleich vorkonfigurieren oder Du nimmst die Headless-Konfiguration manuell vor.

Beim Raspberry Pi Imager 1.6 kann man das WLAN direkt konfigurieren

Beim Raspberry Pi Imager 1.6 kann man das WLAN direkt konfigurieren

Es gibt hier viele Möglichkeiten, die Geräte zu konfigurieren. Auf jeden Fall hat mein Pi 2 die IP-Adresse 192.168.100.80 und der Pi 4 die 192.168.100.90 (wobei das nicht wichtig ist – bei mir läuft das Gerät headless und ich greife via SSH zu).

pigpio Daemon auf dem Pi 2 installieren

Bei der Desktop-Version von Raspberry Pi OS sollte pigpio bereits vorinstalliert sein. Bei Lite musst Du die Software selbst installieren. Das ist aber nicht schwer und geht so:

sudo apt install pigpio

Ab sofort kannst Du den Daemon starten. Dafür gibt es mehrere Möglichkeiten. Eine Option ist über sudo raspi-config > 3 Interface Options > P8 Remote GPIO

Remote GPIO via raspi-config aktivieren

Remote GPIO via raspi-config aktivieren

Wichtig: Damit aktivierst Du Remote GPIO nur für die laufende Sitzung. Nach dem Neustart ist es nicht mehr möglich, die Pins aus der Ferne zu steuern, bis Du den Daemon wieder gestartet hast.

Es ist auch möglich, den Daemon automatisch zu starten und das funktioniert so:

sudo systemctl enable pigpiod

Allerdings gibt es hier einen kleinen Haken und wir müssen einen kurzen Abstecher zum Thema Sicherheit machen.

Ein kurzes Wort zur Sicherheit

Aktivierst Du den Daemon automatisch via systemctl, ist die Fernsteuerung komplett aktiviert. Jeder im gleichen Netzwerk kann die GPIO Pins steuern. Bist Du in einem abgesicherten oder abgeschirmten Netzwerk, ist das weniger ein Problem.

Startest Du den Daemon manuell, kannst Du angeben, dass der Pi nur Befehle von einer oder mehreren bestimmten IP-Adressen annimmt. Der nachfolgende Befehl besagt, dass Du die GPIO Pins über pigpio nur über das lokale Gerät oder von der IP-Adresse 192.168.100.80 steuern kannst.

sudo pigpiod -n localhost -n 192.168.100.80

Leider ist es nicht möglich, hier ein Passwort zu benutzen. Die Sicherheits-Optionen sind zugegeben etwas übersichtlich, aber das lässt sich gerade nicht ändern.

pigpio-Bibliothek auf dem Pi 4 installieren

Auf dem Pi 4 brauchst Du die pigpio-Bibliothek. Es kann sein, dass sie per Standard installiert ist. Eine kurze Überprüfung kann nicht schaden. Sind die Komponenten bereits installiert, informiert Dich das System.

sudo apt install python3-gpiozero python3-pigpio

Das war es auch schon. Mit einem kleinen Programm können wir nun die GPIO Pins des Raspberry Pi 2 steuern. Du könntest das über Umgebungsvariablen machen, aber wenn Du einen andere Pi mit einem Pi steuerst, musst Du auch die Pin Factory angeben. Ich finde es angenehmer, das direkt im Programm zu machen – das ist einfach übersichtlicher. In meinem Fall wäre das:

from gpiozero import LED
from gpiozero.pins.pigpio import PiGPIOFactory
from time import sleep

factory = PiGPIOFactory(host='192.168.100.80')
led = LED(17, pin_factory=factory)

while True:
    led.on()
    sleep(3)
    led.off()
    sleep(3)

Starte ich dieses Programm auf meinem Raspberry Pi 4, schaltet sich GPIO17 (Pin 11) auf dem entfernten Pi an und aus – mit einer Wartezeit von 3 Sekunden dazwischen.

Ich finde das ziemlich praktisch. Du könntest Dir damit etwa eine Türklingel basteln und

  • wenn einer den Knopf drückt
  • mach einer anderer Raspberry Pi etwas (ein Buzzer heult los, es leuchtet eine LED, ein Relais wird geschaltet …)

oder:

  • Der zu steuernde Raspberry Pi überwacht einen GPIO Pin
  • Wird der Pin aktiv (led.is_lit oder led.active), also geschaltet, führt er einen bestimmten Befehl aus

Ein passender Anwendungsfall bleibt Deiner Kreativität überlassen. Du kannst übrigens mehrere Pin Factories definieren und damit verschiedene Pis von einer Zentrale aus steuern.

Andere Systeme zur Steuerung nutzen

Als Gehirn des Konstrukts kannst Du auch andere Systeme nutzen, auf denen Python läuft. Dabei ist es egal, ob Du Linux, macOS oder Windows einsetzt. Die Komponenten gpiozero und pigpio lassen sich via pip installieren. Unter Linux funktioniert das zum Beispiel so:

sudo apt install python3-pip

und danach:

sudo apt install python3-pip

Wie die meisten Sachen von der Raspberry Pi Foundation ist diese Funktion hervorragend dokumentiert und Du findest die Doku hier. Du findest in der Dokumentation auch einige Beispiel-Rezepte. Der Anwendungsfall mit der Türklingel wäre etwa das erste Rezept im Kapitel 5 Remote GPIO Recipes.

Nette Pi-Konstellation

Suchst Du ein VPN für den Raspberry Pi? NordVPN* bietet einen Client, der mit Raspberry Pi OS (32-Bit / 64-Bit) und Ubuntu für Raspberry Pi (64-Bit) funktioniert.




 Alle Kommentare als Feed abonnieren

Kommentare sind geschlossen.