2. LED闪烁控制
任务说明
本案例使用Python标准库直接操作树莓派GPIO引脚,通过循环控制引脚高低电平输出,驱动LED实现周期性闪烁。目标为:LED以1秒为周期(0.5秒亮、0.5秒灭)持续闪烁,直至用户按下Ctrl+C终止程序。
硬件连接
连接说明:将LED阳极(长脚)串联330Ω限流电阻后接至树莓派GPIO17(物理Pin 11),LED阴极(短脚)接GND(物理Pin 39)。
代码实现
#!/usr/bin/env python3
import RPi.GPIO as GPIO
import time
LED_PIN = 17 # BCM编号,对应物理Pin 11
BLINK_INTERVAL = 0.5 # 单位:秒,高/低电平持续时间
def setup():
"""初始化GPIO设置"""
GPIO.setmode(GPIO.BCM) # 使用BCM引脚编号
GPIO.setup(LED_PIN, GPIO.OUT) # 设置GPIO17为输出模式
GPIO.output(LED_PIN, GPIO.LOW) # 初始状态:LED熄灭
def blink_loop():
"""主循环:交替输出高低电平,实现LED闪烁"""
try:
while True:
GPIO.output(LED_PIN, GPIO.HIGH) # 点亮LED
time.sleep(BLINK_INTERVAL) # 保持0.5秒
GPIO.output(LED_PIN, GPIO.LOW) # 熄灭LED
time.sleep(BLINK_INTERVAL) # 保持0.5秒
except KeyboardInterrupt:
pass # 捕获Ctrl+C,退出循环
finally:
GPIO.cleanup() # 清理GPIO资源,恢复引脚状态
if __name__ == "__main__":
setup()
blink_loop()
运行与验证
运行方法:
sudo python3 led_blink.py
需要root权限访问GPIO硬件。程序启动后,LED应立即以1Hz频率(每秒亮灭各一次)闪烁。
验证步骤与判定标准:
- 观察LED是否以约0.5秒亮、0.5秒灭的节奏持续闪烁——若LED保持常亮或常灭,检查接线极性及GPIO17是否被其他程序占用;
- 使用万用表测量GPIO17与GND之间电压,应观察到3.3V与0V交替变化,周期约1秒;
- 按
Ctrl+C终止程序,LED应熄灭且无报错输出——若出现RuntimeError,说明GPIO资源未正确释放,检查代码中GPIO.cleanup()是否执行。
满足以上三点即判定案例实现成功。程序终止后,GPIO引脚恢复为默认输入状态,LED熄灭属正常现象。