树莓派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
点亮led0
root@raspberrypi:/home/pi
熄灭。(这里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')
sleep(0.5)
led.write('1')
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用户)。