Controlling the Raspberry Pi 3 LED

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

http://pi4j.com/example/control.html
DateChangeAuthor
10.10.2026Verlorenen Gistpen-Code durch neu erstellten Java-Code (Code-Blöcke) ersetztSuffocation
08.10.2026Überschriften-Hierarchie korrigiert (H1→H2, Unterebenen eine Stufe tiefer)Suffocation
03.10.2026Rechtschreibung korrigiert: Tippfehler, Kommas, Grammatik
Log-Liste eingefügt
Suffocation
04.06.2017Post createdSuffocation
Changelog

Leave a Reply

Your email address will not be published. Required fields are marked *