Raspberry Pi: Der ultimative Guide zum GPIO Pin-Layout und praktische Anwendungen
Raspberry Pi: Der ultimative Guide zum GPIO Pin-Layout und praktische Anwendungen
Der Raspberry Pi hat sich seit seiner Einführung 2012 zu einer der wichtigsten Plattformen für Maker, Entwickler und Hobby-Elektroniker entwickelt. Das Herzstück für Hardware-Projekte bildet dabei der 40-Pin GPIO-Header, der eine direkte Schnittstelle zwischen Software und physischer Welt ermöglicht.
Was ist der Raspberry Pi?
Der Raspberry Pi ist ein kreditkartengroßer Einplatinencomputer, der ursprünglich für Bildungszwecke entwickelt wurde. Mit seinem günstigen Preis und der enormen Flexibilität hat er sich schnell in verschiedensten Bereichen etabliert - von der Heimautomatisierung über Robotik bis hin zu industriellen Anwendungen.
Der GPIO-Header: Deine Schnittstelle zur Hardware-Welt
GPIO steht für “General Purpose Input/Output” und bezeichnet die programmierbaren Pins des Raspberry Pi. Seit dem Raspberry Pi Model B+ verfügen alle Modelle über einen 40-Pin-Header, der verschiedene Funktionen bietet:
- Digitale Ein- und Ausgänge
- PWM-Signale (Pulsweitenmodulation)
- I2C-Kommunikation
- SPI-Schnittstelle
- UART-Serielle Kommunikation
- Stromversorgung (3.3V und 5V)
Das komplette Pin-Layout
Hier findest du die vollständige Übersicht aller 40 Pins:
Raspberry Pi GPIO Pin-Layout
3.3V Power [01] • • [02] 5V Power
GPIO 2 [03] • • [04] 5V Power
GPIO 3 [05] • • [06] Ground
GPIO 4 [07] • • [08] GPIO 14 (UART TX)
Ground [09] • • [10] GPIO 15 (UART RX)
GPIO 17 [11] • • [12] GPIO 18 (PWM)
GPIO 27 [13] • • [14] Ground
GPIO 22 [15] • • [16] GPIO 23
3.3V Power [17] • • [18] GPIO 24
GPIO 10 [19] • • [20] Ground
GPIO 9 [21] • • [22] GPIO 25
GPIO 11 [23] • • [24] GPIO 8
Ground [25] • • [26] GPIO 7
GPIO 0 [27] • • [28] GPIO 1
GPIO 5 [29] • • [30] Ground
GPIO 6 [31] • • [32] GPIO 12 (PWM)
GPIO 13 [33] • • [34] Ground
GPIO 19 [35] • • [36] GPIO 16
GPIO 26 [37] • • [38] GPIO 20
Ground [39] • • [40] GPIO 21
Pin-Nummerierung verstehen
Es gibt zwei Nummerierungssysteme für die GPIO-Pins:
- Physical/Board: Die physische Pin-Nummer auf dem Header (1-40)
- BCM (Broadcom): Die GPIO-Nummer des Broadcom-Chips
In Python kannst du beide Systeme verwenden:
import RPi.GPIO as GPIO
# Board-Nummerierung verwenden
GPIO.setmode(GPIO.BOARD)
# BCM-Nummerierung verwenden (empfohlen)
GPIO.setmode(GPIO.BCM)
Wichtige Pin-Gruppen und ihre Funktionen
Stromversorgung
- Pin 1, 17: 3.3V Ausgänge (max. 50mA gesamt)
- Pin 2, 4: 5V Ausgänge (abhängig vom Netzteil)
- Pin 6, 9, 14, 20, 25, 30, 34, 39: Ground (Masse)
Spezielle Kommunikationsprotokolle
I2C-Schnittstelle:
- GPIO 2 (Pin 3): SDA (Daten)
- GPIO 3 (Pin 5): SCL (Clock)
SPI-Schnittstelle:
- GPIO 10 (Pin 19): MOSI
- GPIO 9 (Pin 21): MISO
- GPIO 11 (Pin 23): SCLK
- GPIO 8 (Pin 24): CE0
- GPIO 7 (Pin 26): CE1
UART:
- GPIO 14 (Pin 8): TX
- GPIO 15 (Pin 10): RX
Praktisches Beispiel: LED-Steuerung
Lass uns eine LED mit dem Raspberry Pi steuern:
import RPi.GPIO as GPIO
import time
# GPIO-Modus setzen
GPIO.setmode(GPIO.BCM)
# Pin 17 als Ausgang definieren
LED_PIN = 17
GPIO.setup(LED_PIN, GPIO.OUT)
try:
# LED 5 mal blinken lassen
for i in range(5):
GPIO.output(LED_PIN, GPIO.HIGH) # LED an
time.sleep(0.5)
GPIO.output(LED_PIN, GPIO.LOW) # LED aus
time.sleep(0.5)
except KeyboardInterrupt:
print("Programm beendet")
finally:
# GPIO sauber aufräumen
GPIO.cleanup()
Schaltungsaufbau:
- Verbinde die Anode (langes Bein) der LED über einen 330Ω Widerstand mit GPIO 17 (Pin 11)
- Verbinde die Kathode (kurzes Bein) mit Ground (Pin 9)
Erweiterte Anwendung: Temperatur-Sensor mit I2C
Hier ein Beispiel mit einem BME280 Temperatur-/Luftfeuchtigkeitssensor:
import smbus2
import bme280
import time
# I2C-Adresse des BME280
port = 1
address = 0x76
# I2C-Bus initialisieren
bus = smbus2.SMBus(port)
# BME280 kalibrieren
calibration_params = bme280.load_calibration_params(bus, address)
while True:
# Messwerte auslesen
data = bme280.sample(bus, address, calibration_params)
print(f"Temperatur: {data.temperature:.2f}°C")
print(f"Luftfeuchtigkeit: {data.humidity:.2f}%")
print(f"Luftdruck: {data.pressure:.2f} hPa")
print("-" * 30)
time.sleep(2)
Sicherheitshinweise für GPIO-Projekte
- Spannung beachten: GPIO-Pins arbeiten mit 3.3V Logik. 5V können den Pi beschädigen!
- Strombegrenzung: Einzelne Pins liefern max. 16mA, alle zusammen max. 50mA
- Kurzschlüsse vermeiden: Verbinde niemals Ausgänge direkt mit Ground
- Pull-Up/Pull-Down: Nutze interne oder externe Widerstände für stabile Eingänge
- Statische Entladung: Erde dich vor der Arbeit mit dem Pi
PWM für Servo-Steuerung
PWM (Pulsweitenmodulation) ermöglicht die Steuerung von Servomotoren:
import RPi.GPIO as GPIO
import time
# Servo an GPIO 18 (Pin 12)
SERVO_PIN = 18
GPIO.setmode(GPIO.BCM)
GPIO.setup(SERVO_PIN, GPIO.OUT)
# PWM mit 50Hz erstellen
pwm = GPIO.PWM(SERVO_PIN, 50)
pwm.start(0)
def set_servo_angle(angle):
"""Setzt den Servo auf einen bestimmten Winkel (0-180°)"""
duty_cycle = (angle / 18) + 2
pwm.ChangeDutyCycle(duty_cycle)
time.sleep(0.3)
pwm.ChangeDutyCycle(0) # Verhindert Zittern
try:
# Servo von 0° bis 180° und zurück bewegen
for angle in range(0, 181, 30):
print(f"Winkel: {angle}°")
set_servo_angle(angle)
time.sleep(1)
for angle in range(180, -1, -30):
print(f"Winkel: {angle}°")
set_servo_angle(angle)
time.sleep(1)
except KeyboardInterrupt:
pass
finally:
pwm.stop()
GPIO.cleanup()
Best Practices für GPIO-Programmierung
1. Immer aufräumen
try:
# Dein Code hier
pass
finally:
GPIO.cleanup()
2. Fehlerbehandlung implementieren
try:
GPIO.setup(17, GPIO.OUT)
except Exception as e:
print(f"Fehler beim GPIO-Setup: {e}")
3. Dokumentiere Pin-Belegungen
Erstelle eine Konfigurationsdatei für deine Projekte:
# config.py
PINS = {
'LED_RED': 17,
'LED_GREEN': 27,
'BUTTON': 22,
'SERVO': 18
}
Nützliche Tools und Bibliotheken
- RPi.GPIO: Die Standard-Bibliothek für GPIO-Zugriff
- gpiozero: Eine benutzerfreundlichere Alternative
- pigpio: Für zeitkritische Anwendungen
- WiringPi: C-Bibliothek mit Python-Bindings
- pinout: Kommandozeilen-Tool für Pin-Übersicht
Fazit und Ausblick
Der GPIO-Header macht den Raspberry Pi zu einem unglaublich vielseitigen Werkzeug für Hardware-Projekte. Von einfachen LED-Schaltungen bis zu komplexen Robotern - die Möglichkeiten sind nahezu unbegrenzt.
Mit dem Verständnis des Pin-Layouts und der verschiedenen Kommunikationsprotokolle kannst du:
- Sensoren auslesen und Aktoren steuern
- Mit anderen Mikrocontrollern kommunizieren
- Eigene HATs (Hardware Attached on Top) entwickeln
- IoT-Projekte realisieren
Der nächste Schritt? Such dir ein Projekt aus und leg los! Die Raspberry Pi Community ist riesig und hilfsbereit - du findest für fast jede Herausforderung Unterstützung und Inspiration.
Tipp: Beginne mit einfachen Projekten und steigere die Komplexität schrittweise. Ein Breadboard und ein Starter-Kit mit verschiedenen Komponenten sind eine gute Investition für den Einstieg.