Hello folks, I've been having some issues getting my ESP32-S3 node working with sendspin. I think I've got the media_player entity working with normal media and announcements, but I can't get media from music assistant to play over sendspin. What could I be doing wrong? Are there any super basic configuration files I can reference to get it working as if it were a Voice PE satellite's sendspin does, but without all of the other lighting and speech detection fluff? Thanks ๐
Here's my configuration:
substitutions:
name: home-assistant-media-office
friendly_name: Home Assistant Media - Office
esphome:
name: ${name}
name_add_mac_suffix: false
friendly_name: ${friendly_name}
esp32:
board: seeed_xiao_esp32s3
framework:
type: esp-idf
psram:
mode: octal
speed: 80MHz
api:
encryption:
key: !secret api_encryption_key
ota:
platform: esphome
password: !secret ota_password
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
use_address: "office.ha-media-player.brins0.lan"
logger:
level: DEBUG
# SendSpin is a 2026 native component, but ensure your
# ESPHome version is up to date (2026.3.0+)
external_components:
- source: github://pr#8065
components: [i2s_audio]
refresh: 0s
- source: github://pr#12284
components: [mdns, sendspin]
- source: github://pr#12253
components: [mixer]
- source: github://pr#12258
components: [media_player]
# 1. Define the I2S Audio Bus
i2s_audio:
- id: i2s_output
i2s_lrclk_pin: GPIO8 # D9 on XIAO
i2s_bclk_pin: GPIO7 # D8 on XIAO
# 2. Define the Speaker Component
speaker:
# Hardware speaker output
- id: i2s_audio_speaker
platform: i2s_audio
sample_rate: 48000
i2s_mode: primary
i2s_dout_pin: GPIO9
bits_per_sample: 16bit
i2s_audio_id: i2s_output
dac_type: external
channel: stereo
timeout: never
use_apll: true
buffer_duration: 250ms
spdif_mode: true
# Virtual speakers to combine the announcement and media streams
# together into one output
- platform: mixer
id: mixing_speaker
output_speaker: i2s_audio_speaker
num_channels: 2
task_stack_in_psram: false
source_speakers:
- id: announcement_mixing_input
timeout: never
- id: media_mixing_input
timeout: never
# Virtual speakers to resample each pipelines' audio, if necessary,
# as the mixer speaker requires the same sample rate
- platform: resampler
id: announcement_resampling_speaker
output_speaker: announcement_mixing_input
sample_rate: 48000
bits_per_sample: 16
- platform: resampler
id: media_resampling_speaker
output_speaker: media_mixing_input
sample_rate: 48000
bits_per_sample: 16
# 3. Configure the Media Player with Announcement Pipeline
media_player:
- platform: speaker
id: output_media_player
name: "Media Player"
# Announcement pipeline allows HA to interrupt music for TTS/Alerts
announcement_pipeline:
format: FLAC # FLAC is the least processor intensive codec
num_channels: 1 # Stereo audio is unnecessary for announcements
sample_rate: 48000
speaker: announcement_resampling_speaker
media_pipeline:
format: FLAC # FLAC is the least processor intensive codec
num_channels: 2
sample_rate: 48000
speaker: media_resampling_speaker
# 4. Enable SendSpin for Multi-Room Sync
sendspin:
id: sendspin_client
task_stack_in_psram: false
# Typical board status LED
light:
- platform: status_led
name: "Status LED"
pin:
number: GPIO21
inverted: true