pigpio und Remote GPIO: Raspberry Pi Pins aus der Ferne steuern, Pi 5 und Trixie mit rgpiod

Kein Kommentar Autor: Jürgen (jdo)

Kurz vorweg: pigpio funktioniert nur bis zum Raspberry Pi 4 und als fertiges Paket nur bis Raspberry Pi OS Bookworm. Für den Raspberry Pi 5 und Raspberry Pi OS Trixie nimmst Du rgpiod, den Weg dazu findest Du im letzten Abschnitt.

Eine vielleicht weniger bekannte Funktion beim Raspberry Pi ist, dass Du die GPIO Pins auch von einem anderen Rechner aus steuern kannst. Ich habe im Juni 2021 damit etwas experimentiert und das funktionierte 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 bis Bookworm 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 Python-Bibliothek von 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 benutzte ich einen Raspberry Pi 4 und einen Raspberry Pi 2. Mit dem Pi 4 wollte 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 (2021)

Hier eine kurze Beschreibung, was ich vorhatte.

  • 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, das 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. Die manuelle Headless-Konfiguration mit einer wpa_supplicant.conf auf der Boot-Partition klappt nur bis Bullseye, ab Bookworm nimmst Du für das WLAN den Imager.

Beim Raspberry Pi Imager 1.6 kann man das WLAN direkt konfigurieren
Beim Raspberry Pi Imager 1.6 kann man das WLAN direkt konfigurieren (2021)

Es gibt hier viele Möglichkeiten, die Geräte zu konfigurieren, zum Beispiel eine statische IP-Adresse direkt auf dem Pi. 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

Das Paket gibt es bis Raspberry Pi OS Bookworm. Unter Trixie meldet apt, dass es für pigpio keinen Installationskandidaten gibt. Was Du dann machst, steht weiter unten im Abschnitt zum Raspberry Pi 5 und Trixie.

Ab sofort kannst Du den Daemon starten. Dafür gibt es mehrere Möglichkeiten. Zuerst erlaubst Du den Zugriff übers Netzwerk, und zwar über sudo raspi-config > 3 Interface Options > I8 Remote GPIO (2021 hieß der Punkt noch P8).

Remote GPIO via raspi-config aktivieren
Remote GPIO via raspi-config aktivieren (2021, damals noch Menüpunkt P8)

Wichtig: Damit erlaubst Du Remote GPIO dauerhaft, raspi-config legt dafür eine Zusatzdatei für den Dienst pigpiod an. Den Daemon selbst startet es nur neu, wenn er schon aktiviert ist. Nach einem Neustart läuft er nur, wenn Du ihn per systemctl aktiviert hast.

Damit der Daemon automatisch startet, sofort und nach jedem Neustart, gibst Du ein:

sudo systemctl enable --now pigpiod

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

Ein kurzes Wort zur Sicherheit

Hast Du Remote GPIO in raspi-config erlaubt und startest den Daemon 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 (127.0.0.1) oder von der IP-Adresse 192.168.100.90, also vom Pi 4, steuern kannst.

sudo pigpiod -n 127.0.0.1 -n 192.168.100.90

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.

Ohne die Freigabe in raspi-config startet systemd den Daemon mit der Option -l. Dann nimmt er nur Befehle vom Pi selbst an.

Die Beschränkung auf bestimmte Adressen klappt auch beim Start über systemd. Schalte dafür Remote GPIO in raspi-config wieder aus, sonst überstimmt dessen Zusatzdatei Deine Einstellung. Dann öffnest Du mit sudo systemctl edit pigpiod eine eigene Zusatzdatei und trägst dort ein:

[Service]
ExecStart=
ExecStart=/usr/bin/pigpiod -n 127.0.0.1 -n 192.168.100.90

Mit sudo systemctl restart pigpiod übernimmt der Daemon die Liste.

pigpiod lauscht auf TCP-Port 8888. Gib diesen Port nie im Router frei, die Fernsteuerung gehört ins LAN. Brauchst Du Zugriff von unterwegs, nimm SSH oder ein VPN ins Heimnetz. Ein eigenes, abgeschottetes WLAN für Bastelprojekte stellt zum Beispiel ein Pi mit RaspAP bereit.

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

Beide Pakete gibt es auch unter Trixie. Als Steuerrechner taugt deshalb auch ein aktueller Pi, sogar ein Raspberry Pi 5, denn die Bibliothek schickt nur Befehle übers Netzwerk.

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 anderen 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
  • macht ein 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.value), 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 python3-venv

und danach in einer virtuellen Umgebung:

python3 -m venv ~/gpio-env
~/gpio-env/bin/pip install gpiozero pigpio

