控制树莓派zero的ACT led指示灯

树莓派zero为了瘦身只有一个板载led, 并且被用来当做了系统指示灯。对于刚入手zero懒得外接led(该是有多懒,不过有时候手头上就是没有硬件)又想玩led的blingbling,我们可以拿板载的ACT led先过过瘾!ACT led默认常亮,可以在/sys/class/leds里找到它,熟悉linux驱动的都知道我们可以通过写入数据到

/sys/class/leds/led0/brightness

来控制led0的亮灭。不过在控制之前首先要disable led0的原有功能(指示灯)否则会有干扰

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

把led0的触发器置空后,该led0将不再受其他功能控制。好了现在我们可以尝试写入数据到brightness。如果你是树莓派上的root用户你可以直接使用

root@raspberrypi:/home/pi# echo 0 >  /sys/class/leds/led0/brightness

点亮led0

root@raspberrypi:/home/pi# echo 1 >  /sys/class/leds/led0/brightness

熄灭。(这里zero的ACT led是共阳极所以低电平0点亮)如果你是pi用户(非root):则需要使用

echo 1 | sudo tee /sys/class/leds/led0/brightness
echo 0 | sudo tee /sys/class/leds/led0/brightness

来写入数据。因为linux上重定向操作不具备提权的功能可以使用管道“|”加上tee(从标准输入读取写入标准输出和文件),给tee命令提权(sudo)则可顺利写入brightness。好了基本控制逻辑有了,接下来只要写个led0.py的脚本让led0 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)

执行脚本的时候如果在pi(非root)上需要sudo python led0.py。这里打开文件加上buffering=0参数是为了无缓冲写入,这样就不用等到调用文件的close方法才能真正写入。重启后ACT led就恢复原有功能,或者不嫌麻烦的可以在覆盖trigger之前保存内容,想恢复就直接写回去就可以了。顺道提一下如何切换root用户,首次运行raspbian并登陆系统使用sudo passwd root来更改root用户密码,完成后使用su切换到root用户即可(当然在没修改sshd_config之前还是无法使用ssh直接登录root用户,因为默认ssh不能直接密码登录root用户)。

猜你喜欢

转载自blog.csdn.net/u011031257/article/details/80816239