You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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,提问作者ボックスボ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:45:02