本文由树莓派实验室创作,遵循CC协议(署名-非商业性使用-禁止演绎-相同方式共享),欢迎树莓派爱好者们遵循协议内容转载传播。谢绝不遵守协议的转载和抄袭。
本节将介绍如何基于 PWM 来实现呼吸灯。当检测到后台有下载进程(wget)正在运行的时候,呼吸灯闪烁,而进程如果运行结束,则停止闪烁保持常亮状态。
本例程中涉及到的 SAKS 扩展板引脚编号如下:
功能 |
| 注释 | BOARD
编码 | BCM
编码 | wiringPi
编码 | LED排灯 | LED-D6 | 第5个LED(绿) | 27 | 0 | 30 | 先实现一个不用监控进程的呼吸灯效果,程序代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(0, GPIO.OUT)
pwm = GPIO.PWM(0, 50)
pwm.start(0)
pause_time = 0.01
try:
while True:
for i in xrange(0, 101, 1):
pwm.ChangeDutyCycle(i)
# off
time.sleep(pause_time)
time.sleep(1)
for i in xrange(100, -1, -1):
pwm.ChangeDutyCycle(i)
# on
time.sleep(pause_time)
except KeyboardInterrupt:
# stop the white PWM output
pwm.stop()
# clean up GPIO on CTRL+C exit
GPIO.cleanup()
|
保存为breathinglight.py,运行这段程序代码,将看到绿色的呼吸灯渐强渐弱,缓慢闪烁。其中 GPIO.PWM(0, 50) 表示在BCM编号为0的IO脚设置一个频率为50HZ的PWM实例。pwm.start(0)用来设定占空比,0表示没有波动。PWM的具体用法可以参考
1
| sudo python breathinglight.py
|
下面将加入对下载进程的监控。首先要了解当系统进程中有 wget 命令在运行时,表示存在文件的下载。当然,任何进程都可能出现下载数据的可能,而我们只打算检测 wget 命令方式的下载。
读取系统进程列表,如果发现 wget 命令,则返回 TRUE。将这段逻辑加入上面呼吸灯的代码中。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
| import RPi.GPIO as GPIO
import time
import subprocess
GPIO.setmode(GPIO.BCM)
GPIO.setup(0, GPIO.OUT)
# 默认点亮LED表示正在检测进程
GPIO.output(0, GPIO.LOW)
pwm = GPIO.PWM(0, 50)
pwm.start(0)
pause_time = 0.01
def process_exist():
proc = subprocess.Popen("ps aux | grep wget", stdout = subprocess.PIPE, stderr = subprocess.PIPE, shell = True)
stdout = proc.communicate()
for line in stdout:
if line.count('http') > 0:
print(line)
return True
return False
try:
while True:
if process_exist():
for i in xrange(0, 101, 1):
pwm.ChangeDutyCycle(i)
# off
time.sleep(pause_time)
time.sleep(1)
for i in xrange(100, -1, -1):
pwm.ChangeDutyCycle(i)
# on
time.sleep(pause_time)
else:
time.sleep(pause_time * 10)
except KeyboardInterrupt:
# stop the white PWM output
pwm.stop()
# clean up GPIO on CTRL+C exit
GPIO.cleanup()
|
运行之后,如果系统中没有尚未执行完的 wget 进程,绿色 LED 将常亮。
1
| screen sudo python breathinglight.py
|
再 Crtl-A 接着按下 D 键切换出终端,并手动运行一个 wget 命令,下载一个较大的文件测试下,此处的文件 URL 请自己替换。
1
| wget http://xxx.xxx.xxx.xxx/test.exe
|
此时绿色的 LED 将开始闪烁。
这个功能将让你通过 SAKS 扩展板的 LED 了解对大文件的下载完成情况。也可以稍加改变,检测其他进程的运行情况。
我们后面将介绍更多基于 SAKS 扩展板的有趣的内容,欢迎持续关注! |