RPi上有5个LED:OK,PWR,FDX,LNK,10M。
我想知道,如果有可能,从软件控制任何这些即打开它们,或者改变强度(甚至改变颜色GASP)。
如果是这样,我在哪里可以读到它?当原始用途不需要LED时,它们可能是通知用户应用程序状态的便捷方式。
RPi上有5个LED:OK,PWR,FDX,LNK,10M。
我想知道,如果有可能,从软件控制任何这些即打开它们,或者改变强度(甚至改变颜色GASP)。
如果是这样,我在哪里可以读到它?当原始用途不需要LED时,它们可能是通知用户应用程序状态的便捷方式。
Answers:
可以通过用户空间软件控制OK LED。详细信息在这里:Re:我们可以控制车载LED吗
综上所述(全部归功于BrianW):
OK LED可用为/sys/class/leds/led0/
。
内核LED驱动器具有“触发器”,可让内核的其他部分控制LED。LED的默认触发器为“ mmc0
”,这将在访问SD卡时点亮。
root@raspberrypi:~# cat /sys/class/leds/led0/trigger
none [mmc0]
您可以mmc0
按以下方式停用触发器:
echo none >/sys/class/leds/led0/trigger
可以使用' brightness
'文件打开和关闭LED 。最小亮度为0,最大亮度为255。由于没有可变亮度支持,任何大于0的值都将打开LED。
echo 1 >/sys/class/leds/led0/brightness
echo 0 >/sys/class/leds/led0/brightness
将亮度设置为0会自动将触发器设置为“无”。
如果您希望LED返回其默认功能:
echo mmc0 >/sys/class/leds/led0/trigger
您可以加载(ledtrig_timer
和ledtrig_heartbeat
)几个内核模块,这些模块将为您闪烁LED。
modprobe ledtrig_heartbeat
echo heartbeat >/sys/class/leds/led0/trigger
一旦关闭mmc0
触发器,就可以使用GPIO16来控制LED。它为低电平有效,因此您需要将引脚设置为低电平以打开LED,而将其设置为高电平以将其关闭。
在Python中,您可以使用该模块RPi.GPIO
来控制引脚16。还有一个C#驱动程序。
样例代码
#!/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)
echo gpio | sudo tee /sys/class/leds/led1/trigger
,然后使用开启或关闭echo [0|1] | sudo tee /sys/class/leds/led1/brightness
。
板上的LED均无法通过软件进行控制-它们全部用于其他用途。
现在,这是官方的答案...让我们研究原理图。
Page 4 PWR LED直接连接到电源,因此我们无法通过软件对其进行控制。
Page 3 FDX,LNK和10M都已连接到以太网芯片,因此我们再次无法通过软件对其进行控制(没有一些时髦的流量黑客……)。
Page 4 BUT OK实际上是由GPIO 16控制的,因此存在被黑客入侵的可能性。
有一种更简单的方法可以从用户区控制LAN LED。源代码可从
http://www.raspberrypi.org/forums/viewtopic.php?f=63&t=72070
该程序需要使用sudo运行。
您可以控制所有指示灯(如其他答案所述,较旧的Pi型号中的PWR除外)。
但是对于以太网LED,您将需要修补驱动程序并重新编译内核。
有关如何重新编译的信息,请参见: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
我编写了一个用户空间程序,该程序可让您控制以太网LED。
该程序需要更新的版本libusb-1.0
(而不是较旧的0.1)。它与LAN9512(例如,在较旧的Raspberry B上)以及LAN9514芯片(例如,在Raspberry B +或Raspberry 2上)一起使用
可以在这里找到详细信息:LAN951x LED控件
使用Pi 2,您可以控制板上的红色和绿色LED。
Windows 10 IoT文档分别列出了GPIO 35和47上的红色电源LED和绿色的OK LED。
https://ms-iot.github.io/content/zh-CN/win10/samples/PinMappingsRPi2.htm
我尝试在Raspbian上使用Windows 10 IoT和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")