RPi上有5个LED:OK,PWR,FDX,LNK,10M。

我想知道是否可以通过软件控制其中的任何一个,即打开它们或更改强度(或什至改变颜色喘气)。当原始用途不需要LED时,它们可能是一种非常方便的信号通知用户应用程序状态。

评论

是的-我知道我可以轻松地将LED添加到GPIO输出上-但是我很好奇没有外部硬件怎么办。

LED通常是单色的(特别是在一种用途时),因此您可以忽略该部分:)

@Jivings同意,考虑到RPi的成本,它们可能是单色的...但是问这个问题从来没有什么麻烦:)

#1 楼

可以通过用户空间软件控制OK LED。详细信息在这里:Re:我们可以控制板上的LEDs吗?
从以上总结(全部归BrianW所有):触发器”,让内核的其他部分控制LED。 LED的默认触发器是“ /sys/class/leds/led0/”,当访问SD卡时它会亮起。可以使用“ mmc0”文件打开和关闭LED。最小亮度为0,最大亮度为255。由于不支持可变亮度,因此任何大于0的值都会打开LED。
root@raspberrypi:~# cat /sys/class/leds/led0/trigger
none [mmc0]

将亮度设置为0会自动将触发器设置为“ none”。
如果您希望LED恢复其默认功能:
echo none >/sys/class/leds/led0/trigger

您可以加载几个内核模块(mmc0brightness),它们会闪烁适用于您的LED。
echo 1 >/sys/class/leds/led0/brightness
echo 0 >/sys/class/leds/led0/brightness

一旦关闭了ledtrig_timer触发器,就可以使用GPIO16来控制LED。它为低电平有效,因此您需要将引脚设置为低电平以打开LED,而将其设置为高电平以将其关闭。
在Python中,您可以使用模块ledtrig_heartbeat控制引脚16。 。

示例代码
echo mmc0 >/sys/class/leds/led0/trigger



评论


仅供参考,在Raspberry Pi 2上,您最终也可以控制PWR LED!使用echo gpio将其切换为GPIO模式| sudo tee / sys / class / leds / led1 / trigger,然后使用echo [0 | 1]启用或禁用| sudo tee / sys / class / leds / led1 /亮度。

–geerlingguy
15年3月12日在2:59

