树莓派 Python 控制 LED 灯程序:实现双按键开关控制
使用 Python 控制树莓派的 LED 灯 - 双按键开关控制
本教程将指导你使用 Python 和 RPi.GPIO 库来控制树莓派的 GPIO 引脚,实现两个按键控制 4 个 LED 灯的开关状态。
功能需求:
- K1 键: 控制所有 4 个 LED 灯的整体开/关
- 按下 K1 键,所有 LED 灯全开
- 再次按下 K1 键,所有 LED 灯全关
- K2 键: 控制左右两组 LED 灯的独立开/关
- 按下 K2 键,左边的 2 个 LED 灯开,右边的 2 个 LED 灯关
- 再次按下 K2 键,切换开关的 LED 灯内容,即左边的 2 个 LED 灯关,右边的 2 个 LED 灯开
示例代码:
import RPi.GPIO as GPIO
import time
# 设置 GPIO 模式为 BCM 模式
GPIO.setmode(GPIO.BCM)
# 定义 LED 引脚
led_pins = [18, 23, 24, 25]
left_led_pins = [18, 23]
right_led_pins = [24, 25]
# 初始化 LED 引脚为输出模式
GPIO.setup(led_pins, GPIO.OUT)
GPIO.setup(left_led_pins, GPIO.OUT)
GPIO.setup(right_led_pins, GPIO.OUT)
# 定义变量来控制 LED 的状态
led_status = False
left_led_status = False
right_led_status = False
# 定义 K1 键的回调函数
def k1_callback(channel):
global led_status
if led_status:
# 如果 LED 灯是开的,则关闭 LED 灯
GPIO.output(led_pins, GPIO.LOW)
led_status = False
else:
# 如果 LED 灯是关的,则打开 LED 灯
GPIO.output(led_pins, GPIO.HIGH)
led_status = True
# 定义 K2 键的回调函数
def k2_callback(channel):
global left_led_status, right_led_status
if left_led_status and right_led_status:
# 如果左右两组 LED 灯都是开的,则关闭 LED 灯
GPIO.output(left_led_pins, GPIO.LOW)
GPIO.output(right_led_pins, GPIO.LOW)
left_led_status = False
right_led_status = False
else:
# 如果左右两组 LED 灯有一个是关的,则打开 LED 灯
GPIO.output(left_led_pins, GPIO.HIGH)
GPIO.output(right_led_pins, GPIO.HIGH)
left_led_status = True
right_led_status = True
# 设置 K1 键和 K2 键的 GPIO 引脚为输入模式,并设置上拉电阻
GPIO.setup(27, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(22, GPIO.IN, pull_up_down=GPIO.PUD_UP)
# 添加事件检测,当 K1 键或 K2 键按下时调用对应的回调函数
GPIO.add_event_detect(27, GPIO.FALLING, callback=k1_callback, bouncetime=200)
GPIO.add_event_detect(22, GPIO.FALLING, callback=k2_callback, bouncetime=200)
# 主循环
try:
while True:
time.sleep(0.1)
except KeyboardInterrupt:
pass
# 清理 GPIO 资源
GPIO.cleanup()
代码解释:
- 导入库: 导入
RPi.GPIO库用于控制 GPIO 引脚,以及time库用于延时。 - 定义引脚: 定义 LED 灯和按键的 GPIO 引脚编号。
- 初始化引脚: 将 LED 引脚设置为输出模式,按键引脚设置为输入模式,并设置上拉电阻。
- 定义变量: 定义变量来存储 LED 灯的当前状态。
- 定义回调函数: 为每个按键定义回调函数,当按键按下时调用对应的函数来改变 LED 灯的状态。
- 事件检测: 添加事件检测,当按键按下时(GPIO 电平下降)调用相应的回调函数。
- 主循环: 使用
while True循环让程序持续运行,并在循环中使用time.sleep()函数来延时,避免程序占用过多 CPU 资源。 - 异常处理: 使用
try...except块来捕获键盘中断信号,以便在用户按下 Ctrl+C 时安全退出程序。 - 清理资源: 在程序结束时使用
GPIO.cleanup()函数来清理 GPIO 资源。
运行程序:
- 将代码保存为 Python 文件(例如,
led_control.py)。 - 在树莓派终端中运行命令
sudo python3 led_control.py。 - 按下 K1 键或 K2 键测试 LED 灯的控制。
注意:
- 确保 LED 灯的连接方式正确,并且引脚与代码中定义的引脚一致。
- 确保树莓派已启用 GPIO 功能,可以通过命令
sudo raspi-config进行设置。 - 运行程序时需要使用
sudo命令以获取权限访问 GPIO 引脚。
更多功能:
- 可以添加更多按键,实现更复杂的功能。
- 可以使用其他库,例如
RPi.GPIO或wiringpi来控制 GPIO 引脚。 - 可以使用 GUI 工具来创建更加友好的用户界面。
希望本教程能够帮助你使用 Python 控制树莓派的 LED 灯,并进行更深入的探索。
原文地址: https://www.cveoy.top/t/topic/o4P6 著作权归作者所有。请勿转载和采集!