Du hast deinen alten Raspberry-Pi-Code auf den Pi 5 übertragen und plötzlich kommt eine kryptische Fehlermeldung? Dann bist du nicht allein. Das beliebte Python-Paket RPi.GPIO funktioniert auf dem Raspberry Pi 5 nicht mehr – und das ist kein Bug, sondern eine architektonische Entscheidung. In diesem Artikel erkläre ich dir warum, und zeige dir die einfachsten Wege, deinen Code wieder zum Laufen zu bringen.
Das Problem: Warum läuft RPi.GPIO nicht auf dem Pi 5?
Wenn du RPi.GPIO auf einem Raspberry Pi 5 verwendest, siehst du etwa diesen Fehler:
Der Grund steckt im Inneren des Pi 5: Raspberry Pi hat erstmals einen eigenen I/O-Chip namens RP1 entwickelt. Dieser Chip übernimmt alle externen Schnittstellen des Pi 5 – also die GPIO-Pins, USB-Ports, Ethernet, Kamera und Display-Ports. Er ist über einen PCIe-2.0-x4-Bus an den Hauptprozessor BCM2712 angebunden.
RPi.GPIO setzt auf direkten Speicherzugriff (/dev/mem) auf die Hardware-Register des Prozessors. Auf dem Pi 5 liegen die GPIO-Register aber nicht mehr beim Hauptprozessor, sondern beim RP1 – deshalb greift RPi.GPIO ins Leere.
Neuere Bibliotheken nutzen stattdessen das Linux-Kernel-Interface /dev/gpiochip, was auf allen Raspberry-Pi-Modellen funktioniert. Und genau das ist der Weg nach vorne.
Die drei Alternativen im Überblick
| Bibliothek | Pi 5 kompatibel | Drop-in-Replacement | Empfehlung |
|---|---|---|---|
| RPi.GPIO | ❌ Nein | – | Nicht mehr verwenden |
| rpi-lgpio | ✅ Ja | ✅ Ja | Bestehenden Code einfach retten |
| gpiozero | ✅ Ja | ❌ Nein | Neue Projekte, einfachste API |
| lgpio | ✅ Ja | ❌ Nein | Maximale Kontrolle, Low-Level |
Option 1: rpi-lgpio – der einfachste Weg für bestehenden Code
rpi-lgpio ist ein Drop-in-Replacement für RPi.GPIO: du tauschst nur das installierte Paket aus, dein Python-Code bleibt unverändert. Das Paket stellt dieselbe API wie RPi.GPIO bereit, verwendet im Hintergrund aber das moderne lgpio-Interface.
Installation auf Raspberry Pi OS Bookworm
Seit Raspberry Pi OS Bookworm müssen Python-Pakete in einer virtuellen Umgebung installiert werden (Stichwort PEP 668). Ohne venv verweigert pip die Installation. So geht es:
|
1 2 3 4 5 6 7 8 9 10 11 |
# Altes RPi.GPIO entfernen sudo apt remove python3-rpi.gpio # Virtuelle Umgebung anlegen (einmalig) python3 -m venv ~/gpio-env # Umgebung aktivieren source ~/gpio-env/bin/activate # rpi-lgpio installieren pip install rpi-lgpio |
Die virtuelle Umgebung musst du bei jedem neuen Terminal-Start erneut aktivieren (source ~/gpio-env/bin/activate), oder du trägst die Aktivierung in dein Startskript ein.
Wichtig: rpi-lgpio und RPi.GPIO können nicht gleichzeitig in derselben Python-Umgebung installiert sein.
Code-Beispiel: Vorher / Nachher
Dein bisheriger Code bleibt exakt gleich – du musst nichts ändern:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) GPIO.setup(18, GPIO.OUT) try: while True: GPIO.output(18, GPIO.HIGH) time.sleep(1) GPIO.output(18, GPIO.LOW) time.sleep(1) except KeyboardInterrupt: GPIO.cleanup() |
Genau derselbe Code läuft auf dem Pi 5, sobald rpi-lgpio installiert ist. Kein einziger Import muss geändert werden.
Option 2: gpiozero – die empfohlene Lösung für neue Projekte
gpiozero ist die offizielle Empfehlung der Raspberry Pi Foundation für neue Projekte. Die Bibliothek ist auf Raspberry Pi OS vorinstalliert, funktioniert auf allen Pi-Modellen (1 bis 5) und hat eine deutlich einfachere API als RPi.GPIO.
Für den Pi 5 unter aktuellen Kernel-Versionen musst du explizit den lgpio-Pin-Factory angeben:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
from gpiozero import LED, Button from gpiozero.pins.lgpio import LGPIOFactory from gpiozero import Device import time # Pin-Factory für Raspberry Pi 5 setzen Device.pin_factory = LGPIOFactory(chip=4) led = LED(18) button = Button(17) # LED blinken lassen try: while True: led.on() time.sleep(1) led.off() time.sleep(1) except KeyboardInterrupt: pass |
Der Wert chip=4 ist wichtig: Beim Pi 5 ist der GPIO-Controller (RP1) am /dev/gpiochip4 erreichbar – bei älteren Pi-Modellen ist es chip=0.
Noch einfacher geht es über eine Umgebungsvariable, ohne den Code anzupassen:
|
1 |
GPIOZERO_PIN_FACTORY=lgpio python3 mein_script.py |
Option 3: lgpio direkt – für erfahrene Nutzer
Wer maximale Kontrolle möchte, kann die lgpio-Bibliothek direkt verwenden. Das ist der Low-Level-Weg, erfordert aber mehr Code:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import lgpio import time LED_PIN = 18 # GPIO-Chip öffnen (chip=4 für Raspberry Pi 5) h = lgpio.gpiochip_open(4) # Pin als Ausgang konfigurieren lgpio.gpio_claim_output(h, LED_PIN) try: while True: lgpio.gpio_write(h, LED_PIN, 1) # HIGH time.sleep(1) lgpio.gpio_write(h, LED_PIN, 0) # LOW time.sleep(1) except KeyboardInterrupt: lgpio.gpio_write(h, LED_PIN, 0) lgpio.gpiochip_close(h) |
lgpio ist auf Raspberry Pi OS Bookworm bereits vorinstalliert, kann aber auch über apt nachinstalliert werden:
|
1 |
sudo apt install python3-lgpio |
Welche Bibliothek soll ich nehmen?
- Bestehender RPi.GPIO-Code → rpi-lgpio installieren, fertig. Kein Code ändern.
- Neues Projekt starten → gpiozero verwenden. Einfachste API, vorinstalliert, von Raspberry Pi Foundation empfohlen.
- Maximale Kontrolle / Performance → lgpio direkt nutzen.
Für die meisten Maker-Projekte ist gpiozero die beste Wahl: weniger Code, lesbarerer Code, und du musst dir keine Gedanken mehr über GPIO.cleanup() oder Chip-Nummern machen.
Fazit
Der Raspberry Pi 5 bringt durch den neuen RP1-I/O-Chip eine wichtige Änderung mit, die bestehenden GPIO-Code brechen kann. Die gute Nachricht: die Migration ist in den meisten Fällen auf wenige Minuten beschränkt. Mit rpi-lgpio läuft alter RPi.GPIO-Code ohne eine einzige Code-Änderung weiter. Für neue Projekte empfehle ich den Umstieg auf gpiozero – die API ist deutlich angenehmer und zukunftssicherer.
Welche GPIO-Pins der Pi 5 hat und was sie können, zeigt dir unser interaktives GPIO-Pinout-Tool.
