控制树莓派板载 LED 的几种方式

所有的树莓派型号或多或少都自带了一些 LED,早期的型号例如 1 代 B 型,会板载 PWR(电源)、ACT(活动)以及网络状态 LED。在 B+ 之后的型号,网络状态 LED 被移到了网口上,主板上只剩下 2 个 LED,红色的 PWR 和 绿色的 ACT。正常情况下,除非电源电压低于 4.5V 以下,否则 PWR 电源 LED 会保持常亮。

幸运的是,在树莓派 2B、B+、A+ 和 Zero 型号中,提供了几种方法来控制这些 LED。最简单的方式是对下面的文件进行配置来实现:

/sys/class/leds/led[LED_ID]/trigger

其中[LED_ID]需要替换为 0(代表 ACT LED)或 1(代表 PWR LED)。
例如:

# Set the PWR LED to GPIO mode (set 'off' by default).
echo gpio | sudo tee /sys/class/leds/led1/trigger

# (Optional) Turn on (1) or off (0) the PWR LED.
echo 1 | sudo tee /sys/class/leds/led1/brightness
echo 0 | sudo tee /sys/class/leds/led1/brightness

# Revert the PWR LED back to 'under-voltage detect' mode.
echo input | sudo tee /sys/class/leds/led1/trigger

# Set the ACT LED to trigger on cpu0 instead of mmc0 (SD card access).
echo cpu0 | sudo tee /sys/class/leds/led0/trigger

用这种方法可以关闭 PWR 电源指示灯,为后面数年的使用省下几毛钱电费 -。-

明白了这个原理之后,我们可以设计一个脚本让这 LED 按照我们的需要闪烁起来,就和使用 GPIO 控制外部 LED BlingBling 类似。

from time import sleep
led = open('/sys/class/leds/led0/brightness', 'w', buffering = 0)
while True:
    led.write('0')#turn on
    sleep(0.5)
    led.write('1')#turn off
    sleep(0.5)

保存为 led0.py 之后,运行 sudo python led0.py 命令即可。代码证 buffering 参数是为了无缓冲写入,这样就不用等到调用文件的 close 方法才能真正写入了。

如果你希望永久禁用这两个 LED,还可以通过添加下面的内容到 /boot/config.txt 的方式来实现:

# Disable the ACT LED.
dtparam=act_led_trigger=none
dtparam=act_led_activelow=off

# Disable the PWR LED.
dtparam=pwr_led_trigger=none
dtparam=pwr_led_activelow=off

对于树莓派 Zero 来说,板子上只有一个 LED(led0),即 ACT LED。默认为点亮状态,而当该 LED 熄灭则表示磁盘在活动。

如果要完全关闭 Zero 上的 LED,请运行下面的命令:

# Set the Pi Zero ACT LED trigger to 'none'.
echo none | sudo tee /sys/class/leds/led0/trigger

# Turn off the Pi Zero ACT LED.
echo 1 | sudo tee /sys/class/leds/led0/brightness
To make these settings permanent, add the following lines to your Pi's /boot/config.txt file and reboot:

# Disable the ACT LED on the Pi Zero.
dtparam=act_led_trigger=none
dtparam=act_led_activelow=on
这是一篇发布于 5年 前的文章,其中的信息可能已经有所发展或是发生改变,请了解。


6 评论

  1. 关闭网口灯
    echo “dtparam=eth_led0=14” | sudo tee -a /boot/config.txt
    echo “dtparam=eth_led1=14” | sudo tee -a /boot/config.txt

发表评论

你的邮件地址不会公开


*