Wie steuere ich die System-LEDs mit meiner Software?

64

Es gibt 5 LEDs am RPi: OK, PWR, FDX, LNK, 10M.

Ich möchte wissen, ob es möglich ist, diese über Software zu steuern, dh sie einzuschalten oder die Intensität zu ändern (oder sogar die Farbe zu keuchen ).

Und wenn ja, wo kann ich mich darüber informieren? Die LEDs können sehr praktisch sein, um den Status der Benutzeranwendung anzuzeigen, wenn sie für die ursprüngliche Verwendung nicht benötigt werden.

Maria Zverina
quelle
2
Und ja - ich weiß, dass ich die GPIO-Ausgänge problemlos mit LEDs versehen kann -, aber ich bin gespannt, was ohne externe Hardware möglich ist.
Maria Zverina
1
LEDs sind in der Regel einfarbig (insbesondere, wenn sie für einen bestimmten Zweck benötigt werden), sodass Sie diesen Teil vergessen können :)
Jivings
2
@Jivings Ich bin damit einverstanden, dass sie aufgrund der Kosten für RPi wahrscheinlich einfarbig sind ... aber es schadet nie zu fragen :)
Maria Zverina

Antworten:

57

Die OK-LED kann über die User-Space-Software gesteuert werden. Details hier: Betreff: Können wir die On-Board-LEDs steuern?

Zusammengefasst aus dem oben Gesagten (alle Kredite an BrianW):

Die OK-LED ist verfügbar als /sys/class/leds/led0/.

Der Kernel-LED-Treiber hat "Trigger", mit denen ein anderer Teil des Kernels die LED steuern kann. Der Standard-Auslöser für die LED ist ' mmc0', wodurch sie beim Zugriff auf die SD-Karte leuchtet.

root@raspberrypi:~# cat /sys/class/leds/led0/trigger
none [mmc0]

Sie können den mmc0Trigger wie folgt deaktivieren :

echo none >/sys/class/leds/led0/trigger

Die LED kann mit der ' brightness' Datei ein- und ausgeschaltet werden . Die Mindesthelligkeit beträgt 0 und die Höchsthelligkeit 255. Da keine variable Helligkeit unterstützt wird, schaltet jeder Wert über 0 die LED ein.

echo 1 >/sys/class/leds/led0/brightness
echo 0 >/sys/class/leds/led0/brightness

Wenn Sie die Helligkeit auf 0 setzen, wird der Trigger automatisch auf "Keine" gesetzt.

Wenn Sie möchten, dass die LED zu ihrer Standardfunktion zurückkehrt:

echo mmc0 >/sys/class/leds/led0/trigger

Es gibt ein paar Kernel-Module, die Sie laden können ( ledtrig_timerund ledtrig_heartbeat), die die LED für Sie blinken lassen.

modprobe ledtrig_heartbeat
echo heartbeat >/sys/class/leds/led0/trigger

Nachdem Sie den mmc0Auslöser ausgeschaltet haben, können Sie die LED mit GPIO16 steuern. Es ist aktiv-niedrig, daher müssen Sie den Pin niedrig einstellen, um die LED einzuschalten, und hoch, um sie auszuschalten.

In Python können Sie mit dem Modul RPi.GPIOPin 16 steuern. Es gibt auch einen C # -Treiber.

Beispielcode

#!/usr/bin/python

import RPi.GPIO as GPIO
from time import sleep

# Needs to be BCM. GPIO.BOARD lets you address GPIO ports by periperal
# connector pin number, and the LED GPIO isn't on the connector
GPIO.setmode(GPIO.BCM)

# set up GPIO output channel
GPIO.setup(16, GPIO.OUT)

# On
GPIO.output(16, GPIO.LOW)

# Wait a bit
sleep(10)

