1. 项目简介
验证通过开关来控制GPIO的电平状态,从而采集用户的按键操作
验证直接通GPIO的拉电流来带动LED发光
下面是本次实验的实物图
按键控制LED与Scratch对象开发笔记
这是Scratch程序展示效果,当按动开关,LED指示灯亮,显示器中飞机呼啸而过。
2. 硬件连接
为了使用按钮开关,必须使用一个上拉电阻来将GPIO口的电压提升至3.3v,表示高电平。同时为了防止通过LED的电流过大烧坏LED,必须在LED上串联一个限流电阻。GPIO的驱动能力十分弱小,只能提供最大 16mA的电流,通过欧姆定律可以计算得出限流电阻阻值为:
3.3/0.016=202
即最好不小于220欧,
2.1 硬件清单
R1: 10k 上拉电阻,将GPIO拉高成高电平,选用 4.7K - 10K的电阻
R2: 330 限流电阻,限制通过LED1的电流
S1: 微动开关
LED1: 发光二级管
2.2 电路原理
当 S1断开,GPIO20的电流为灌电流,GPIO20处于高电平状态,
当 S1短路,电流从S1入地,GPIO20变成低电平
2.3 电路实验
2.3.1 测量进入GPIO20的电流大小
S1断开时:进入 GPIO20的电流为 0.11mA
S1闭合时:进入 GPIO20的电流为 0mA
2.3.2 测量流经LED的电流大小
3. 程序实现
3.1 Python程序
#!/usr/bin/python3
#conding=utf-8
'''
created on 2018-1-2
@author JianXing
按键控制LED灯
'''
pin_led=21
pin_btn=20
import RPi.GPIO as GPIO
import time
def init():
GPIO.setmode(GPIO.BCM)
GPIO.setup(pin_led,GPIO.OUT)
GPIO.setup(pin_btn,GPIO.IN)
def reset():
GPIO.setup(pin_led, GPIO.LOW)
GPIO.setup(pin_btn, GPIO.LOW)
'''
开关控制LED函数
'''
def switch():
while True:
if GPIO.input(pin_btn)==GPIO.LOW:
print("button is pushed, turn on the light, pin_btn is LOW")
GPIO.setup(pin_led, GPIO.LOW)
else :
print("button is released, turn off the light, pin_btn is HIGH")
GPIO.setup(pin_led, GPIO.HIGH)
time.sleep(0.2)
if __name__=="__main__":
init()
#GPIO.setup(pin_led, GPIO.LOW)
#GPIO.setup(pin_btn, GPIO.HIGH)
#time.sleep(10)
switch()
reset()
GPIO.cleanup()
3.2 Scratch实现