对于想知道如何从命令行执行此操作的人(无需具有写入/ sys / class的超级用户权限...),请首先将LED设置为在gpio上触发,然后安装WiringPi learning.sparkfun.com/tutorials/树莓派-gpio / c-wiringpi-setup之后,您就可以“ $ gpio -g模式16输出&& gpio -g写16 0”来打开led了(关闭1

– joonas.fi
17-2-17在11:37



好答案!要添加以下内容:通过LED多路复用,LED有效地具有亮度支持。在两个单独的终端窗口中通过SSH连接到Raspi,一个用于即时更改配置,另一个用于创建一定的负载(=触发事件)。在配置终端中,通过echo cpu> / sys / class / leds / led0 / trigger将CPU设置为触发器。当Raspi闲置时,LED会非常暗。当您启动顶部时,LED会很快发光(最长1秒)。在顶部,您会看到Raspi处于99%空闲状态。然后运行yes,不断打印“ y”,从而使CPU处于最大压力,LED变得完全亮!

– porg
20-10-28在1:04

#2 楼

板上的LED均无法通过软件进行控制-它们全部用于其他用途。


确定-表示已访问SD卡
PWR-表示为微型USB供电connection
FDX-全双工LAN
LNK-LAN活动
10M-10M / 100M连接速度-如果点亮,则RPi以100M连接。

现在,这就是正式答案……让我们研究一下原理图。

第4页PWR LED直接连接到电源,因此我们无法通过软件进行控制。

第3页FDX,LNK和10M都连接到以太网芯片,因此我们再次无法在软件中对其进行控制(没有一些时髦的流量黑客……)。 OK实际上是由GPIO 16控制的,因此有可能被黑客入侵...

评论


@AlexChamberlain LED的定义不错。但是我们真的确定它们不能由软件控制吗?网络LED是在固件控制下还是在实际硬件下?而且,如果它们是由固件控制的,我们可以以某种方式进行反向工程吗?

–玛丽亚·兹维里娜(Maria Zverina)
2012年6月26日9:38

查看原理图-PWR直接连接到电源,FDX,LNK和10M直接连接到以太网芯片。如我所说,您可能可以破解OK LED。

–亚历山大·张伯伦
2012年6月26日9:43

亚历克斯是正确的。 BCM芯片无法控制这些LED(GPIO16除外);因此,没有软件可以访问它们,甚至没有低级内核代码。您将不得不破解LAN芯片或为这些LED灯创建自己的短路电路,这实际上不是一个好主意。为什么不添加自己的?

– Piotr Kula
2012年8月9日在10:13



在我看来,这个其他答案至少表明该答案的至少一部分(和一些评论)是错误的。我看得对吗?也许只有OK(在我的Rev B.板上标有“ ACT”)可以被控制,但是似乎可以控制。 (不过,我还没有实际尝试过。)

– lindes
13年10月28日在19:01

只是确认“所有板载LED都无法用软件控制-它们全部用于其他用途”这一说法是错误的。我在树莓派3和4s上测试了可接受的响应。这是我在上面进行验证时使用的命令...打开两个LED echo 1 | sudo tee / sys / class / leds / led {0,1} /亮度关闭两个LED回声0 | sudo tee / sys / class / leds / led {0,1} /亮度将“心跳”触发器附加到两个LED上sudo tee / sys / class / leds / led {0,1} / trigger

–安德鲁·奥尔布赖特(Andrew Allbright)
20年1月13日,0:01

#3 楼

您可以控制所有led(如其他答案中所述,旧的Pi模型中的PWR除外)。 />有关如何重新编译的信息,请参见:http://elinux.org/RPi_Kernel_Compilation

此处提供修补程序和更多信息(如有需要,请翻译成谷歌翻译):http://everpi.tsar.in/2013 /11/patch-para-controlar-os-leds-ethernet-do-raspberrypi.html

完成后,您可以控制:/ sys / class / smsc95xx_leds和eth_fdx,eth_lnk和eth_spd 。

示例:echo 0> / sys / class / smsc95xx_leds / eth_fdx echo 1> / sys / class / smsc95xx_leds / eth_fdx

#4 楼

有一种更简单的方法可以从用户区控制LAN LED。源代码可从

http://www.raspberrypi.org/forums/viewtopic.php?f=63&t=72070

使用sudo运行。 。

#5 楼

我可以确认使用Raspberry Pi 2也可以控制PWD LED!

电源LED由以下文件中的文件控制:

/sys/class/leds/led1


您可以像使用状态LED一样将其关闭:

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


有关控制LED的更多方法,请参见盖伊的答案

评论


在树莓派零上,“回声0 ...”将其打开!不关

– NilsB
18年4月27日在7:54

#6 楼

我编写了一个用户空间程序,该程序可让您控制以太网LED。

该程序需要较新的libusb-1.0(而不是较早的0.1)。
它可与LAN9512配合使用(例如在较旧的Raspberry B上) )以及LAN9514芯片(例如,在Raspberry B +或Raspberry 2上)

可在此处找到详细信息:LAN951x LED控件

评论


由于链接的内容很小,因此最好将其包含在答案中,并用大括号括起来,因为链接将来可能会消失。如果确实如此,那么您的答案将不会有太大用处。另外,在此处也提供github链接。

– Greenonline
18年8月17日在20:47



#7 楼

使用Pi 2,您可以控制板上的红色和绿色LED。

Windows 10 IoT文档分别列出了GPIO 35和47上的红色电源LED和绿色Ok LED。

https://ms-iot.github.io/content/zh-cn/win10/samples/PinMappingsRPi2.htm

我尝试使用Windows 10 IoT和Raspbian上的Python。两者都可以控制LED,尽管每当有人访问SD卡时Raspbian都会覆盖LED。大概清除触发器将消除此行为。)

这里是一个示例。 (请注意,这不会覆盖以前的帖子中提到的触发器)

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")


评论


在Raspberry Pi 3上,此示例程序似乎始终使操作系统崩溃/死机。

–中心
20年6月21日在16:37