# Off
GPIO.output(16, GPIO.HIGH)
Kerl
quelle
3
Hallo Typ! Kannst du hier die Hauptpunkte des Themas zusammenfassen, um ein Verrotten des Links zu verhindern? Vielen Dank!
Das ist nicht einmal ein Hack!
Alex Chamberlain
Stimmt. Sicher, die Ethernet- und Pwr-LEDs können nicht, aber wenn Sie mehr benötigen, können sie einfach (als Hardware) zu den freiliegenden GPIO-Pins hinzugefügt werden. Es gibt viele Beispiele für das Hinzufügen von LEDs zu den GPIO-Pins. Es scheint, als hätte es in diesen Tagen das Kristall-Set als Elektronik 101 ersetzt :) Ich habe meine OK-LED jedes Mal blinken lassen, wenn ein NMEA-Satz auf dem UART empfangen wird.
Guy
4
Zu Ihrer Information, auf dem Raspberry Pi 2 können Sie endlich auch die PWR-LED steuern! Schalten Sie es mit in den GPIO-Modus echo gpio | sudo tee /sys/class/leds/led1/triggerund dann mit ein oder aus echo [0|1] | sudo tee /sys/class/leds/led1/brightness.
Geerlingguy
2
Wenn Sie sich fragen, wie dies über die Befehlszeile erfolgen soll (ohne dass Superuser- Berechtigungen zum Schreiben in / sys / class erforderlich sind ...), müssen Sie zunächst die LED so einstellen, dass sie auf gpio auslöst, und anschließend WiringPi installieren. Learn.sparkfun.com/tutorials/ raspberry-gpio / c-wiringpi-setup danach kannst du einfach "$ gpio -g mode 16 output && gpio -g write 16 0" um die led
einzuschalten
20

Keine der integrierten LEDs kann in der Software gesteuert werden - sie werden alle für andere Zwecke verwendet.

  • OK - Zeigt den Zugriff auf die SD-Karte an
  • PWR - Zeigt die Stromversorgung der Micro-USB-Verbindung an
  • FDX - Vollduplex-LAN
  • LNK - LAN-Aktivität
  • 10M - 10M / 100M Verbindungsgeschwindigkeit - Wenn diese leuchtet, ist das RPi mit 100M verbunden.

Nun, das ist die offizielle Antwort ... Lassen Sie uns den Schaltplan studieren .

Page 4 Die PWR - LED ist direkt an die Stromversorgung angeschlossen, so können wir nicht in der Software steuern.

Page 3 FDX, LNK und 10M sind alle mit dem Ethernet-Chip verbunden, daher können wir sie auch hier nicht über Software steuern (ohne etwas Funky Traffic Hack ...).

Page 4 ABER OK wird tatsächlich von GPIO 16 gesteuert, daher besteht die Möglichkeit eines Hacks ...

Alex Chamberlain
quelle
1
@ AlexChamberlain Schöne Definition der LEDs. Aber sind wir uns wirklich sicher, dass sie nicht von Software gesteuert werden können? Sind Netzwerk-LEDs unter Firmware-Kontrolle oder der tatsächlichen Hardware? Und wenn sie über Firmware gesteuert werden, können wir das irgendwie rückentwickeln?
Maria Zverina
5
Schauen Sie sich den Schaltplan an - PWR ist direkt an die Stromversorgung und FDX, LNK & 10M an den Ethernet-Chip angeschlossen. Wie gesagt, Sie können möglicherweise die OK-LED hacken.
Alex Chamberlain
Alex ist richtig. Der BCM-Chip hat keine Kontrolle (außer GPIO16) über diese LEDs. Daher kann keine Software darauf zugreifen, nicht einmal Kernel-Code auf niedriger Ebene. Sie müssten den LAN-Chip hacken oder einen eigenen Kurzschluss zu diesen LEDs herstellen - aber das ist wirklich keine gute Idee. Warum nicht einfach Ihre eigenen hinzufügen?
Piotr Kula
3
Es scheint mir, dass diese andere Antwort zumindest einen Teil dieser Antwort (und einige Kommentare) als falsch zeigt. Lese ich die Dinge richtig? Es mag genau sein, dass nur OK (auf meinem Rev. B.-Board mit "ACT" beschriftet) gesteuert werden kann, aber es scheint, als ob dies möglich wäre. (Ich habe es aber noch nicht versucht.)
Lindes
7