Die virtuelle Umgebung braucht es, weil pip seit Debian 12 und Raspberry Pi OS Bookworm keine Pakete mehr ins System-Python installiert (Fehler externally-managed-environment). Dein Programm startest Du dann mit ~/gpio-env/bin/python3. Einfacher geht es unter Debian, Ubuntu und Linux Mint mit den fertigen Paketen python3-gpiozero und python3-pigpio. Unter macOS und Windows installierst Du beides ebenfalls per pip, am besten auch dort in einer virtuellen Umgebung.

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 Rezept Multi-room doorbell im Kapitel 5 Remote GPIO Recipes.

Im selben Kapitel zeigt ein Rezept, wie der LED-Bildschirm eines Sense HAT je nach Helligkeit an einem entfernten Lichtsensor die Farbe wechselt. Die Doku-Seite zu Remote GPIO stammt von 2017 und warnt inzwischen selbst: Auf dem Raspberry Pi 5 und unter neueren Debian-Versionen funktioniert der Weg über pigpio nicht mehr.

Raspberry Pi 5 und Trixie: rgpiod statt pigpio

pigpio spricht die GPIO-Hardware der Broadcom-Chips direkt an. Beim Raspberry Pi 5 hängen die Pins aber an einem eigenen I/O-Chip namens RP1. Das pigpio-Projekt hat schon 2023 gewarnt, dass es auf dem Pi 5 nicht laufen wird, und dabei ist es geblieben. Die letzte Version v79 erschien 2021.

Raspberry Pi OS Trixie erschien im Oktober 2025. Dort fehlt das Paket pigpio, und raspi-config hat keinen Menüpunkt Remote GPIO mehr. Manche bauen pigpio unter Trixie aus dem Quellcode, das ist aber Bastelei ohne Paketpflege. Für den Weg oben bleibt ein Pi 4 mit Bookworm die einfachere Basis. Sichere die SD-Karte, bevor Du so ein System auf Trixie hebst.

Auf dem Pi 5 und unter Trixie nimmst Du für die Fernsteuerung den Daemon rgpiod aus der lg-Bibliothek, die vom selben Autor stammt wie pigpio. Er nutzt die GPIO-Schnittstelle des Linux-Kernels und läuft deshalb auf dem Pi 5 genauso wie auf älteren Modellen. Das Paket liegt in den Quellen von Bookworm und Trixie. Auf dem Pi, dessen Pins Du schalten willst, installierst Du es so:

sudo apt install rgpiod

Ab Werk nimmt der Dienst nur Befehle vom Pi selbst an. Das legt die Zeile DAEMON_OPTS=”-l” in der Datei /etc/default/rgpiod fest. Für den Versuchsaufbau von oben ersetzt Du sie durch die Adresse des steuernden Rechners:

DAEMON_OPTS="-n 192.168.100.90"

Danach aktivierst Du den Dienst und startest ihn neu:

sudo systemctl enable rgpiod
sudo systemctl restart rgpiod

Programme auf dem Pi selbst brauchen den Daemon nicht, gpiozero greift dort direkt über lgpio auf die Pins zu. rgpiod lauscht auf Port 8889, auch der gehört nur ins LAN. Anders als pigpio kennt rgpiod mit der Option -x eine Zugangskontrolle mit Benutzernamen, Passwort und Rechten je Benutzer. Die Vorlagen dafür liegen in /var/lib/rgpiod.

Auf dem steuernden Rechner brauchst Du das Python-Modul rgpio. Unter Raspberry Pi OS installierst Du es mit sudo apt install python3-rgpio, auf anderen Systemen per pip (Paket rgpio) in einer virtuellen Umgebung. gpiozero kann rgpiod nicht ansprechen, für entfernte Pins kennt es nur pigpio. Das Blink-Programm von oben sieht mit rgpio deshalb so aus:

import rgpio
from time import sleep

sbc = rgpio.sbc('192.168.100.80')
h = sbc.gpiochip_open(0)
sbc.gpio_claim_output(h, 17)

while True:
    sbc.gpio_write(h, 17, 1)
    sleep(3)
    sbc.gpio_write(h, 17, 0)
    sleep(3)

Die IP-Adresse ist wie oben die des Pi, dessen Pins Du schaltest. Die 0 bei gpiochip_open steht für /dev/gpiochip0. Dort liegen die Pins der Stiftleiste bei allen Modellen, beim Pi 5 seit Kernel 6.6.45. Ältere Pi-5-Systeme führen die Leiste als gpiochip4.

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.

Aktualisiert am 18.10.2026 von Henry. Fakten geprüft.




 Alle Kommentare als Feed abonnieren

Kommentare sind geschlossen.