Comment contrôler les voyants du système à l'aide de mon logiciel?


64

Il y a 5 voyants sur le RPi: OK, PWR, FDX, LNK, 10M.

J'aimerais savoir s'il est possible de contrôler l'un quelconque de ces logiciels à l'aide d'un logiciel, c'est-à-dire de les activer ou de modifier l'intensité (ou même de changer de souffle ).

Et si oui, où puis-je lire à ce sujet? Les voyants peuvent constituer un moyen très pratique de signaler l’état de l’application de l’utilisateur quand ils ne sont pas nécessaires à l’utilisation initiale.


2
Et oui - je sais que je peux facilement ajouter des LED sur les sorties GPIO - mais je suis curieux de savoir ce qui peut être fait sans matériel externe.
Maria Zverina

1
Les LED sont généralement monochromes (surtout lorsqu'elles sont nécessaires), ce qui vous permet d'oublier cette partie :)
Jivings

2
@Jivings Accepter qu'ils sont probablement une seule couleur étant donné le coût du RPi ... mais il n'est jamais mauvais de demander :)
Maria Zverina Le

Réponses:


57

Le voyant OK peut être contrôlé à partir du logiciel d’espace utilisateur. Détails ici: Re: pouvons-nous contrôler les leds à bord

Résumé de ce qui précède (tout crédit à BrianW):

Le voyant OK est disponible en tant que /sys/class/leds/led0/.

Le pilote de voyant du noyau a des "déclencheurs" qui permettent à une autre partie du noyau de contrôler le voyant. Le déclencheur par défaut de la LED est ' mmc0', ce qui la fait s'allumer lors de l'accès à la carte SD.

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

Vous pouvez désactiver le mmc0déclencheur comme suit:

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

Le voyant peut être allumé et éteint en utilisant le brightnessfichier ' '. La luminosité minimale est 0 et la maximale est 255. En l'absence de prise en charge de luminosité variable, toute valeur supérieure à 0 allume le voyant.

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

Régler la luminosité sur 0 règle automatiquement le déclencheur sur "aucun".

Si vous souhaitez que le voyant revienne à sa fonction par défaut:

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

Il y a quelques modules de noyau que vous pouvez charger ( ledtrig_timeret ledtrig_heartbeat) qui clignoteront le voyant pour vous.

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

Une fois que vous avez désactivé la mmc0gâchette, vous pouvez utiliser GPIO16 pour contrôler le voyant. Il est actif-bas. Vous devez donc régler la broche sur bas pour allumer le voyant et sur haute pour l’éteindre.

À partir de Python, vous pouvez utiliser le module RPi.GPIOpour contrôler la broche 16. Il existe également un pilote C #.

Exemple de code

#!/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
Bonjour mec! Afin de prévenir la pourriture de lien, pouvez-vous résumer les points principaux du fil ici? Merci!

Ce n'est même pas un bidouillage!
Alex Chamberlain

C'est vrai. Bien sûr, Ethernet et les ordinateurs ne le peuvent pas, mais si vous avez besoin de plus, ils peuvent simplement être ajoutés (en tant que matériel) aux broches GPIO exposées. Il existe de nombreux exemples d'ajout de voyants aux broches GPIO. Il semble avoir remplacé le cristal en tant qu'électronique 101 ces temps-ci :) Mon voyant OK clignote à chaque fois qu'une phrase NMEA est reçue sur l'UART.
Guy

4
Pour info sur le Raspberry Pi 2, vous pouvez enfin contrôler le voyant PWR! Basculez-le en mode GPIO avec echo gpio | sudo tee /sys/class/leds/led1/trigger, puis activez ou désactivez avec echo [0|1] | sudo tee /sys/class/leds/led1/brightness.
geerlingguy

2
Pour ceux qui se demandent comment faire cela à partir de la ligne de commande (sans les privilèges super-utilisateur nécessaires pour écrire dans / sys / class ...), commencez par régler le voyant sur trigger sur gpio, puis installez WiringPi learn.sparkfun.com/tutorials/ raspberry-gpio / c-câblagepi-setup après cela, vous pouvez simplement "$ gpio -g mode 16 sorties && gpio -g écrire 16 0" pour allumer le
voyant

20

Aucune des LED intégrées ne peut être contrôlée par logiciel - elles sont toutes utilisées à d'autres fins.

  • OK - indique l'accès à la carte SD
  • PWR - indique que la connexion micro USB est alimentée
  • FDX - LAN duplex intégral
  • LNK - Activité LAN
  • Vitesse de connexion 10M - 10M / 100M - s’il est allumé, le RPi est connecté à 100M.

