树莓派GIPO入门(一):LED灯

所需硬件

  • 树莓派3代B型(40 GIPO引脚)
  • 杜邦线(公对母)
  • 面包板
  • 发光二极管(LED小灯)

预备知识

什么是GIPO

GPIO是General Purpose Input Output (通用输入/输出)的缩写,一般译为总线扩展器,人们利用工业标准I2C、SMBus或SPI接口简化了I/O口的扩展。当微控制器或芯片组没有足够的I/O端口,或当系统需要采用远端串行通信或控制时,GPIO产品能够提供额外的控制和监视功能。
目前你只需要知道GIPO可以提供电流让你的元器件通电。它的各引脚信息如下:
GIPO编号图

面包板

一排为相连
如何使用面包板
果壳网-如何使用面包板
面包板内部图

发光二极管

长的一脚为正极,短的一脚为负极

呼吸灯代码:

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
#!/usr/bin/env python
# encoding: utf-8

import RPi.GPIO
import time

RPi.GPIO.setmode(RPi.GPIO.BCM)
RPi.GPIO.setup(14, RPi.GPIO.OUT)

# 创建一个 PWM 实例,需要两个参数,第一个是GPIO端口号,这里我们用14号
# 第二个是频率(Hz),频率越高LED看上去越不会闪烁,相应对CPU要求就越高,设置合适的值就可以
pwm = RPi.GPIO.PWM(14, 70)

# 启用 PWM,参数是占空比(可以理解为电流大小),范围:0.0 <= 占空比 >= 100.0
pwm.start(0)

try:
while True:
# 电流从小到大,LED由暗到亮
for i in xrange(0, 101, 1):
# 更改占空比(电流大小),
pwm.ChangeDutyCycle(i)
time.sleep(.02)

# 再让电流从大到小,LED由亮变暗
for i in xrange(100, -1, -1):
pwm.ChangeDutyCycle(i)
time.sleep(.02)

# 最后一段是一个小技巧。这个程序如果不强制停止会不停地执行下去。
# 而Ctrl+C强制终端程序的话,GPIO口又没有机会清理。
# 加上一个try except 可以捕捉到Ctrl+C强制中断的动作,
# 试图强制中断时,程序不会马上停止而是会先跳到这里来做一些你想做完的事情,比如清理GPIO口。
except KeyboardInterrupt:
pass

# 停用 PWM
pwm.stop()

# 清理GPIO口
RPi.GPIO.cleanup()

#

脉宽调制(PWM)

简单的说,PWM技术就是不停的通断电路并控制通断持续的时间片段长度来控制用电器在单位时间内实际得到的电能。
这么说好像还是复杂了,再简单点说,如果你的手足够快,打开电灯开关后马上关闭,如果这个时间间隔足够短,灯丝还没有全部亮起来就暗下去了。你再次打开电灯再关闭,再打开再关闭。。。如果你一直保持相同的频率,那么电灯应该会保持一个固定的亮度不变。理论上,你可以通过调整开灯持续的时间长度和关灯持续的时间长度的比例就能得到不同亮度了。这个比例被称为“占空比”。

跑马灯效果:

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
import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BOARD)

channels = [7,11,13,15]
p = [0 for x in range(4)]

for ch in channels:
GPIO.setup(ch, GPIO.OUT)

for i in range(4):
p[i] = GPIO.PWM(channels[i], 50) #频率设为50Hz
p[i].start(0) #0是占空比

try:
while True:
for ch in range(4):
for dc in range(0, 101, 1):
p[ch].ChangeDutyCycle(dc) #更改占空比
time.sleep(0.005)
for dc in range(100, -1, -1):
p[ch].ChangeDutyCycle(dc)
time.sleep(0.005)
except KeyboardInterrupt:
gpio.cleanup()
print "All Cleanup!"
© 2019 lvbin's Blog All Rights Reserved.
Theme by hiero