Why is the wake word entity unavailable in my ESP32 voice assistant device?

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

Use the configuration code from Echo Atom as an example.

1 Like