【注意】最后更新于 December 6, 2019,文中内容可能已过时,请谨慎使用。
通过一个python
脚本跑一个监控 cpu 的交通信号灯,运行环境是官方的系统 Raspbian
执行脚本
有编程基础的同学就直接上手好了:
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
|
#! /usr/bin/env python
# to use with Pi Traffic Light
import RPi.GPIO as GPIO
import psutil
GREEN = 13
YELLOW = 19
RED = 26
# Pin Setup:
GPIO.setmode(GPIO.BCM) # Broadcom pin-numbering scheme.
GPIO.setwarnings(False)
GPIO.setup(GREEN, GPIO.OUT)
GPIO.setup(YELLOW, GPIO.OUT)
GPIO.setup(RED, GPIO.OUT)
try:
while (1):
cpu_pc = psutil.cpu_percent(interval=2)
print 'CPU: %d%%' % (cpu_pc)
if cpu_pc <= 50:
GPIO.output(RED, False)
GPIO.output(YELLOW, False)
GPIO.output(GREEN, True)
if 50 < cpu_pc < 90:
GPIO.output(GREEN, False)
GPIO.output(RED, False)
GPIO.output(YELLOW, True)
if cpu_pc >=90 :
GPIO.output(GREEN, False)
GPIO.output(YELLOW, False)
GPIO.output(RED, True)
except KeyboardInterrupt:
print "Good bye"
GPIO.output(GREEN, False)
GPIO.output(YELLOW, False)
GPIO.output(RED, False)
GPIO.cleanup()
|
- 如果出现提示
****line 5, in <module> import psutil*****
提示缺少psutil
模块,就按照下面的
方法安装:
代码原文
1
2
3
|
wget https://pypi.python.org/packages/source/p/psutil/psutil-3.2.2.tar.gz
cd psutil-3.2.2
python setup.py install
|
如果报错检查 gcc,python-devel 是否安装(官方系统的话会把这些环境默认安装好,不用管的)
针脚怎么插?
软件方面的搞定了,接下来需要搞明白怎么配置硬件了,这是树莓派系列的针脚图(咱们这是3代,最右边的那个):
我又从网上找的一张实物图
这是我淘来的信号灯
这两个都是针脚型的,但是我有一个40针脚的扁平线可以用来对接,按照信号灯指定的端口插就行
插好以后就直接运行脚本就行比如这个脚本叫做 traffic.py
,就运行
就能看到效果
代码都做了什么?
- 引入需要用到的模块,
RPi.GPIO
针脚输出,psutil
用于系统监控
1
2
3
4
5
|
#! /usr/bin/env python
# to use with Pi Traffic Light
import RPi.GPIO as GPIO
import psutil
|
- 定义三个灯输出的针脚
1
2
3
|
GREEN = 13
YELLOW = 19
RED = 26
|
- 对指定的针脚进行设置
1
2
3
4
5
6
|
# Pin Setup:
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(GREEN, GPIO.OUT)
GPIO.setup(YELLOW, GPIO.OUT)
GPIO.setup(RED, GPIO.OUT)
|
- 这里的
GPIO.setmode(GPIO.BCM)
就是指定了输出模式为按照信道编号,就是上图中的GPIO2,GPIO3...
这类
如果GPIO.setmode(GPIO.BOARD)
就是Pin No.1 => GPIO1
,使用物理针脚的编号作为输出信道
GPIO.setwarnings(False)
关闭warning 提示
GPIO.setup(GREEN, GPIO.OUT)
将对应的信道设置为输出信道
- 通过 while 循环检索 cpu 的使用情况并输出,且根据所占百分比显示相应的灯
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
while (1):
cpu_pc = psutil.cpu_percent(interval=2)
print 'CPU: %d%%' % (cpu_pc)
if cpu_pc <= 50:
GPIO.output(RED, False)
GPIO.output(YELLOW, False)
GPIO.output(GREEN, True)
if 50 < cpu_pc < 90:
GPIO.output(GREEN, False)
GPIO.output(RED, False)
GPIO.output(YELLOW, True)
if cpu_pc >=90 :
GPIO.output(GREEN, False)
GPIO.output(YELLOW, False)
GPIO.output(RED, True)
|
GPIO.output(GREEN, False)
和GPIO.output(GREEN, True)
猜都能猜到是控制输出的啦
- 对于程序退出的操作:把灯全关了,再调用
GPIO.cleanup()
释放资源
1
2
3
4
5
6
7
8
9
10
|
try:
// some code....
except KeyboardInterrupt:
print "Good bye"
GPIO.output(GREEN, False)
GPIO.output(YELLOW, False)
GPIO.output(RED, False)
GPIO.cleanup()
|
总结
这个 demo 只是对 GPIO 的输出进行展示,还没涉及到信号输入,接下来如果有空的话我会做一个输入的 demo
相关-极客大讲堂:手把手教你用树莓派控制红绿灯
文章作者
GPF
上次更新
2019-12-06
(7ba517e)