树莓派Raspberry Pi3B+学习笔记5
很多教程讲的都是利用GPIO口控制外设,这里讲一讲怎么控制raspberry 3B+的两个板载LED灯PWR和ACT
一、树莓派的两个板载LED
树莓派有两个板载LED,分别是PWR LED和ACT LED,用来指示树莓派的工作状态。PWR LED为led1,ACT LED为led2,我们可以用如下方法进行控制:
1、GPIO控制
将板载LED转为GPIO模式,之后通过控制GPIO口的输出来控制灯的亮灭(我没有找到GPIO口编号…就没有用这种方式了)
2、LX终端控制
在LX终端上输入命令语句进行控制。用户pi是没有权限去修改灯的状态的,故将LED设置为GPIO模式后,可以使用管道“|”加上tee(从标准输入读取写入标准输出和文件),给tee命令提权(sudo),由此写入brightness文件,控制指示灯的亮灭。控制命令如下:
将PWR LED设置为GPIO模式 (默认不亮)
echo gpio | sudo tee /sys/class/leds/led1/trigger # 这时候LED设置为GPIO模式了
启动 (1)/关闭(0) PWR LED
echo 1 | sudo tee /sys/class/leds/led1/brightness # 灯亮
echo 0 | sudo tee /sys/class/leds/led1/brightness # 灯灭
将PWR LED设置回检测电源连接的模式(初始模式)
echo input | sudo tee /sys/class/leds/led1/trigger # 最后调回此模式,作为指示灯
将ACT LED设置为GPIO模式
echo gpio | sudo tee /sys/class/leds/led1/trigger
启动 (1)/关闭(0) ACT LED
echo 1 | sudo tee /sys/class/leds/led0/brightness # 灯亮
echo 0 | sudo tee /sys/class/leds/led0/brightness # 灯灭
将ACT LED设置回初始模式
echo cpu0 | sudo tee /sys/class/leds/led0/trigger # 最后调回此模式,作为指示灯
3、python控制(略有问题…)
在python上写代码控制LED灯(以PWR LED为例):
!!!
!!!!!!先贴代码,后说问题,看完代码后一定一定先往后看!!!!!!!
!!!
from time import sleep
led = open('/sys/class/leds/led1/brightness', 'w') //打开控制亮灭的文件brightness; w指write,写入文件
while True:
led.write('0')#turn off
sleep(0.5)
led.write('1')#turn on
sleep(0.5)
①在LX终端上将LED设置为GPIO模式:echo gpio | sudo tee /sys/class/leds/led1/trigger
②树莓派上默认运行的pi用户是没有权限打开brightness这个文件的,直接运行程序会报错permission denied。我解决这个问题的方法是开放了brightness的权限… 后面一篇学习笔记说到如何修改树莓派里linux系统的文件权限
③取得权限后就可以在循环里写入值来控制LED的亮灭啦,然后我遇到了问题… 下面说一下…
(1) turn off是没有问题的:我们可以现在LX终端上点亮PWR LED,之后在python中通过led.write(‘0’)将brightness文件改为0,此时PWR LED会熄灭;
(2) turn on会报错:运行led.write(‘1’)时会出现OSError: [Errno 34] Numerical result out of range的错误,暂时还不知道怎么解决(扶额
在线求一个解决方法2333