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

求助:Orange Pi PC GPIO按钮控制音频播放(启停、进退)的简易实现方法

Orange Pi PC GPIO按钮控制音频播放的简易方案

一、先搞定硬件和软件准备

1. 硬件接线

  • 准备3个普通按钮,分别对应「播放/暂停」「上一曲」「下一曲」
  • 每个按钮的一端接Orange Pi PC的GPIO引脚(比如选BOARD编号的11、12、13脚,对应PA0、PA1、PA2),另一端直接接GND引脚即可,不用额外上拉电阻,代码里会启用软件上拉
  • 不清楚引脚编号的话,查Orange Pi PC的官方引脚图,BOARD编号就是板上印的数字

2. 安装必要工具和库

打开终端,复制粘贴以下命令执行:

# 更新软件源并安装mpg123(命令行音频播放器,支持MP3等常见格式)
sudo apt update && sudo apt install -y mpg123
# 安装gpiozero(比OPi.GPIO更易用的GPIO操作库,新手友好)
sudo pip install gpiozero

二、核心代码实现(直接复制使用)

新建一个名为audio_controller.py的文件,粘贴以下代码:

from gpiozero import Button
import subprocess
import time

# 配置三个按钮,使用BOARD引脚编号,启用软件上拉
play_pause_btn = Button(11, pull_up=True)
prev_btn = Button(12, pull_up=True)
next_btn = Button(13, pull_up=True)

# 替换成你自己的音频文件路径,可添加任意数量曲目
audio_files = [
    "/home/orangepi/Music/song1.mp3",
    "/home/orangepi/Music/song2.mp3",
    "/home/orangepi/Music/song3.mp3"
]

current_track = 0  # 当前播放曲目索引
player_process = None  # 保存播放进程对象
is_playing = False  # 标记播放状态

def play_track(index):
    global player_process, is_playing
    # 终止之前的播放进程(如果存在)
    if player_process:
        player_process.terminate()
        player_process.wait()
    # 启动新的播放进程,-q参数用于隐藏冗余输出
    player_process = subprocess.Popen(["mpg123", "-q", audio_files[index]])
    is_playing = True
    print(f"正在播放: {audio_files[index]}")

def toggle_play_pause():
    global player_process, is_playing
    if not player_process:
        # 未启动播放时,直接播放当前曲目
        play_track(current_track)
        return
    if is_playing:
        # 发送暂停信号
        player_process.send_signal(subprocess.signal.SIGSTOP)
        is_playing = False
        print("已暂停")
    else:
        # 发送继续播放信号
        player_process.send_signal(subprocess.signal.SIGCONT)
        is_playing = True
        print("继续播放")

def play_previous():
    global current_track
    # 循环切换到上一曲目
    current_track = (current_track - 1) % len(audio_files)
    play_track(current_track)

def play_next():
    global current_track
    # 循环切换到下一曲目
    current_track = (current_track + 1) % len(audio_files)
    play_track(current_track)

# 为按钮绑定触发事件
play_pause_btn.when_pressed = toggle_play_pause
prev_btn.when_pressed = play_previous
next_btn.when_pressed = play_next

# 保持程序持续运行
try:
    while True:
        time.sleep(1)
except KeyboardInterrupt:
    # 退出时清理播放进程
    if player_process:
        player_process.terminate()
    print("程序已退出")

三、使用方法

  1. 修改音频路径:将代码中audio_files列表里的路径替换成你自己的音频文件路径,支持MP3等mpg123兼容格式
  2. 运行代码:在终端执行python3 audio_controller.py,按下按钮即可控制音频
  3. 按钮功能说明:
    • 播放/暂停按钮:首次按下启动播放,后续按下切换暂停/继续状态
    • 上一曲按钮:切换到曲目列表的上一首并自动播放
    • 下一曲按钮:切换到曲目列表的下一首并自动播放

方案优势

  • gpiozero比OPi.GPIO更简洁,无需手动配置引脚模式、上拉电阻,降低新手学习成本
  • 采用mpg123命令行工具控制播放,比Pygame音频API更直观,调试和修改更简单
  • 代码逻辑拆分清晰,每个功能对应独立函数,后续扩展新功能(比如音量调节)也容易

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 05:05:32