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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:54:01