[i2s_audio] Move test bus into a shared package and give fixtures unique ids (#16793)

This commit is contained in:
J. Nick Koston
2026-06-04 17:28:32 -05:00
committed by GitHub
parent 82efa45187
commit 9fbd4c38ae
30 changed files with 122 additions and 115 deletions

View File

@@ -3,7 +3,7 @@ i2s_audio:
speaker:
- platform: i2s_audio
id: speaker_id
id: spdif_speaker_id
dac_type: external
i2s_dout_pin: ${spdif_data_pin}
spdif_mode: true

View File

@@ -1,14 +1,11 @@
psram:
mode: quad
i2s_audio:
i2s_lrclk_pin: GPIO18
i2s_bclk_pin: GPIO19
microphone:
- platform: i2s_audio
id: echo_microphone
i2s_din_pin: GPIO17
i2s_audio_id: i2s_audio_bus
i2s_din_pin: ${mic_din_pin}
adc_type: external
pdm: true
bits_per_sample: 16bit

View File

@@ -1 +1,7 @@
substitutions:
mic_din_pin: GPIO36
packages:
i2s_audio: !include ../../test_build_components/common/i2s_audio/esp32-idf.yaml
<<: !include common.yaml

View File

@@ -1 +1,7 @@
substitutions:
mic_din_pin: GPIO18
packages:
i2s_audio: !include ../../test_build_components/common/i2s_audio/esp32-s3-idf.yaml
<<: !include common.yaml

View File

@@ -6,14 +6,10 @@ esphome:
decibel_reduction: 10
duration: 1s
i2s_audio:
i2s_lrclk_pin: ${lrclk_pin}
i2s_bclk_pin: ${bclk_pin}
i2s_mclk_pin: ${mclk_pin}
speaker:
- platform: i2s_audio
id: mixer_output_speaker_id
i2s_audio_id: i2s_audio_bus
dac_type: external
i2s_dout_pin: ${dout_pin}
bits_per_sample: 32bit

View File

@@ -1,10 +1,8 @@
substitutions:
lrclk_pin: GPIO4
bclk_pin: GPIO5
mclk_pin: GPIO15
dout_pin: GPIO14
packages:
spi: !include ../../test_build_components/common/spi/esp32-idf.yaml
i2s_audio: !include ../../test_build_components/common/i2s_audio/esp32-idf.yaml
<<: !include common.yaml

View File

@@ -1,7 +1,7 @@
substitutions:
lrclk_pin: GPIO4
bclk_pin: GPIO5
mclk_pin: GPIO6
dout_pin: GPIO7
packages:
i2s_audio: !include ../../test_build_components/common/i2s_audio/esp32-s3-idf.yaml
<<: !include common.yaml

View File

@@ -1,13 +1,9 @@
i2s_audio:
i2s_lrclk_pin: ${lrclk_pin}
i2s_bclk_pin: ${bclk_pin}
i2s_mclk_pin: ${mclk_pin}
speaker:
- platform: i2s_audio
id: speaker_id
id: resampler_i2s_speaker_id
i2s_audio_id: i2s_audio_bus
dac_type: external
i2s_dout_pin: ${dout_pin}
- platform: resampler
id: resampler_speaker_id
output_speaker: speaker_id
output_speaker: resampler_i2s_speaker_id

View File

@@ -1,10 +1,8 @@
substitutions:
lrclk_pin: GPIO4
bclk_pin: GPIO5
mclk_pin: GPIO15
dout_pin: GPIO14
dout_pin: GPIO21
packages:
spi: !include ../../test_build_components/common/spi/esp32-idf.yaml
i2s_audio: !include ../../test_build_components/common/i2s_audio/esp32-idf.yaml
<<: !include common.yaml

View File

@@ -1,7 +1,7 @@
substitutions:
lrclk_pin: GPIO4
bclk_pin: GPIO5
mclk_pin: GPIO6
dout_pin: GPIO7
dout_pin: GPIO16
packages:
i2s_audio: !include ../../test_build_components/common/i2s_audio/esp32-s3-idf.yaml
<<: !include common.yaml

View File

@@ -8,13 +8,10 @@ esphome:
- router.speaker.switch_output:
target_speaker: !lambda return id(speaker_a_id);
i2s_audio:
i2s_lrclk_pin: ${a_lrclk_pin}
i2s_bclk_pin: ${a_bclk_pin}
speaker:
- platform: i2s_audio
id: speaker_a_id
i2s_audio_id: i2s_audio_bus
dac_type: external
i2s_dout_pin: ${a_dout_pin}
sample_rate: 48000
@@ -22,6 +19,7 @@ speaker:
channel: stereo
- platform: i2s_audio
id: speaker_b_id
i2s_audio_id: i2s_audio_bus
dac_type: external
i2s_dout_pin: ${b_dout_pin}
spdif_mode: true

View File

@@ -1,7 +1,8 @@
substitutions:
a_lrclk_pin: GPIO4
a_bclk_pin: GPIO5
a_dout_pin: GPIO14
b_dout_pin: GPIO19
a_dout_pin: GPIO26
b_dout_pin: GPIO27
packages:
i2s_audio: !include ../../test_build_components/common/i2s_audio/esp32-idf.yaml
<<: !include common.yaml

View File

@@ -1,11 +1,8 @@
i2s_audio:
i2s_lrclk_pin: ${i2s_bclk_pin}
i2s_bclk_pin: ${i2s_lrclk_pin}
microphone:
- platform: i2s_audio
id: i2s_microphone
i2s_din_pin: ${i2s_dout_pin}
i2s_audio_id: i2s_audio_bus
i2s_din_pin: ${i2s_din_pin}
adc_type: external
bits_per_sample: 16bit

View File

@@ -1,9 +1,8 @@
substitutions:
i2s_bclk_pin: GPIO25
i2s_lrclk_pin: GPIO26
i2s_dout_pin: GPIO27
i2s_din_pin: GPIO39
packages:
spi: !include ../../test_build_components/common/spi/esp32-idf.yaml
i2s_audio: !include ../../test_build_components/common/i2s_audio/esp32-idf.yaml
<<: !include common.yaml

View File

@@ -1,6 +1,7 @@
substitutions:
i2s_bclk_pin: GPIO4
i2s_lrclk_pin: GPIO5
i2s_dout_pin: GPIO6
i2s_din_pin: GPIO17
packages:
i2s_audio: !include ../../test_build_components/common/i2s_audio/esp32-s3-idf.yaml
<<: !include common.yaml

View File

@@ -14,11 +14,6 @@ esphome:
- speaker.finish:
- speaker.stop:
i2s_audio:
i2s_lrclk_pin: ${i2s_bclk_pin}
i2s_bclk_pin: ${i2s_lrclk_pin}
i2s_mclk_pin: ${i2s_mclk_pin}
audio_dac:
- platform: aic3204
i2c_id: i2c_bus
@@ -27,6 +22,7 @@ audio_dac:
speaker:
- platform: i2s_audio
id: speaker_with_audio_dac_id
i2s_audio_id: i2s_audio_bus
audio_dac: internal_dac
dac_type: external
i2s_dout_pin: ${i2s_dout_pin}

View File

@@ -48,13 +48,9 @@ button:
data: !lambda |-
return {0x01, 0x02, (uint8_t)id(my_number).state};
i2s_audio:
i2s_lrclk_pin: ${i2s_bclk_pin}
i2s_bclk_pin: ${i2s_lrclk_pin}
i2s_mclk_pin: ${i2s_mclk_pin}
speaker:
- platform: i2s_audio
id: speaker_id
i2s_audio_id: i2s_audio_bus
dac_type: external
i2s_dout_pin: ${i2s_dout_pin}

View File

@@ -1,10 +1,8 @@
substitutions:
i2s_bclk_pin: GPIO27
i2s_lrclk_pin: GPIO26
i2s_mclk_pin: GPIO25
i2s_dout_pin: GPIO23
i2s_dout_pin: GPIO33
packages:
i2c: !include ../../test_build_components/common/i2c/esp32-idf.yaml
i2s_audio: !include ../../test_build_components/common/i2s_audio/esp32-idf.yaml
<<: !include common-audio_dac.yaml

View File

@@ -1,9 +1,7 @@
substitutions:
scl_pin: GPIO16
sda_pin: GPIO17
i2s_bclk_pin: GPIO27
i2s_lrclk_pin: GPIO26
i2s_mclk_pin: GPIO25
i2s_dout_pin: GPIO23
i2s_dout_pin: GPIO13
packages:
i2s_audio: !include ../../test_build_components/common/i2s_audio/esp32-idf.yaml
<<: !include common-media_player.yaml

View File

@@ -1,10 +1,8 @@
substitutions:
i2s_bclk_pin: GPIO27
i2s_lrclk_pin: GPIO26
i2s_mclk_pin: GPIO25
i2s_dout_pin: GPIO12
i2s_dout_pin: GPIO13
packages:
i2c: !include ../../test_build_components/common/i2c/esp32-idf.yaml
i2s_audio: !include ../../test_build_components/common/i2s_audio/esp32-idf.yaml
<<: !include common.yaml

View File

@@ -1,17 +1,13 @@
i2s_audio:
i2s_lrclk_pin: ${i2s_bclk_pin}
i2s_bclk_pin: ${i2s_lrclk_pin}
i2s_mclk_pin: ${i2s_mclk_pin}
speaker:
- platform: i2s_audio
id: speaker_id
id: speaker_source_speaker_id
i2s_audio_id: i2s_audio_bus
dac_type: external
i2s_dout_pin: ${i2s_dout_pin}
sample_rate: 48000
num_channels: 2
- platform: mixer
output_speaker: speaker_id
output_speaker: speaker_source_speaker_id
source_speakers:
- id: announcement_mixer_speaker_id
- id: media_mixer_speaker_id

View File

@@ -1,9 +1,7 @@
substitutions:
scl_pin: GPIO16
sda_pin: GPIO17
i2s_bclk_pin: GPIO27
i2s_lrclk_pin: GPIO26
i2s_mclk_pin: GPIO25
i2s_dout_pin: GPIO23
i2s_dout_pin: GPIO22
packages:
i2s_audio: !include ../../test_build_components/common/i2s_audio/esp32-idf.yaml
<<: !include common.yaml

View File

@@ -11,14 +11,9 @@ wifi:
api:
i2s_audio:
i2s_lrclk_pin: ${i2s_lrclk_pin}
i2s_bclk_pin: ${i2s_bclk_pin}
i2s_mclk_pin: ${i2s_mclk_pin}
micro_wake_word:
id: mww_id
microphone: mic_id_external
microphone: va_mic_id_external
on_wake_word_detected:
- voice_assistant.start:
wake_word: !lambda return wake_word;
@@ -27,31 +22,34 @@ micro_wake_word:
microphone:
- platform: i2s_audio
id: mic_id_external
id: va_mic_id_external
i2s_audio_id: i2s_audio_bus
i2s_din_pin: ${i2s_din_pin}
adc_type: external
pdm: false
- platform: i2s_audio
id: mic_id_external2
id: va_mic_id_external2
i2s_audio_id: i2s_audio_bus
i2s_din_pin: ${i2s_din_pin2}
adc_type: external
pdm: false
speaker:
- platform: i2s_audio
id: speaker_id
id: va_speaker_id
i2s_audio_id: i2s_audio_bus
dac_type: external
i2s_dout_pin: ${i2s_dout_pin}
voice_assistant:
microphone:
- microphone: mic_id_external
- microphone: va_mic_id_external
gain_factor: 4
channels: 0
- microphone: mic_id_external2
- microphone: va_mic_id_external2
gain_factor: 4
channels: 0
speaker: speaker_id
speaker: va_speaker_id
micro_wake_word: mww_id
conversation_timeout: 60s
on_listening:

View File

@@ -11,30 +11,27 @@ wifi:
api:
i2s_audio:
i2s_lrclk_pin: ${i2s_lrclk_pin}
i2s_bclk_pin: ${i2s_bclk_pin}
i2s_mclk_pin: ${i2s_mclk_pin}
microphone:
- platform: i2s_audio
id: mic_id_external
id: va_mic_id_external
i2s_audio_id: i2s_audio_bus
i2s_din_pin: ${i2s_din_pin}
adc_type: external
pdm: false
speaker:
- platform: i2s_audio
id: speaker_id
id: va_speaker_id
i2s_audio_id: i2s_audio_bus
dac_type: external
i2s_dout_pin: ${i2s_dout_pin}
voice_assistant:
microphone:
microphone: mic_id_external
microphone: va_mic_id_external
gain_factor: 4
channels: 0
speaker: speaker_id
speaker: va_speaker_id
conversation_timeout: 60s
on_listening:
- logger.log: "Voice assistant microphone listening"

View File

@@ -1,9 +1,9 @@
substitutions:
i2s_lrclk_pin: GPIO4
i2s_bclk_pin: GPIO5
i2s_mclk_pin: GPIO15
i2s_din_pin: GPIO13
i2s_din_pin2: GPIO14
i2s_dout_pin: GPIO12
i2s_din_pin: GPIO34
i2s_din_pin2: GPIO35
i2s_dout_pin: GPIO32
packages:
i2s_audio: !include ../../test_build_components/common/i2s_audio/esp32-idf.yaml
<<: !include common-idf.yaml

View File

@@ -145,6 +145,15 @@ Same pin allocations as standard I2C, but with 10kHz frequency for components re
Same UART pins as above, plus:
- **flow_control_pin**: GPIO4 (all platforms)
### I2S Audio
Provides a shared `i2s_audio_bus` (clock pins only); ESP32 family only:
- **ESP32 IDF / ESP32-S3 IDF**: BCLK=GPIO5, LRCLK=GPIO4, MCLK=GPIO15
Each consumer keeps its own `i2s_dout_pin`/`i2s_din_pin` substitution and must use a
unique data pin, since several speakers/microphones can share one bus when grouped.
The `i2s_audio` component itself (and the isolated PDM `microphone`) keep defining the
bus inline and are not grouped.
### BLE
- **ESP32**: Shared `esp32_ble_tracker` infrastructure
- Each component defines unique `ble_client` with different MAC addresses

View File

@@ -0,0 +1,14 @@
# Common I2S audio bus configuration for ESP32 IDF tests
# Provides a shared i2s_audio bus that speaker/microphone components can use
# Each consumer must give its speaker/microphone a unique data pin
substitutions:
i2s_bclk_pin: GPIO5
i2s_lrclk_pin: GPIO4
i2s_mclk_pin: GPIO15
i2s_audio:
- id: i2s_audio_bus
i2s_bclk_pin: ${i2s_bclk_pin}
i2s_lrclk_pin: ${i2s_lrclk_pin}
i2s_mclk_pin: ${i2s_mclk_pin}

View File

@@ -0,0 +1,14 @@
# Common I2S audio bus configuration for ESP32-S3 IDF tests
# Provides a shared i2s_audio bus that speaker/microphone components can use
# Each consumer must give its speaker/microphone a unique data pin
substitutions:
i2s_bclk_pin: GPIO5
i2s_lrclk_pin: GPIO4
i2s_mclk_pin: GPIO15
i2s_audio:
- id: i2s_audio_bus
i2s_bclk_pin: ${i2s_bclk_pin}
i2s_lrclk_pin: ${i2s_lrclk_pin}
i2s_mclk_pin: ${i2s_mclk_pin}