Raspberry Pi Zero 2 W - LED Ansteuerung über Transistor

Meine Home Automation mit openHAB 5 soll mit einem Control Panel erweitert werden. LEDs zeigen dann auf einen Blick, ob Fenster und Türen geschlossen sind, die Garage geöffnet/geschlossen ist und weitere Funktionen. In den Grundlagen ist die Ansteuerung einer LED bereits mit technischen Details und ein paar Zeilen Python Code beschrieben. Das Problem: die GPIO Ports dürfen nicht überlastet werden! Jeder GPIO Port darf nur mit 16 mA betrieben werden, alle GPIO Ports in Summe mit 50 mA. Empfohlen wird eine Belastung mit 3 bis 5 mA pro Port. Um das zu realisieren, muss vor die LED ein Schalttransistor gesetzt werden.

Für den Raspberry Pi Zero 2 W (bzw. 2 WH mit eingelöteter Stiftleiste) erstellt man mit dem Raspberry Pi Imager eine microSD Karte mit einem für den Zero 2 passenden Betriebssystem ohne Desktop Umgebung. Ich nutze noch Debian Bookworm, auch wenn aktuell (Mai 2026) Debian Trixie verfügbar ist. Bei der Konfiguration ist es sinnvoll, die WLAN Zugangsdaten vom Heimnetzwerk und einen Benutzer zu hinterlegen. Ist die microSD Karte erfolgreich beschrieben, wird diese in den Zero 2 eingesetzt und der Minicomputer über ein USB Kabel mit Spannung versorgt. Eine blinkende LED zeigt den Bootvorgang an. Ist dieser abgeschlossen, leuchtet die LED grün. Wenn man sich den Anschluss eines HDMI Monitors und einer USB Tastatur sparen möchte, greift man über das lokale WLAN Netzwerk und einem geeigneten SSH Tool (Empfehlung: PuTTY) auf den Zero 2 zu. Die IP Adresse liest man am einfachsten am Internet Router aus oder nutzt einen IP Scanner.

Es erfolgt die Anmeldung mit dem bei der Vorbereitung der microSD Karte angegebenen Benutzer. Eine erfolgreiche Anmeldung zeigt in der ersten Zeile die Betriebssystem Version an:

Linux ZeroW 6.12.75+rpt-rpi-v7 #1 SMP Raspbian 1:6.12.75-1+rpt1~bookworm (2026-03-11) armv7l

... gefolgt von ein paar Informationen. In meiner Umgebung besitzt der Mikrocontroller den Namen ZeroW.

Die Schaltung mit dem Transistor und der LED sieht folgendermaßen aus:

LED mit Schalttransistor


Versuchsaufbau


Raspberry Pi Zero 2 WH Versuchsaufbau mit Transistor und LED

Links der Zero 2 WH, der über ein Standard micro USB Kabel mit 5 Volt Spannung versorgt wird. Das schwarze Kabel führt von Pin 39 GND (Ground, Masse) zur gemeinsamen GND Leiste im Versuchsaufbau. Das rote Kabel führt vom GPIO Port 23 zum Vorwiderstand R2. Der Vorwiderstand R2 wird mit der Basis B des NPN Transistors verbunden. Im TO-92 Gehäuse ist das der mittlere Anschluss. Der Emitter E wird mit dem weißen Kabel zum gemeinsamen Ground geführt und der Kollektor C mit dem grünen Kabel an den Widerstand R1. Die rote LED wird zwischen dem Widerstand R1 und der Spannungsversorgung 5 Volt angeschlossen. Hinweis: der längere Anschluss bei einer LED geht an Plus!

Das T0-92 Transistor Gehäuse von unten gesehen:

T0-92 Transistor Gehäuse von unten gesehen

Der GPIO Port 23 wurde beliebig gewählt!

Der Zero 2 WH zusammen mit der GPIO Leiste:

Raspberry Pi Zero 2 WH beschriftet

Jetzt fehlen noch ein paar Zeilen Python Code, um die LED ein- und wieder auszuschalten. Den folgenden Code kann mit einem Editor erstellen und auf dem Raspberry Pi abspeichern. Schneller und einfacher geht es mit der Eingabe der Programmzeilen direkt im Python Interpreter. Wie oben beschrieben stellt man mit dem SSH Client zum Zero 2 eine Verbindung her und gibt dann den Befehl python ein.

Python Aufruf

Anschließend gibt man jede der folgenden Zeilen ein und bestätigt diese jeweils mit der [Enter]-Taste:

import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
LED=23
GPIO.setup(LED,GPIO.OUT)
GPIO.output(LED,True)

LED wieder ausschalten:

GPIO.output(LED,False)

Der folgende Befehl setzt alle Ports auf Input zurück:

GPIO.cleanup()

Die GPIO Ports können auch über die Nummer der Leiste angesprochen werden. GPIO23 ist der Pin 16. Möchte ich die Pins ansprechen, müssen zwei Zeilen geändert werden:

GPIO.setmode(GPIO.BOARD)
LED=16

Um den Python Interpreter zu beenden [Ctrl]-D / [Strg]-D drücken.

Auch ein Raspberry Pi sollte nicht einfach spannungslos geschaltet, sondern korrekt heruntergefahren werden:

sudo shutdown -h now