[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

@@ -59,6 +59,7 @@ DIRECT_BUS_TYPES = (
"modbus", "modbus",
"remote_transmitter", "remote_transmitter",
"remote_receiver", "remote_receiver",
"i2s_audio",
) )
# Signature for components with no bus requirements # Signature for components with no bus requirements

View File

@@ -53,6 +53,7 @@ BASE_BUS_COMPONENTS = {
"canbus", "canbus",
"remote_transmitter", "remote_transmitter",
"remote_receiver", "remote_receiver",
"i2s_audio",
} }
# Cache version for components graph # Cache version for components graph

View File

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

View File

@@ -1,14 +1,11 @@
psram: psram:
mode: quad mode: quad
i2s_audio:
i2s_lrclk_pin: GPIO18
i2s_bclk_pin: GPIO19
microphone: microphone:
- platform: i2s_audio - platform: i2s_audio
id: echo_microphone id: echo_microphone
i2s_din_pin: GPIO17 i2s_audio_id: i2s_audio_bus
i2s_din_pin: ${mic_din_pin}
adc_type: external adc_type: external
pdm: true pdm: true
bits_per_sample: 16bit 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 <<: !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 <<: !include common.yaml

View File

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

View File

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

View File

@@ -1,7 +1,7 @@
substitutions: substitutions:
lrclk_pin: GPIO4
bclk_pin: GPIO5
mclk_pin: GPIO6
dout_pin: GPIO7 dout_pin: GPIO7
packages:
i2s_audio: !include ../../test_build_components/common/i2s_audio/esp32-s3-idf.yaml
<<: !include common.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: speaker:
- platform: i2s_audio - platform: i2s_audio
id: speaker_id id: resampler_i2s_speaker_id
i2s_audio_id: i2s_audio_bus
dac_type: external dac_type: external
i2s_dout_pin: ${dout_pin} i2s_dout_pin: ${dout_pin}
- platform: resampler - platform: resampler
id: resampler_speaker_id id: resampler_speaker_id
output_speaker: speaker_id output_speaker: resampler_i2s_speaker_id

View File

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

View File

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

View File

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

View File

@@ -1,7 +1,8 @@
substitutions: substitutions:
a_lrclk_pin: GPIO4 a_dout_pin: GPIO26
a_bclk_pin: GPIO5 b_dout_pin: GPIO27
a_dout_pin: GPIO14
b_dout_pin: GPIO19 packages:
i2s_audio: !include ../../test_build_components/common/i2s_audio/esp32-idf.yaml
<<: !include common.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: microphone:
- platform: i2s_audio - platform: i2s_audio
id: i2s_microphone id: i2s_microphone
i2s_din_pin: ${i2s_dout_pin} i2s_audio_id: i2s_audio_bus
i2s_din_pin: ${i2s_din_pin}
adc_type: external adc_type: external
bits_per_sample: 16bit bits_per_sample: 16bit

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,10 +1,8 @@
substitutions: substitutions:
i2s_bclk_pin: GPIO27 i2s_dout_pin: GPIO13
i2s_lrclk_pin: GPIO26
i2s_mclk_pin: GPIO25
i2s_dout_pin: GPIO12
packages: packages:
i2c: !include ../../test_build_components/common/i2c/esp32-idf.yaml 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 <<: !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: speaker:
- platform: i2s_audio - platform: i2s_audio
id: speaker_id id: speaker_source_speaker_id
i2s_audio_id: i2s_audio_bus
dac_type: external dac_type: external
i2s_dout_pin: ${i2s_dout_pin} i2s_dout_pin: ${i2s_dout_pin}
sample_rate: 48000 sample_rate: 48000
num_channels: 2 num_channels: 2
- platform: mixer - platform: mixer
output_speaker: speaker_id output_speaker: speaker_source_speaker_id
source_speakers: source_speakers:
- id: announcement_mixer_speaker_id - id: announcement_mixer_speaker_id
- id: media_mixer_speaker_id - id: media_mixer_speaker_id

View File

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

View File

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

View File

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

View File

@@ -1,9 +1,9 @@
substitutions: substitutions:
i2s_lrclk_pin: GPIO4 i2s_din_pin: GPIO34
i2s_bclk_pin: GPIO5 i2s_din_pin2: GPIO35
i2s_mclk_pin: GPIO15 i2s_dout_pin: GPIO32
i2s_din_pin: GPIO13
i2s_din_pin2: GPIO14 packages:
i2s_dout_pin: GPIO12 i2s_audio: !include ../../test_build_components/common/i2s_audio/esp32-idf.yaml
<<: !include common-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: Same UART pins as above, plus:
- **flow_control_pin**: GPIO4 (all platforms) - **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 ### BLE
- **ESP32**: Shared `esp32_ble_tracker` infrastructure - **ESP32**: Shared `esp32_ble_tracker` infrastructure
- Each component defines unique `ble_client` with different MAC addresses - 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}