求助: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("程序已退出")
三、使用方法
- 修改音频路径:将代码中
audio_files列表里的路径替换成你自己的音频文件路径,支持MP3等mpg123兼容格式 - 运行代码:在终端执行
python3 audio_controller.py,按下按钮即可控制音频 - 按钮功能说明:
- 播放/暂停按钮:首次按下启动播放,后续按下切换暂停/继续状态
- 上一曲按钮:切换到曲目列表的上一首并自动播放
- 下一曲按钮:切换到曲目列表的下一首并自动播放
方案优势
gpiozero比OPi.GPIO更简洁,无需手动配置引脚模式、上拉电阻,降低新手学习成本- 采用
mpg123命令行工具控制播放,比Pygame音频API更直观,调试和修改更简单 - 代码逻辑拆分清晰,每个功能对应独立函数,后续扩展新功能(比如音量调节)也容易
内容的提问来源于stack exchange,提问作者Savoo
相关产品推荐
相关产品推荐

