After installing the yaml below to my ESP32, I see a symbol for “unavailable” in the Status column for the Wake Word entity, and a symbol for “disabled” for the Firmware entity. Neither entity has logs in the log book, and I can’t find any indications in the device log that anything is going wrong. I’m trying my best to make a voice assistant but am generally struggling to find resources of how to piece things together.
Here are the components I have:
- ESP32 CH340C Development Board
- CJMCU-1334 UDA1334A I2S Audio Stereo Decoder
- INMP441 MEMS I2S Interface
- blue LED light
A picture of my current setup:
The yaml for the device, most of which is adapted from the ESPHome docs:
esphome:
name: esphome-web-31fc88
friendly_name: Talk Box
min_version: 2025.5.0
name_add_mac_suffix: False
on_boot:
priority: -100
then:
- wait_until:
api.connected:
- switch.turn_on: use_wake_word
esp32:
board: esp32dev
framework:
type: esp-idf
logger:
api:
ota:
- platform: esphome
wifi:
ssid: "XXXXXXXX"
password: "XXXXXXXX"
### SWITCHES ###
switch:
- platform: template
name: "Ring Timer"
id: timer_ringing
optimistic: true
restore_mode: ALWAYS_OFF
on_turn_off:
# Stop playing the alarm
- media_player.stop:
announcement: true
- mixer_speaker.apply_ducking: # Stop ducking the media stream over 2 seconds
id: media_spk_mixer_input
decibel_reduction: 0
duration: 2.0s
on_turn_on:
# Duck media audio by 20 decibels instantly
- mixer_speaker.apply_ducking:
id: media_spk_mixer_input
decibel_reduction: 20
duration: 0.0s
- while:
condition:
switch.is_on: timer_ringing
then:
# Play the alarm sound as an announcement
- media_player.speaker.play_on_device_media_file:
media_file: alarm_sound
announcement: true
# Wait until the alarm sound starts playing
- wait_until:
media_player.is_announcing:
# Wait until the alarm sound stops playing
- wait_until:
not:
media_player.is_announcing:
- platform: template
id: use_wake_word
optimistic: true
restore_mode: RESTORE_DEFAULT_OFF
entity_category: config
on_turn_on:
- voice_assistant.start_continuous
on_turn_off:
- voice_assistant.stop
### AUDIO OUT ###
i2s_audio:
id: i2s_bus
i2s_lrclk_pin: GPIO15
i2s_bclk_pin: GPIO5
speaker:
- platform: i2s_audio
id: va_speaker
dac_type: external
i2s_dout_pin: GPIO3
i2s_audio_id: i2s_bus
- platform: mixer
id: mixer_speaker_id
output_speaker: va_speaker
source_speakers:
- id: announcement_spk_mixer_input
- id: media_spk_mixer_input
- platform: resampler
id: media_spk_resampling_input
output_speaker: media_spk_mixer_input
- platform: resampler
id: announcement_spk_resampling_input
output_speaker: announcement_spk_mixer_input
media_player:
- platform: speaker
name: "Speaker Media Player"
id: speaker_media_player_id
media_pipeline:
speaker: media_spk_resampling_input
num_channels: 2
announcement_pipeline:
speaker: announcement_spk_resampling_input
num_channels: 1
files:
- id: alarm_sound
file: alarm.flac # Placed in the yaml directory. Should be encoded with a 48000 Hz sample rate, mono or stereo audio, and 16 bits per sample.
### AUDIO IN ###
microphone:
- platform: i2s_audio
id: va_microphone
i2s_audio_id: i2s_bus
i2s_din_pin: GPIO2
adc_type: external
micro_wake_word:
microphone: va_microphone
id: va_wake_word
vad:
models:
- model: okay_nabu
### VA ###
light:
- platform: status_led
id: va_led
pin: GPIO17
voice_assistant:
id: va
microphone: va_microphone
speaker: va_speaker
micro_wake_word: va_wake_word
use_wake_word: True
on_wake_word_detected:
then:
- light.turn_on: va_led
on_idle:
then:
- light.turn_off: va_led