3. GPIO控制LED实现本地逻辑

任务目标

在本案例中,你将通过GPIO(通用输入输出)引脚控制一个LED以固定频率闪烁,从而理解边缘AI设备最基本的数字输出操作。该操作是后续驱动传感器(输入)和执行器(输出)的基础。

硬件与依赖

  • 硬件:树莓派(Raspberry Pi 3B/4B/Zero 2W 均可)、1个LED、1个220Ω限流电阻、面包板及跳线。
  • 接线:LED阳极(长脚)串联电阻后连接至树莓派BCM编号的GPIO 17(物理引脚11);LED阴极(短脚)连接GND(物理引脚6)。
  • 软件依赖:Python 3 + RPi.GPIO库(树莓派系统通常预装,若未安装执行 sudo pip3 install RPi.GPIO)。

关键完整代码

以下代码实现了LED以1秒间隔(0.5秒亮,0.5秒灭)连续闪烁,并在收到键盘中断时清理GPIO状态后退出。

import RPi.GPIO as GPIO
import time

LED_PIN = 17  # BCM编号

# 初始化GPIO模式与引脚
GPIO.setmode(GPIO.BCM)
GPIO.setup(LED_PIN, GPIO.OUT, initial=GPIO.LOW)

try:
    while True:
        GPIO.output(LED_PIN, GPIO.HIGH)  # LED点亮
        time.sleep(0.5)
        GPIO.output(LED_PIN, GPIO.LOW)   # LED熄灭
        time.sleep(0.5)
except KeyboardInterrupt:
    pass  # 捕获Ctrl+C,进入清理流程
finally:
    GPIO.cleanup()  # 释放引脚,恢复默认状态

运行与验证

  1. 将上述代码保存为 led_blink.py。
  2. 在树莓派终端中运行:python3 led_blink.py
  3. 通过条件:观察LED以约0.5秒间隔稳定闪烁;按 Ctrl+C 终止程序后,LED立即熄灭(说明GPIO已被正确清理)。

常见问题

  • 引脚编号错误:确认代码中使用的是BCM 17,而非物理引脚17(物理引脚17为3.3V电源)。
  • LED不亮:检查LED极性是否接反(长脚接GPIO侧),以及电阻是否串联在回路中。
  • 权限错误:若提示无法访问GPIO,尝试 sudo python3 led_blink.py。
树莓派 GPIO 17 (BCM) 物理引脚 11 GND (物理引脚 6) 220Ω 限流电阻 LED 阳极→GPIO 阴极→GND 电流方向

上图展示了GPIO 17经限流电阻驱动LED、再返回GND的完整回路。程序通过交替将引脚置为高电平(3.3V)和低电平(0V),即可控制LED亮灭,实现本地逻辑输出。