Good to Know Database

Raspberry Pigilt für Raspberry Pi OS Bookworm

Wie nutze ich die GPIO-Pins des Raspberry Pi mit Python?

Die 40-polige Leiste des Raspberry Pi soll eine LED schalten und einen Taster abfragen. Welcher Pin ist welcher, was ist der Unterschied zwischen Pin 11 und GPIO 17, und braucht der Taster einen Widerstand?

Von 3 Min. Lesezeit

Lösung

Kurz: Der Befehl pinout zeigt die Belegung. In Python zählen die GPIO-Nummern (BCM), nicht die Pin-Nummern der Leiste. Mit gpiozero schaltet LED(17) eine LED und Button(27) liest einen Taster, der interne Pull-up ist dabei schon eingeschaltet. Alle Pins arbeiten mit 3,3 V und vertragen keine 5 V.

Pinbelegung anzeigen

pinout

Der Befehl gehört zu gpiozero und zeichnet die Leiste des Modells, auf dem er läuft, mit allen Nummern ins Terminal. Wichtig ist der Unterschied: Pin 11 ist die Position auf der Leiste, GPIO 17 die Nummer im Chip. Python-Bibliotheken erwarten die GPIO-Nummer.

LED schalten

Die LED über einen Vorwiderstand von etwa 330 Ω an GPIO 17 (Pin 11) und das kurze Bein an Masse (Pin 9) anschließen:

from gpiozero import LED
from signal import pause

led = LED(17)
led.blink()
pause()

Taster lesen

Einen Taster zwischen GPIO 27 (Pin 13) und Masse (Pin 14) anschließen, ohne Widerstand:

from gpiozero import Button
from signal import pause

taster = Button(27)
taster.when_pressed = lambda: print("gedrückt")
pause()

Button schaltet den internen Pull-up-Widerstand des Pins ein. Der Pin liegt damit im Ruhezustand auf 3,3 V und wird beim Drücken auf Masse gezogen. Einen externen Widerstand braucht es dafür nicht.

Nachträge

Wie schalte ich einen Pull-down statt Pull-up?

Mit Button(27, pull_up=False). Dann gehört der Taster zwischen den Pin und 3,3 V statt an Masse, und der Pin liegt im Ruhezustand auf 0 V.

Wie viel Strom verträgt ein GPIO-Pin?

Wenig. Ein einzelner Pin liefert sicher einige Milliampere, genug für eine LED mit Vorwiderstand, aber nicht für Motoren, Relais oder Lampen. Solche Lasten schaltet man über einen Transistor, ein Relaismodul mit eigener Versorgung oder einen Motortreiber.

Wie prüfe ich einen Pin ohne Python?

Unter Raspberry Pi OS Bookworm mit pinctrl. pinctrl get 17 zeigt Modus und Pegel, pinctrl set 17 op dh schaltet den Pin als Ausgang auf High. Der ältere Befehl raspi-gpio funktioniert auf dem Pi 5 nicht mehr.

Warum geht RPi.GPIO auf dem Pi 5 nicht?

Der Pi 5 steuert die GPIO-Pins über einen eigenen Baustein, den die ursprüngliche Bibliothek RPi.GPIO nicht kennt. gpiozero nutzt lgpio und läuft auf allen Modellen. Mehr dazu im Thread zum HC-SR04.

Quellen