Last Updated on 10. October 2026 by SuffocationLink status: OK
Hier der erste Versuch, eine LED mit dem Raspberry PI 3 anzusteuern. Aufgebaut wird das Ganze auf einem Brotboard mit Freiluft-Verkabelung.
Hardware
PI3 (oder älter, bitte auf die richtigen Pins achten)
LED (Ich habe ne grüne Standard-LED 1,5V)
220 Ohm (Vorwiderstand für die LED)
Brot-Board (zum leichteren Aufbau)
Diverse Kabel (vorgefertigte Pin-Header-Kabel)
Structure
Schematic

Wiring

Software
Entwicklungsumgebung
Als Entwicklungsumgebung habe ich zum ersten Mal BlueJ auf dem PI verwendet. Mir gefällt daran, dass man hier mit Klassendiagrammen erst einmal die Struktur definiert und im nächsten Schritt mit dem gleichen Tool die Implementierung realisieren kann.
Einen weiteren Vorteil bietet die Testumgebung. Es ist möglich, Instanzen von Klassen per Knopfdruck zu erstellen und deren Methoden mit ein paar Klicks zu testen.
Code
LED-Klasse
Klasse zur Steuerung einer LED mit den Methoden On, Off und Toggle.
Hinweis: Der ursprüngliche Code (WP-Gistpen) ist verloren gegangen. Der folgende Code wurde im Oktober 2026 neu erstellt (pi4j 1.x, kompiliert, aber nicht auf der Hardware getestet).
Source code Led.java
import com.pi4j.io.gpio.GpioController;
import com.pi4j.io.gpio.GpioFactory;
import com.pi4j.io.gpio.GpioPinDigitalOutput;
import com.pi4j.io.gpio.Pin;
import com.pi4j.io.gpio.PinState;
import com.pi4j.io.gpio.RaspiPin;
import com.pi4j.io.gpio.exception.GpioPinExistsException;
/**
* Steuert eine LED an einem GPIO des Raspberry PI (pi4j / WiringPi-Nummerierung).
* www.fambach.net, GPLv2
*/
public class Led {
private final GpioController gpio;
private final GpioPinDigitalOutput pin;
/** LED an GPIO_01 (BCM 18, physischer Pin 12) */
public Led() {
this(RaspiPin.GPIO_01);
}
public Led(Pin ledPin) {
gpio = GpioFactory.getInstance();
GpioPinDigitalOutput output;
try {
output = gpio.provisionDigitalOutputPin(ledPin, "LED", PinState.LOW);
} catch (GpioPinExistsException e) {
// Pin aus einem abgebrochenen Lauf noch belegt: freigeben und neu anlegen
gpio.unprovisionPin(gpio.getProvisionedPin(ledPin));
output = gpio.provisionDigitalOutputPin(ledPin, "LED", PinState.LOW);
}
pin = output;
pin.setShutdownOptions(true, PinState.LOW);
}
public void on() {
pin.high();
}
public void off() {
pin.low();
}
public void toggle() {
pin.toggle();
}
public boolean isOn() {
return pin.isHigh();
}
/** GPIO freigeben */
public void shutdown() {
gpio.shutdown();
}
}
Der Try/Catch-Block im Konstruktor ist dem Umstand geschuldet, dass meine ersten Tests auch mal schiefgingen und dann die GPIOs nicht freigegeben wurden.
Die Freigabe mache ich aktuell wenig elegant im Konstruktor. Schöner wäre es, vorher abzufragen, ob der Pin schon initialisiert wurde und dann entsprechend weiterzumachen.
Test Class
Klasse mit Main-Methode zum Testen der LED-Klasse. In der Main-Methode ist eine Endlosschleife, welche die LED in einem Intervall von 2 Sekunden an- und wieder ausschaltet.
Source code LedTest.java
/**
* Testet die Klasse Led: schaltet die LED alle 2 Sekunden an und aus.
* www.fambach.net, GPLv2
*/
public class LedTest {
public static void main(String[] args) throws InterruptedException {
Led led = new Led();
Runtime.getRuntime().addShutdownHook(new Thread(led::shutdown));
while (true) {
led.on();
System.out.println("LED an");
Thread.sleep(2000);
led.off();
System.out.println("LED aus");
Thread.sleep(2000);
}
}
}
Tipps
Starten des Programms als Root
Die GPIOs müssen als Root angesprochen werden. Im BlueJ gibt es in den Einstellungen einen Button, aber dieser scheint nicht richtig initialisiert zu sein. Diesen einfach nochmal rausnehmen und wieder setzen, die Einstellungen speichern, dann sollte es gehen.
Fehlende pi4j Klassen
Wenn es beim Compilieren Probleme mit fehlenden pi4j Klassen gibt, muss das entsprechende Paket installiert werden. (Hier gibt es HilfeLink status: OK)
LED geht nicht an
Die LED geht einfach nicht an, evtl. mal mit GPIO auf der Console testen. Vielleicht stimmt die Verdrahtung nicht, es fehlen Einstellungen oder die Pinbelegung stimmt nicht (Hier gibt es Hilfe dazuLink status: Broken)
Related Posts
Sources
| Date | Change | Author |
|---|---|---|
| 10.10.2026 | Verlorenen Gistpen-Code durch neu erstellten Java-Code (Code-Blöcke) ersetzt | Suffocation |
| 08.10.2026 | Überschriften-Hierarchie korrigiert (H1→H2, Unterebenen eine Stufe tiefer) | Suffocation |
| 03.10.2026 | Rechtschreibung korrigiert: Tippfehler, Kommas, Grammatik Log-Liste eingefügt | Suffocation |
| 04.06.2017 | Post created | Suffocation |