2. LED闪烁控制

任务说明

本案例使用Python标准库直接操作树莓派GPIO引脚,通过循环控制引脚高低电平输出,驱动LED实现周期性闪烁。目标为:LED以1秒为周期(0.5秒亮、0.5秒灭)持续闪烁,直至用户按下Ctrl+C终止程序。

硬件连接

树莓派 GPIO Pin 11 (GPIO17) BCM: 17 Pin 39 (GND) GND BCM编号模式 330Ω LED 阳极→阴极 电流方向 → GPIO17输出高电平(3.3V)时LED点亮 GND(0V)构成回路

连接说明:将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频率(每秒亮灭各一次)闪烁。

验证步骤与判定标准:

  1. 观察LED是否以约0.5秒亮、0.5秒灭的节奏持续闪烁——若LED保持常亮或常灭,检查接线极性及GPIO17是否被其他程序占用;
  2. 使用万用表测量GPIO17与GND之间电压,应观察到3.3V与0V交替变化,周期约1秒;
  3. 按Ctrl+C终止程序,LED应熄灭且无报错输出——若出现RuntimeError,说明GPIO资源未正确释放,检查代码中GPIO.cleanup()是否执行。

满足以上三点即判定案例实现成功。程序终止后,GPIO引脚恢复为默认输入状态,LED熄灭属正常现象。