3. 按键控制LED亮灭

按键控制LED亮灭 学习卡片

任务说明

本案例实现一个按键控制LED亮灭的完整闭环:通过GPIO读取按键输入状态,当按键按下时点亮LED,松开时熄灭LED。代码基于树莓派GPIO库(RPi.GPIO),采用轮询方式检测按键状态,不依赖外部中断,逻辑清晰且易于验证。

硬件连接

树莓派 GPIO GPIO17 GPIO27 3.3V GND 按键 LED + 长脚 330Ω → 按键一端 → 按键另一端 → 按键另一端 → LED 负极 → GND 接线说明: GPIO17 → 按键一端;GPIO27 → 按键另一端(同时接3.3V) GPIO17 内部下拉,按键按下时读到高电平

代码实现

#!/usr/bin/env python3
import RPi.GPIO as GPIO
import time

# 引脚定义
BUTTON_PIN = 17   # 按键输入引脚(内部下拉)
LED_PIN = 27      # LED控制引脚

# GPIO初始化
GPIO.setmode(GPIO.BCM)
GPIO.setup(BUTTON_PIN, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(LED_PIN, GPIO.OUT)
GPIO.output(LED_PIN, GPIO.LOW)

print("按键控制LED已启动,按 Ctrl+C 退出")

try:
    while True:
        # 读取按键状态
        button_state = GPIO.input(BUTTON_PIN)
        
        # 按键按下时点亮LED,松开时熄灭
        if button_state == GPIO.HIGH:
            GPIO.output(LED_PIN, GPIO.HIGH)
        else:
            GPIO.output(LED_PIN, GPIO.LOW)
            
        # 短暂延时,避免CPU占用过高
        time.sleep(0.05)

except KeyboardInterrupt:
    print("\n程序已退出")

finally:
    GPIO.cleanup()

运行与验证

运行方法:

sudo python3 button_led.py

验证步骤与判定标准:

  1. 运行程序后,观察终端无报错输出,程序进入循环等待状态;
  2. 按下按键(GPIO17与3.3V连通),LED应立即点亮;
  3. 松开按键,LED应立即熄灭;
  4. 重复按下/松开多次,LED状态始终跟随按键状态变化,即判定本案例通过。

预期输出:程序启动后终端显示“按键控制LED已启动,按 Ctrl+C 退出”,此后无其他输出,LED状态完全由按键控制。按下按键时LED亮,松开时LED灭。