Raspberry Pi串流设备声音检测控制GPIO触发功放方案求助
树莓派串流设备GPIO控制功放启停解决方案
本方案无需编写Python代码,仅通过Shell脚本和系统服务即可实现需求,适配shairport-sync、tidal-connect、Spotify三类音频服务。
前置依赖安装
执行以下命令安装所需工具:
sudo apt update && sudo apt upgrade -y sudo apt install alsa-utils gpiod -y
1. 编写音频检测控制脚本
将以下内容保存到 /usr/local/bin/audio_gpio_control.sh:
#!/bin/bash # 可修改以下配置参数 GPIO_PIN=21 IDLE_TIMEOUT=300 # 无音频自动关功放的超时时间,单位为秒,默认300秒即5分钟 # 初始化GPIO引脚,默认高电平(功放关闭) gpioset gpiochip0 $GPIO_PIN=1 idle_timer=0 while true; do # 检测当前是否有音频正在播放 has_audio=$(cat /proc/asound/card*/pcm*/sub*/status | grep -c "RUNNING") if [ $has_audio -gt 0 ]; then # 有播放行为,置GPIO21为低电平启动功放,重置计时器 gpioset gpiochip0 $GPIO_PIN=0 idle_timer=0 else # 无播放行为,计时器累加 idle_timer=$((idle_timer + 1)) # 达到超时时间,置GPIO21为高电平关闭功放 if [ $idle_timer -ge $IDLE_TIMEOUT ]; then gpioset gpiochip0 $GPIO_PIN=1 fi fi # 检测间隔为1秒,无需修改 sleep 1 done
给脚本添加执行权限:
sudo chmod +x /usr/local/bin/audio_gpio_control.sh
2. 配置开机自启服务
将以下内容保存到 /etc/systemd/system/audio_gpio.service:
[Unit] Description=Audio playback GPIO control service After=sound.target syslog.target network.target [Service] Type=simple ExecStart=/usr/local/bin/audio_gpio_control.sh Restart=always RestartSec=5 User=root [Install] WantedBy=multi-user.target
执行以下命令启用服务:
sudo systemctl daemon-reload sudo systemctl enable --now audio_gpio.service
可执行sudo systemctl status audio_gpio.service查看运行状态,显示active (running)即为正常运行。
功能验证
- 启动任意音频服务播放内容,GPIO21会立即变为低电平触发功放启动
- 停止所有音频播放后等待5分钟,GPIO21会自动变为高电平触发功放关闭
- 若需调整超时时间或修改控制引脚,直接修改脚本开头的配置参数后重启服务即可:
sudo systemctl restart audio_gpio.service
内容的提问来源于stack exchange,提问作者JanLP
相关产品推荐
相关产品推荐

