基于Raspberry Pi的多LED颜色序列Python程序开发及终止功能问询
树莓派多彩色LED自定义序列控制+按键终止方案
嘿,刚好做过类似的树莓派LED项目,给你一套直接能用的实现方案,完美适配你的需求:
一、硬件接线提示
首先得确认你的彩色LED是共阴型还是共阳型:
- 共阴LED:公共脚接GND,红、绿、蓝引脚分别通过220Ω限流电阻接树莓派GPIO
- 共阳LED:公共脚接3.3V,各颜色引脚通过电阻接GPIO(低电平点亮)
下面的代码默认用共阴型,要是你用共阳的话,把颜色值的0和1反过来就行。
二、完整Python实现代码
import RPi.GPIO as GPIO import time import threading # -------------------------- 配置参数 -------------------------- # 定义每个RGB LED的引脚(BCM编号),根据你的接线修改 led_pins = [ {"r": 17, "g": 27, "b": 22}, # 第一个LED的红、绿、蓝引脚 {"r": 5, "g": 6, "b": 13} # 第二个LED的红、绿、蓝引脚 ] # 为每个LED定义专属颜色序列,(r,g,b)对应亮灭(共阴:1=亮,0=灭,支持小数调光) led_sequences = [ # LED1序列:红→绿→蓝→全亮→灭,每个状态持续1秒 [(1,0,0), (0,1,0), (0,0,1), (1,1,1), (0,0,0)], # LED2序列:黄→青→紫→半亮红→灭,每个状态持续0.8秒 [(1,1,0), (0,1,1), (1,0,1), (0.5,0,0), (0,0,0)] ] sequence_delay = [1, 0.8] # 每个LED序列的状态间隔时间(秒) stop_button_pin = 23 # 终止程序的按键引脚(接GND触发) running = True # 全局运行标志 # -------------------------- LED控制函数 -------------------------- def control_led(led_idx): pins = led_pins[led_idx] sequence = led_sequences[led_idx] delay = sequence_delay[led_idx] # 初始化当前LED的引脚为输出 GPIO.setup(pins["r"], GPIO.OUT) GPIO.setup(pins["g"], GPIO.OUT) GPIO.setup(pins["b"], GPIO.OUT) # 初始化PWM对象支持调光 pwm_r = GPIO.PWM(pins["r"], 1000) pwm_g = GPIO.PWM(pins["g"], 1000) pwm_b = GPIO.PWM(pins["b"], 1000) pwm_r.start(0) pwm_g.start(0) pwm_b.start(0) while running: for r_val, g_val, b_val in sequence: if not running: break # 设置PWM占空比(0-100对应亮度) pwm_r.ChangeDutyCycle(r_val * 100) pwm_g.ChangeDutyCycle(g_val * 100) pwm_b.ChangeDutyCycle(b_val * 100) time.sleep(delay) # 停止PWM并关闭LED pwm_r.stop() pwm_g.stop() pwm_b.stop() GPIO.output(pins["r"], GPIO.LOW) GPIO.output(pins["g"], GPIO.LOW) GPIO.output(pins["b"], GPIO.LOW) # -------------------------- 按键终止处理 -------------------------- def stop_program(channel): global running print("\n收到终止信号,正在停止程序...") running = False # -------------------------- 主程序 -------------------------- if __name__ == "__main__": try: # 设置GPIO模式为BCM GPIO.setmode(GPIO.BCM) # 设置停止按键引脚为输入,启用上拉电阻(按键接GND) GPIO.setup(stop_button_pin, GPIO.IN, pull_up_down=GPIO.PUD_UP) # 绑定按键中断:引脚变低时触发终止函数 GPIO.add_event_detect(stop_button_pin, GPIO.FALLING, callback=stop_program, bouncetime=300) print("程序启动中,按下按键可终止...") # 创建并启动每个LED的控制线程 threads = [] for i in range(len(led_pins)): thread = threading.Thread(target=control_led, args=(i,)) threads.append(thread) thread.start() # 等待所有线程结束 for thread in threads: thread.join() except KeyboardInterrupt: # 处理Ctrl+C终止 print("\nCtrl+C终止程序") running = False finally: # 清理GPIO资源 GPIO.cleanup() print("GPIO资源已清理,程序结束")
三、关键功能说明
- 自定义颜色序列:在
led_sequences里,每个子列表对应一个LED的颜色状态,支持0-1之间的小数实现调光,你可以随意添加更多LED,只要同步更新led_pins和led_sequences配置就行 - 按键终止:用GPIO引脚接物理按键(一端接GPIO23,另一端接GND),按下后会平滑停止所有LED序列并清理资源
- 多LED并行控制:通过
threading模块让每个LED独立运行,保证它们的序列互不干扰,同时执行
四、部署注意事项
- 安装依赖:如果系统没装RPi.GPIO,先运行
sudo apt-get install python3-rpi.gpio - 运行权限:树莓派控制GPIO需要root权限,用
sudo python3 your_script.py启动程序 - 限流电阻:一定要给每个LED引脚加220Ω左右的限流电阻,避免烧坏LED或树莓派GPIO
内容的提问来源于stack exchange,提问作者ボックスボ
相关产品推荐
相关产品推荐