Sie können alle LEDs steuern (außer PWR in älteren Pi-Modellen, wie in anderen Antworten angegeben).

Für Ethernet-LEDs müssen Sie jedoch den Treiber patchen und den Kernel neu kompilieren.

Informationen zum Neukompilieren finden Sie hier: http://elinux.org/RPi_Kernel_Compilation

Patches und weitere Informationen finden Sie hier: http://everpi.tsar.in/2013/11/patch-para-controlar-os-leds-ethernet-do-raspberrypi.html

Danach können Sie Folgendes steuern: / sys / class / smsc95xx_leds und eth_fdx, eth_lnk und eth_spd.

Beispiel: Echo 0> / sys / class / smsc95xx_leds / eth_fdx Echo 1> / sys / class / smsc95xx_leds / eth_fdx

Zar
quelle
6

Ich kann bestätigen, dass es mit dem Raspberry Pi 2 auch möglich ist, die PWD-LED zu steuern!

Die Power-LED wird von den folgenden Dateien gesteuert:

/sys/class/leds/led1

Sie können es wie die Status-LED ausschalten, indem Sie Folgendes verwenden:

echo 0 > /sys/class/leds/led1/brightness # Power LED
echo 0 > /sys/class/leds/led0/brightness # Status LED

Weitere Möglichkeiten zur Steuerung der LEDs finden Sie in der Antwort von Guy

Patrick
quelle
Auf Himbeer-Pi-Null schaltet das "Echo 0 ..." es ein! Nicht aus.
NilsB
6

Ich habe ein Userspace-Programm geschrieben, mit dem Sie die Ethernet-LEDs steuern können.

Das Programm benötigt das aktuellere libusb-1.0(NICHT das ältere 0.1). Es funktioniert mit LAN9512 (zB auf dem älteren Raspberry B) sowie mit LAN9514-Chips (zB auf Raspberry B + oder Raspberry 2)

Details finden Sie hier: LAN951x LED-Steuerung

blip
quelle
Da der Inhalt Ihres Links recht klein ist, ist es besser, ihn hier in Ihre Antwort in Blockzitaten aufzunehmen, da der Link in Zukunft möglicherweise nicht mehr existiert. Wenn dies der Fall ist, wird Ihre Antwort keinen großen Nutzen haben. Stellen Sie auch hier den Github-Link bereit.
Greenonline
5

Mit dem Pi 2 können Sie sowohl die roten als auch die grünen Onboard-LEDs steuern.

In der Windows 10 IoT-Dokumentation sind die rote Betriebsanzeige und die grüne Ok-Anzeige am GPIO 35 bzw. 47 aufgeführt.

https://ms-iot.github.io/content/en-US/win10/samples/PinMappingsRPi2.htm

Ich habe es mit dem Windows 10 IoT und mit Python auf Raspbian versucht. Beide können die LEDs steuern, obwohl Raspbian die LED überschreibt, wenn etwas auf die SD-Karte zugreift. Vermutlich würde das Löschen des Auslösers dieses Verhalten beseitigen.)

Hier ist ein Beispiel. (Beachten Sie, dass dies den in vorherigen Beiträgen erwähnten Auslöser nicht außer Kraft setzt.)

print ("Program Start")
import RPi.GPIO as GPIO
import time

channels = [35, 47]

print ("Turning off LED's")
GPIO.setmode(GPIO.BCM)
GPIO.setup(channels, GPIO.OUT)
GPIO.output(channels, GPIO.LOW)
time.sleep(5)

print ("Turning on LED's")
GPIO.output(channels, GPIO.HIGH)
time.sleep(5)

GPIO.cleanup()

print ("Program End")
TomXP411
quelle