![]() |
Raspberry Pi: Onboard-LEDsProf. Jürgen Plate |
Auf der Platine des Raspberry Pi befinden sich auch fünf LEDs, die verschiedene Aktivitäten des Computers anzeigen.
ACT leuchtet beim Zugriff auf die SD-Karte
PWR leuchtet, sobald die Versorgungsspannung anliegt
FDX (Netzwerk) leuchtet bei Fullduplex-Mode
LNK (Netzwerk) leuchtet bei einem Link zum Netzwerk (Switch, Router etc.)
100 (Netzwerk) leuchtet bei Übertragungsrate 100 MBit/s
Die PWR-LED ist fest verdrahtet und die Netzwerk-LED haben feste Aufgaben und lassen sich nicht so einfach für andere Zwecke verwenden. Lediglich die ACT-LED kann recht einfach auch für andere Zwecke verwendet werden. Gerade wenn der RasPi ohne Tastatur und Monitor läuft, ist es oft beruhigend, wenn sich trotzden etwas tut. Wie so viele systemnahe Aufgaben, können auch diese nur vom Superuser root ausgeführt werden.
Angesprochen wird die ACT-LED über ein Pseudoverzeichnis unterhalb von /sys. Zum Testen wechseln Sie (als root-User) in das Verzeichnis der LED:
cd /sys/class/leds/led0Im Verzeichnis befinden sich sieben Dateien, wovon Sie nur mit zwei arbeiten:
Sie haben es also nur mit brightness und trigger zu tun. Da der Raspberry Pi die LED-Helligkeit nicht einstellen kann, sind für brightness nur die Werte 0 (dunkel) und 1 (hell) sinnvoll (jeder Wert ungleich 0 schaltet die LED ein). Die Datei trigger legt fest, wer die LED-Aktivität steuert. Es sind folgende Werte möglich:
Mit dem Kommando
echo "none" >/sys/class/leds/led0/triggerstellen Sie die LED auf manuellen Betrieb um. Nun entscheidet der Inhalt der Datei brightness, ob die LED leuchtet oder nicht.
# Einschalten der LED echo 1 >/sys/class/leds/led0/brightness # Ausschalten der LED echo 0 >/sys/class/leds/led0/brightnessIm Prinzip könnten Sie die LED mit Hilfe eines kleinen Shellskripts blinken lassen:
while : do # Einschalten der LED fuer 1 Sekunde echo 1 >/sys/class/leds/led0/brightness sleep 1 # Ausschalten der LED fuer 1 Sekunde echo 0 >/sys/class/leds/led0/brightness sleep 1 done
Auf diese Idee sind die Entwickler des RasPi natürlich auch schon gekommen und deshalb gibt es dafür schon eine Lösung in Form eines Kernel-Moduls namens "ledtrig_timer". Beim Einbinden (und Initialisieren) des Moduls entstehen auch zwei neue Pseudo-Dateien im Verzeichnis der LED, über die Ein- und Ausschaltzeit in Millisekunden einstellbar sind. Laden wir mal das Modul und stellen den trigger ein:
modprobe ledtrig_timer echo "timer" >/sys/class/leds/led0/triggerDie zeitbestimmenden Dateien heißen "delay_off" und "delay_on". Per Default enthalten beide den Wert 500 (500 ms = 1/2 s). Und schon blinkt die LED mit einer Frequenz von 2 Hz. Um die Frequenz auf 4 Hz (250 ms) einzustellen, geben Sie ein:
echo 250 >/sys/class/leds/led0/delay_on echo 250 >/sys/class/leds/led0/delay_offMan kann jedoch die Zeiten nicht beliebig niedrig einstellen, da die Steuerung per Software erfolgt; der Versuch, Pulsweitenmodulation zu realisieren, scheitert also.
Bleibt noch eine Triggermöglichkeit übrig: heartbeat. Mit dieser Möglichkeit kann die Funktion des Boards kontinuierlich überwacht werden. Solange das System (genauer: der Kernel) einwandfrei arbeitet, wird der "Herzschlag" getriggert und die LED blinkt. Hängt sich das System auf (der Ami sagt dazu "freeze"), blinkt auch nichts mehr. Die Anzeige kann auch sehr gut mit dem an anderer Stelle erwähnten Watchdog kombiniert werden. Um den Heartbeat zu setzen, wird wieder ein Kernel-Modul benötigt:
modprobe ledtrig_heartbeat echo "heartbeat" >/sys/class/leds/led0/trigger
Anmerkungen:
Setzen von brightness auf 0 schaltet die LED in jedem Fall aus
(wichtig bei timer und heartbeat).
Im Modus none kann die LED auch über GPIO16 gesteuert werden. Da sie active-low
ist, muss GPIO16 auf 0 gesetzt werden, um die LED anzuschalten und umgekehrt.
Beim Raspberry Pi 2 mit dem neueren Raspbian ist alles viel einfacher. Es genügt, die folgende Zeile in der Datei /boot/config.txt einzutragen:
dtparam=act_led_trigger=heartbeat