Hi there,
I’m playing around with the Adafruit PDM MEMS Microphone Breakout and ESP32-S3, but can’t get it working. As far as I was able to find out, The i2s can be assignet to every avaible GPIO on the S3. But I can’t see anything in logs. Here is my yaml:
substitutions:
board: esp32-s3-devkitc-1
name: esp32-s3-mic
friendly_name: ESP32 S3 Mic
sclk_pin: GPIO41 # MP34DT01 SEL
bclk_pin: GPIO40 # MP34DT01 CLK
din_pin: GPIO39 # MP34DT01 DAT
esphome:
name: ${name}
friendly_name: ${friendly_name}
esp32:
board: ${board}
framework:
type: arduino
# type: esp-idf
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "ycJWxK4CJUtf722n4d0kunETziWAZp6rpObngZlx+XU="
ota:
password: !secret wifi_password
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "${friendly_name} Fallback Hotspot"
password: !secret wifi_password
captive_portal:
i2s_audio:
i2s_lrclk_pin: ${sclk_pin} # MP34DT01 SEL
i2s_bclk_pin: ${bclk_pin} # MP34DT01 CLK
microphone:
- platform: i2s_audio
id: mic_i2s
i2s_din_pin: ${din_pin} # MP34DT01 DAT
adc_type: external
pdm: true
voice_assistant:
id: va
microphone: mic_i2s
# media_player: media_player_speaker
noise_suppression_level: 2
use_wake_word: false
auto_gain: 31dBFS
volume_multiplier: 4.0
on_listening:
- light.turn_on:
id: led_light
effect: "Scan"
red: 0%
green: 50%
blue: 93%
on_stt_vad_end:
- light.turn_on:
id: led_light
effect: "Rainbow"
on_wake_word_detected:
- light.turn_on:
id: led_light
on_stt_end:
- light.turn_on:
id: led_light
effect: "Rainbow"
on_end:
- delay: 100ms
- light.turn_off:
id: led_light
on_error:
- light.turn_on:
id: led_light
red: 100%
green: 0%
blue: 0%
brightness: 100%
effect: "Fast Pulse"
- if:
condition:
switch.is_on: use_wake_word
then:
- switch.turn_off: use_wake_word
- delay: 1sec
- switch.turn_on: use_wake_word
on_client_connected:
- if:
condition:
switch.is_on: use_wake_word
then:
- voice_assistant.start_continuous:
on_client_disconnected:
- if:
condition:
switch.is_on: use_wake_word
then:
- voice_assistant.stop:
binary_sensor:
- platform: status
name: API Connection
id: api_connection
filters:
- delayed_on: 1s
on_press:
- if:
condition:
switch.is_on: use_wake_word
then:
- voice_assistant.start_continuous:
on_release:
- if:
condition:
switch.is_on: use_wake_word
then:
- voice_assistant.stop:
switch:
- platform: template
name: Use wake word
id: use_wake_word
optimistic: true
restore_mode: RESTORE_DEFAULT_ON
entity_category: config
on_turn_on:
- lambda: id(va).set_use_wake_word(true);
- if:
condition:
not:
- voice_assistant.is_running
then:
- voice_assistant.start_continuous
- script.execute: reset_led
on_turn_off:
- voice_assistant.stop
- lambda: id(va).set_use_wake_word(false);
- script.execute: reset_led
- platform: template
name: Use Listen Light
id: use_listen_light
optimistic: true
restore_mode: RESTORE_DEFAULT_ON
entity_category: config
on_turn_on:
- script.execute: reset_led
on_turn_off:
- script.execute: reset_led
light:
- platform: neopixelbus
id: led_light
type: grb
pin: GPIO14 # DIN pin of the LED Strip
num_leds: 8 # change the Number of LEDS according to your LED Strip.
name: "Light"
variant: ws2812x
default_transition_length: 0.5s
effects:
- addressable_scan:
name: Scan
move_interval: 50ms
scan_width: 2
- addressable_rainbow:
name: Rainbow
speed: 10
width: 50
- pulse:
name: "Fast Pulse"
transition_length: 100ms
update_interval: 100ms
min_brightness: 50%
max_brightness: 100%
script:
- id: reset_led
then:
- if:
condition:
- switch.is_on: use_wake_word
- switch.is_on: use_listen_light
then:
- light.turn_on:
id: led_light
red: 100%
green: 89%
blue: 71%
brightness: 60%
effect: none
else:
- light.turn_off: led_light
Also The LED Ring doesn’t light up. Same code, on esp32-wroom works with diffrent Pin mapping:
substitutions:
board: esp32dev
name: esp32-mic-speaker
friendly_name: esp32-mic-speaker
sclk_pin: GPIO23 # MSM261S4030H0 WS
bclk_pin: GPIO22 # MSM261S4030H0 CLK
din_pin: GPIO21 # MSM261S4030H0 DAT
Where is my misstake and what’s the right mapping for S3 with MP34DT01?
Thank you for your help!