Come controllo i LED di sistema usando il mio software?


64

Ci sono 5 LED sull'RPi: OK, PWR, FDX, LNK, 10M.

Mi piacerebbe sapere se è possibile controllare qualcuno di questi dal software, cioè accenderli o cambiare intensità (o anche cambiare colore senza fiato ).

E se è così, dove posso leggerlo? I LED potrebbero essere un modo molto utile per segnalare lo stato dell'applicazione utente quando non sono necessari per l'uso originale.


2
E sì - so di poter aggiungere facilmente LED alle uscite GPIO - ma sono curioso di sapere cosa si può fare senza hardware esterno.
Maria Zverina,

1
I LED sono generalmente monocolore (specialmente quando richiesto per uno scopo), quindi puoi dimenticarti di quella parte :)
Jivings

2
@Jivings Concordo sul fatto che sono probabilmente monocolore dato il costo di RPi ... ma non fa mai male chiedere :)
Maria Zverina,

Risposte:


57

Il LED OK può essere controllato dal software dello spazio utente. Dettagli qui: Ri: Possiamo controllare i led di bordo

Riassumendo da quanto sopra (tutto merito a BrianW):

Il LED OK è disponibile come /sys/class/leds/led0/.

Il driver LED del kernel ha "trigger" che consentono ad altre parti del kernel di controllare il LED. Il trigger predefinito per il LED è ' mmc0', che lo fa accendere quando si accede alla scheda SD.

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

È possibile disattivare il mmc0trigger come segue:

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

Il LED può essere acceso e spento usando il brightnessfile ' '. La luminosità minima è 0 e la massima è 255. Poiché non esiste un supporto di luminosità variabile, qualsiasi valore maggiore di 0 accenderà il LED.

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

Impostando la luminosità su 0, il trigger viene automaticamente impostato su "nessuno".

Se si desidera che il LED torni alla sua funzione predefinita:

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

Ci sono un paio di moduli del kernel che puoi caricare ( ledtrig_timere ledtrig_heartbeat) che faranno lampeggiare il LED per te.

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

Dopo aver disattivato il mmc0trigger, è possibile utilizzare GPIO16 per controllare il LED. È attivo-basso, quindi è necessario impostare il pin basso per accendere il LED e alto per spegnerlo.

Da Python, puoi usare il modulo RPi.GPIOper controllare il pin 16. C'è anche un driver C #.

Codice d'esempio

#!/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)

3
Ciao ragazzo! Per prevenire il marciume dei link puoi riassumere qui i punti principali della discussione? Grazie!

Non è nemmeno un trucco!
Alex Chamberlain,

Giusto. Sicuramente i LED ethernet e pwr non possono, ma se ne hai bisogno possono essere aggiunti (come hardware) ai pin GPIO esposti. Esistono molti esempi di aggiunta di LED ai pin GPIO. In questi giorni sembra aver sostituito il cristallo impostato come elettronica 101 :) Il mio LED OK lampeggia ogni volta che viene ricevuta una frase NMEA sull'UART.
Guy

4
Cordiali saluti sul Raspberry Pi 2, puoi finalmente controllare anche il LED PWR! Passa alla modalità GPIO con echo gpio | sudo tee /sys/class/leds/led1/trigger, quindi acceso o spento con echo [0|1] | sudo tee /sys/class/leds/led1/brightness.
geerlingguy,

2
Per chiunque si stia chiedendo come farlo dalla riga di comando (senza i privilegi di superutente richiesti per scrivere in / sys / class ...), prima imposta il LED da attivare su gpio, quindi installa WiringPi learn.sparkfun.com/tutorials/ raspberry-gpio / c-cablaggiopi-setup dopodiché puoi solo "$ gpio -g uscita modalità 16 & & gpio -g scrivere 16 0" per accendere il led (e 1 per spegnere)
joonas.fi

20

Nessuno dei LED di bordo può essere controllato tramite software: sono tutti utilizzati per altre cose.

  • OK: indica l'accesso alla scheda SD
  • PWR: indica l'alimentazione alla connessione micro USB
  • FDX - LAN full duplex
  • LNK - Attività LAN
  • 10M - Velocità di connessione 10M / 100M - se è acceso, l'RPi è collegato a 100M.