Voilà la réponse officielle ... Étudions le schéma .

Page 4 La LED PWR est connectée directement à l'alimentation, nous ne pouvons donc pas contrôler cela par logiciel.

Page 3 FDX, LNK et 10M sont tous connectés à la puce Ethernet, nous ne pouvons donc pas les contrôler à l'aide d'un logiciel (sans un peu de trafic génial ...).

Page 4 MAIS OK est en réalité contrôlé par GPIO 16, il y a donc un risque de piratage ...


1
@AlexChamberlain Belle définition des LED. Mais sommes-nous vraiment sûrs qu'ils ne peuvent pas être contrôlés par un logiciel? Les voyants réseau sont-ils sous contrôle du microprogramme ou du matériel réel? Et s’ils sont contrôlés par un micrologiciel, pouvons-nous procéder à une ingénierie inverse?
Maria Zverina

5
Découvrez le schéma - PWR est directement connecté à l'alimentation, et FDX, LNK & 10M à la puce Ethernet. Comme je l'ai dit, vous pourrez peut-être pirater le voyant OK.
Alex Chamberlain

Alex a raison. la puce BCM n'a aucun contrôle (excpet pour GPIO16) sur ces LED; donc aucun logiciel ne peut y accéder, pas même le code du noyau de bas niveau. Il vous faudrait pirater la puce LAN ou créer votre propre circuit de court-circuit pour ces LED, mais ce n’est vraiment pas une bonne idée. Pourquoi ne pas simplement ajouter le vôtre?
Piotr Kula

3
Il me semble que cette autre réponse montre qu'au moins une partie de cette réponse (et certains commentaires) est fausse. Est-ce que je lis les choses correctement? Peut-être est-il exact que seul OK (intitulé "ACT" sur mon tableau Rev B.) peut être contrôlé, mais il semble que ce soit le cas. (Je n'ai pas encore essayé de le faire.)
lindes


7

Vous pouvez contrôler toutes les leds (sauf PWR dans les anciens modèles Pi, comme indiqué dans d'autres réponses).

Mais pour les voyants Ethernet, vous devrez patcher le pilote et recompiler le noyau.

Des informations sur la recompilation peuvent être obtenues ici: http://elinux.org/RPi_Kernel_Compilation

Patch et plus d'informations ici (Google Translate si besoin): http://everpi.tsar.in/2013/11/patch-para-controlar-os-leds-ethernet-do-raspberrypi.html

Une fois cela fait, vous pourrez contrôler: / sys / class / smsc95xx_leds et eth_fdx, eth_lnk et eth_spd.

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


6

Je peux confirmer qu'avec le Raspberry Pi 2, il est également possible de contrôler la LED PWD!

Le voyant d’alimentation est contrôlé par les fichiers de:

/sys/class/leds/led1

Vous pouvez l'éteindre comme le voyant d'état à l'aide de:

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

Voir la réponse de Guy pour plus de moyens de contrôler les voyants


Sur framboise pi zéro, "echo 0 ..." l'allume! Pas éteint
NilsB

6

J'ai écrit un programme utilisateur qui vous permet de contrôler les voyants Ethernet.

Le programme nécessite le plus récent libusb-1.0(PAS l'ancien 0.1). Il fonctionne avec le LAN9512 (par exemple sur le Raspberry B plus ancien) et les puces LAN9514 (sur le Raspberry B + ou le Raspberry 2, par exemple).

Les détails peuvent être trouvés ici: LAN951x LED control


Le contenu de votre lien étant relativement petit, il serait préférable de l’inclure ici dans votre réponse, entre guillemets, car le lien risque de mourir à l’avenir. Si c'est le cas, votre réponse ne sera pas d'une grande utilité. En outre, fournissez le lien github ici aussi.
Greenonline

5

Avec le Pi 2, vous pouvez contrôler à la fois les DEL intégrées rouge et verte.

La documentation de Windows 10 IoT répertorie les voyants d'alimentation rouge et OK vert des GPIO 35 et 47, respectivement.

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

J'ai essayé avec Windows 10 IoT et avec Python sur Raspbian. Les deux peuvent contrôler les voyants, bien que Raspbian les remplace chaque fois que quelque chose accède à la carte SD. Vraisemblablement, effacer le déclencheur éliminerait ce problème.)

Voici un échantillon. (Notez que cela ne remplace pas le déclencheur mentionné dans les publications précédentes)

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")
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.