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

如何使用树莓派4的GPIO引脚控制pyglet脚本运行

树莓派GPIO控制pyglet程序实现方案

现有代码问题梳理

  • 原代码中on_key_press是键盘按键监听回调,没有对接GPIO按钮的触发事件
  • 代码中直接使用的button_is_pressed变量未定义,无法正确判断按钮状态
  • pyglet.app.run()是阻塞方法,写在它后面的led.blink()永远不会被执行
  • 没有预留传感器触发的对接逻辑

适配修改后的完整代码

import pyglet
from gpiozero import LED, Button
import random

# 硬件初始化
led = LED(26)
# GPIO21接物理按钮
button = Button(21)
# 开关量输出类传感器直接用Button类初始化,示例接GPIO20,高电平触发加pull_up=False参数即可
sensor = Button(20, pull_up=False)

window = pyglet.window.Window(1920,1080)

img = pyglet.image.load('bv.png')
sprite = pyglet.sprite.Sprite(img, x=window.width/3, y=window.height/3)

# 触发后要执行的逻辑统一封装在此函数中
def trigger_action():
    print("触发条件满足,执行对应逻辑")
    # 触发时点亮闪烁灯
    led.blink()
    # 每次触发都播放音乐可写在此处,不需要重复播放则把加载逻辑移到全局即可
    music = pyglet.resource.media('teste.mp3')
    music.play()

# 绑定按钮和传感器的触发回调
button.when_pressed = trigger_action
sensor.when_pressed = trigger_action

@window.event
def on_draw():
    window.clear()
    sprite.draw()
    
def update(dt):
    sprite.x += random.randint(-10,10)
    sprite.y += random.randint(-10,10)

pyglet.clock.schedule_interval(update,1/3000)
pyglet.app.run()

补充说明

  • 如果使用的是模拟量输出传感器,需要先外接AD转换模块,或更换支持模拟量读取的GPIO库
  • 按钮如果是常闭接法触发逻辑相反,可在Button初始化时加active_state=False参数调整
  • 不需要键盘触发功能可以直接删除原代码中冗余的on_key_press回调

内容的提问来源于stack exchange,提问作者joaomcs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:15:04