Ora, questa è la risposta ufficiale ... Studiamo lo schema .

Page 4 Il LED PWR è collegato direttamente all'alimentazione, quindi non possiamo controllarlo nel software.

Page 3 FDX, LNK e 10M sono tutti collegati al chip Ethernet, quindi ancora una volta non possiamo controllarli nel software (senza qualche hack funky del traffico ...).

Page 4 MA OK è effettivamente controllato da GPIO 16, quindi esiste la possibilità di un hack ...


1
@AlexChamberlain Bella definizione dei LED. Ma siamo davvero sicuri che non possano essere controllati dal software? I LED di rete sono controllati dal firmware o dall'hardware effettivo? E se sono controllati dal firmware, possiamo invertire questo in qualche modo?
Maria Zverina,

5
Dai un'occhiata allo schema : PWR è direttamente collegato all'alimentazione e FDX, LNK e 10M al chip Ethernet. Come ho detto, potresti essere in grado di hackerare il LED OK.
Alex Chamberlain,

Alex ha ragione. il chip BCM non ha alcun controllo (eccetto per GPIO16) su quei LED; quindi nessun software può accedervi, nemmeno un codice kernel di basso livello. Dovresti hackerare il chip LAN o creare il tuo circuito corto per questi LED-BUt che non è davvero una grande idea. Perché non aggiungere solo il tuo?
Piotr Kula,

3
Mi sembra che questa altra risposta mostri che almeno una parte di questa risposta (e alcuni commenti) sono falsi. Sto leggendo le cose correttamente? Può essere esatto che solo OK (etichettato "ACT" sulla mia scheda Rev B.) possa essere controllato, ma sembra che si possa essere. (Non ho ancora provato a farlo davvero.)
Lindes


7

Puoi controllare tutti i led (tranne PWR nei vecchi modelli Pi, come detto in altre risposte).

Ma per i LED Ethernet dovrete patchare il driver e ricompilare il kernel.

Informazioni su come ottenere la ricompilazione qui: http://elinux.org/RPi_Kernel_Compilation

Patch e ulteriori informazioni qui (Google Traduttore se necessario): http://everpi.tsar.in/2013/11/patch-para-controlar-os-leds-ethernet-do-raspberrypi.html

Dopo aver finito, sarai in grado di controllare: / sys / class / smsc95xx_leds e eth_fdx, eth_lnk e eth_spd.

Esempio: echo 0> / sys / class / smsc95xx_leds / eth_fdx echo 1> / sys / class / smsc95xx_leds / eth_fdx


6

Posso confermare che con Raspberry Pi 2 è possibile controllare anche il LED PWD!

Il LED di alimentazione è controllato dai file in:

/sys/class/leds/led1

Puoi spegnerlo proprio come il LED di stato usando:

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

Vedi la risposta di Guy per ulteriori modi per controllare i LED


Su raspberry pi zero "echo 0 ..." lo attiva! Non spento
NilsB,

6

Ho scritto un programma per lo spazio utente che ti consente di controllare i LED Ethernet.

Il programma richiede il più recente libusb-1.0(NON il precedente 0.1). Funziona con LAN9512 (ad es. Sul vecchio Raspberry B) e con i chip LAN9514 (ad es. Su Raspberry B + o Raspberry 2)

I dettagli sono disponibili qui: Controllo LED LAN951x


Poiché il contenuto del tuo link è piuttosto piccolo, sarebbe meglio includerlo qui nella tua risposta, tra virgolette, poiché il link potrebbe morire in futuro. In tal caso, la tua risposta non sarà molto utile. Fornisci anche qui il link github.
Greenonline,

5

Con il Pi 2, puoi controllare sia i LED rossi che quelli verdi integrati.

La documentazione IoT di Windows 10 elenca rispettivamente il LED di alimentazione rosso e il LED OK verde su GPIO 35 e 47.

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

Ho provato con l'IoT di Windows 10 e con Python su Raspbian. Entrambi possono controllare i LED, anche se Raspbian ha la precedenza sul LED ogni volta che qualcosa accede alla scheda SD. Presumibilmente, deselezionando il trigger si eliminerebbe questo comportamento.)

Ecco un esempio. (Si noti che questo non sostituisce il trigger come menzionato nei post precedenti)

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")
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.