"ReSpeaker Lite" - new Seeed Studio Voice Assistant Development Kit hardware combine ESP32 with XMOS XU316 DSP chip for advanced audio processing as a ESPHome-based Home Assistant Assist Satellite voice devkit

By the way, I’ve got them to update their documentation, so it will actually make people flash the right FW :

wasnt that what it was earlier today?

the original file they were telling you to download was 1.0.5, but the command line was actually flashing 2.0.5. which is not compatible.

1 Like

It looks like it’s not connecting. Check your antenna connection, I had things like this when antenna wasn’t connected/working properly.

I power with ESP USB.

So bought a full kit with speaker, case, that cam without the s3 already on (didnt know)bought my own . had it working until i tried to remove the speaker wire to install in case and the connecter ripped off the board. It now just boot loops dead.

Oh crap!

Those connectors are very bad, i had many, many occurrences of that in my life.
No way to solder that back on?

it looks like it pulled up 2 wires ( string like) that runs 1/4 way up the board witch is prob shorting out somethin

Ohhh i feel your pain!..

That’s a shame these connections are that brittle!

Uff, new HA release has action assist_satellite.announce, and that actually works with this Respeaker code, since it is using new Nabu media_player with announce possibility!
Looks like i already want to move all my satellites there. Announce is great, it’s using assist-specific TTS engine.

1 Like

I imagine you cleaned the build files before doing this install since the wake word and listen light switches are gone, correct? Also, never hurts to power cycle the Seeed after installing. Usually not necessary but it is on occasion.

Can you read the logs over WiFi? Going by the screenshot everything went unavailable at exactly the same time. You can add a WiFi sensor to see the strength. I have never been a fan of Seeed not using ceramic antennas. It’s like they tried to make it smaller by leaving it out but once attached the antenna is bigger then the esp32. I was noticing slow upload speeds and it turned out the antenna wasn’t completely on correctly.

It would also help to post some log output over WiFi or plugged in to a PC. This will also show the WiFi strength without adding a sensor. If it’s slow over WiFi try putting it closer to your router to see if you get better results. Posting the config with the API/OTA and HS keys/passwords out could also help. Lastly, does the device show up in ESPHome as available (no red at the top)?

When all else fails I delete everything (backing up the YAML file obviously) and recreate everything from scratch. Once again, shouldn’t be needed but has fixed issues for me before in the past on rare occasions.

Wish I would have found this sooner as the acrylic case mount is garbage and easily comes lose as it has 2 sticky square pads to hold the board to the speaker. It does require a different 2" 3 watt speaker (linked on the page) but it works out to be 2 or 3 dollars more than the full kit. Obviously a 3D printer is needed, or a friend with one.

1 Like

Hmm I didnt do a clean Build Files command before. Just did it now.

I have installed this atm but also have your version compiled and ready if needed. The stopping all addons was annoying so did it all in one go.

This went unavailable when I setup the New Respeaker Micro under Voice assistants. Need to play more I think. I gave up after my kids started looking at me funny. Ok Nabu, Ok Nabu… lol. They had never heard that word before.

substitutions:
  voice_assist_idle_phase_id: "1"
  voice_assist_listening_phase_id: "2"
  voice_assist_thinking_phase_id: "3"
  voice_assist_replying_phase_id: "4"
  voice_assist_not_ready_phase_id: "10"
  voice_assist_error_phase_id: "11"
  voice_assist_muted_phase_id: "12"
esphome:
  name: respeakerv3
  friendly_name: respeakerv3
  min_version: 2024.9.0
  platformio_options:
    board_build.flash_mode: dio
  on_boot:
    priority: 600
    then:
      - script.execute: adjust_led
      - delay: 30s
      - if:
          condition:
            lambda: return id(init_in_progress);
          then:
            - lambda: id(init_in_progress) = false;
            - script.execute: adjust_led
esp32:
  board: esp32-s3-devkitc-1
  variant: esp32s3
  flash_size: 8MB
  framework:
    type: esp-idf
    version: recommended
    sdkconfig_options:
      CONFIG_ESP32S3_DEFAULT_CPU_FREQ_240: "y"
      CONFIG_ESP32S3_DATA_CACHE_64KB: "y"
      CONFIG_ESP32S3_DATA_CACHE_LINE_64B: "y"
      CONFIG_ESP32S3_INSTRUCTION_CACHE_32KB: "y"
      CONFIG_ESP32_S3_BOX_BOARD: "y"
      CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY: "y"
      
      CONFIG_SPIRAM_TRY_ALLOCATE_WIFI_LWIP: "y"

      # Settings based on https://github.com/espressif/esp-adf/issues/297#issuecomment-783811702
      CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM: "16"
      CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM: "512"
      CONFIG_ESP32_WIFI_STATIC_TX_BUFFER: "y"
      CONFIG_ESP32_WIFI_TX_BUFFER_TYPE: "0"
      CONFIG_ESP32_WIFI_STATIC_TX_BUFFER_NUM: "8"
      CONFIG_ESP32_WIFI_CACHE_TX_BUFFER_NUM: "32"
      CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED: "y"
      CONFIG_ESP32_WIFI_TX_BA_WIN: "16"
      CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED: "y"
      CONFIG_ESP32_WIFI_RX_BA_WIN: "32"
      CONFIG_LWIP_MAX_ACTIVE_TCP: "16"
      CONFIG_LWIP_MAX_LISTENING_TCP: "16"
      CONFIG_TCP_MAXRTX: "12"
      CONFIG_TCP_SYNMAXRTX: "6"
      CONFIG_TCP_MSS: "1436"
      CONFIG_TCP_MSL: "60000"
      CONFIG_TCP_SND_BUF_DEFAULT: "65535"
      CONFIG_TCP_WND_DEFAULT: "65535"  # Adjusted from linked settings to avoid compilation error
      CONFIG_TCP_RECVMBOX_SIZE: "512"
      CONFIG_TCP_QUEUE_OOSEQ: "y"
      CONFIG_TCP_OVERSIZE_MSS: "y"
      CONFIG_LWIP_WND_SCALE: "y"
      CONFIG_TCP_RCV_SCALE: "3"
      CONFIG_LWIP_TCPIP_RECVMBOX_SIZE: "512"

      CONFIG_BT_ALLOCATION_FROM_SPIRAM_FIRST: "y"
      CONFIG_BT_BLE_DYNAMIC_ENV_MEMORY: "y"

psram:
  mode: octal  # quad for N8R2 and octal for N16R8
  speed: 80MHz

external_components:
  - source:
      type: git
      url: https://github.com/esphome/voice-kit
      ref: dev
    components:
      - aic3204
      - audio_dac
      - media_player
      - micro_wake_word
      - microphone
      - nabu
      - nabu_microphone
      - voice_assistant
      - voice_kit
    refresh: 0s

api:
  encryption:
    key: "removed"  
  on_client_connected:
    - script.execute: adjust_led
  on_client_disconnected:
    - script.execute: adjust_led

ota:
  - platform: esphome
    id: ota_esphome
    password: "removed"

logger:

wifi:
  ssid: !secret wifi_ssid 
  password: !secret wifi_password
  on_connect:
    - script.execute: adjust_led
  on_disconnect:
    - script.execute: adjust_led
  #ssid: !secret wifi_ssid
  #password: !secret wifi_password
  #manual_ip:
  #  static_ip: !secret respeaker_satellite_1_ip
  #  gateway: !secret gateway
  #  subnet: !secret subnet
  #  dns1: !secret dns1
  

captive_portal:

switch:
  - platform: template
    id: timer_ringing
    optimistic: true
    internal: true
    restore_mode: ALWAYS_OFF
    on_turn_on:
      # Duck audio
      - nabu.set_ducking:
          decibel_reduction: 20
          duration: 0.0s
      # Ring timer
      - script.execute: ring_timer
      # Refresh LED
      - script.execute: adjust_led
      # If 15 minutes have passed and the timer is still ringing, stop it.
      - delay: 15min
      - switch.turn_off: timer_ringing
    on_turn_off:
      # Stop any current annoucement (ie: stop the timer ring mid playback)
      - if:
          condition:
            lambda: return id(nabu_media_player)->state == media_player::MediaPlayerState::MEDIA_PLAYER_STATE_ANNOUNCING;
          then:
            lambda: |-
              id(nabu_media_player)
                ->make_call()
                .set_command(media_player::MediaPlayerCommand::MEDIA_PLAYER_COMMAND_STOP)
                .set_announcement(true)
                .perform();
      # Set back ducking ratio to zero
      - nabu.set_ducking:
          decibel_reduction: 0
          duration: 1.0s
      # Refresh the LED ring
      - script.execute: adjust_led

button:
  - platform: safe_mode
    id: button_safe_mode
    name: Safe Mode Boot
  - platform: factory_reset
    id: factory_reset_btn
    name: Factory reset
  - platform: restart
    name: Restart
    id: but_rest
  

binary_sensor:
  - platform: gpio
    pin: 
      number: GPIO4 # D3
      inverted: true
    id: mute
    name: "Mute"
  - platform: gpio
    pin: 
      number: GPIO3 # D2
      inverted: true
    id: user_button
    name: "User button"
    on_multi_click:
      - timing:
          - ON for at most 1s
          - OFF for at least 0.25s
        then:
          - if:
              condition:
                lambda: return !id(init_in_progress);
              then:
                - if:
                    condition:
                      switch.is_on: timer_ringing
                    then:
                      - switch.turn_off: timer_ringing
                    else:
                      - if:
                          condition:
                            lambda: return id(nabu_media_player)->state == media_player::MediaPlayerState::MEDIA_PLAYER_STATE_ANNOUNCING;
                          then:
                            - lambda: |
                                id(nabu_media_player)
                                  ->make_call()
                                  .set_command(media_player::MediaPlayerCommand::MEDIA_PLAYER_COMMAND_STOP)
                                  .set_announcement(true)
                                  .perform();
                          else:
                            - if:
                                condition:
                                  voice_assistant.is_running:
                                then:
                                  - voice_assistant.stop:
                                else:
                                  - if:
                                      condition:
                                        media_player.is_playing:
                                      then:
                                        - media_player.pause:
                                      else:
                                        - if:
                                            condition:
                                              and:
                                                # - switch.is_off: master_mute_switch
                                                - not:
                                                    voice_assistant.is_running
                                            then:
                                              - voice_assistant.start:

light:
  - platform: esp32_rmt_led_strip
    id: led_ww
    rgb_order: GRB
    pin: GPIO1
    num_leds: 1
    rmt_channel: 0
    chipset: ws2812
    name: none
    disabled_by_default: true
    entity_category: config
    default_transition_length: 0s

    effects:
      - pulse:
      - pulse:
          name: "Fast Pulse"
          transition_length: 100ms
          update_interval: 100ms
          min_brightness: 50%
          max_brightness: 100%
      - pulse:
          name: "Slow Pulse"
          transition_length: 250ms
          update_interval: 250ms
          min_brightness: 50%
          max_brightness: 100%


 # Audio and Voice Assistant Config  

i2s_audio:
  - id: i2s_output
    i2s_lrclk_pin: 
      number: GPIO7
      allow_other_uses: true
    i2s_bclk_pin:  
      number: GPIO8
      allow_other_uses: true
    i2s_mclk_pin:  
      number: GPIO9
      allow_other_uses: true

  - id: i2s_input
    i2s_lrclk_pin:  
      number: GPIO7
      allow_other_uses: true
    i2s_bclk_pin:  
      number: GPIO8
      allow_other_uses: true
    i2s_mclk_pin:  
      number: GPIO9
      allow_other_uses: true

microphone:
  - platform: nabu_microphone
    i2s_din_pin: GPIO44
    adc_type: external
    pdm: false
    sample_rate: 16000
    bits_per_sample: 32bit
    i2s_mode: secondary
    i2s_audio_id: i2s_input
    channel_0:
      id: nabu_mic_mww
    channel_1:
      id: nabu_mic_va
      

media_player:
  - platform: nabu
    id: nabu_media_player
    name: Media Player
    internal: false
    sample_rate: 16000
    i2s_dout_pin: GPIO43
    bits_per_sample: 32bit
    i2s_mode: secondary
    i2s_audio_id: i2s_output
    volume_increment: 0.05
    volume_min: 0.4
    volume_max: 0.85
    on_announcement:
      - nabu.set_ducking:
          decibel_reduction: 20
          duration: 0.0s
    on_state:
      if:
        condition:
          and:
            - switch.is_off: timer_ringing
            - not:
                voice_assistant.is_running:
            - not:
                lambda: return id(nabu_media_player)->state == media_player::MediaPlayerState::MEDIA_PLAYER_STATE_ANNOUNCING;
        then:
          - nabu.set_ducking:
              decibel_reduction: 0
              duration: 1.0s

micro_wake_word:
  models:
    - model: https://github.com/kahrendt/microWakeWord/releases/download/okay_nabu/okay_nabu.json
  vad:
  microphone: nabu_mic_mww
  on_wake_word_detected:
    # If a timer is ringing: Stop it, do not start the voice assistant (We can stop timer from voice!)
    - if:
        condition:
          switch.is_on: timer_ringing
        then:
          - switch.turn_off: timer_ringing
        # Start voice assistant, stop current announcement.
        else:
          - if:
              condition:
                lambda: return id(nabu_media_player)->state == media_player::MediaPlayerState::MEDIA_PLAYER_STATE_ANNOUNCING;
              then:
                lambda: |-
                  id(nabu_media_player)
                    ->make_call()
                    .set_command(media_player::MediaPlayerCommand::MEDIA_PLAYER_COMMAND_STOP)
                    .set_announcement(true)
                    .perform();
          - voice_assistant.start:
              wake_word: !lambda return wake_word;

voice_assistant:
  id: va
  microphone: nabu_mic_va
  media_player: nabu_media_player
  noise_suppression_level: 0
  auto_gain: 0dBFS
  volume_multiplier: 1
  on_client_connected:
    - lambda: id(init_in_progress) = false;
    - micro_wake_word.start:
    - lambda: id(voice_assistant_phase) = ${voice_assist_idle_phase_id};
    - script.execute: adjust_led
  on_client_disconnected:
    - voice_assistant.stop:
    - lambda: id(voice_assistant_phase) = ${voice_assist_not_ready_phase_id};
    - script.execute: adjust_led
  on_error:
    - if:
        condition:
          lambda: return !id(init_in_progress);
        then:
          - lambda: id(voice_assistant_phase) = ${voice_assist_error_phase_id};
          - script.execute: adjust_led
          - delay: 1s
          - lambda: id(voice_assistant_phase) = ${voice_assist_idle_phase_id};
          - script.execute: adjust_led
  on_start:
    - nabu.set_ducking:
        decibel_reduction: 20   # Number of dB quieter; higher implies more quiet, 0 implies full volume
        duration: 0.0s          # The duration of the transition (default is 0)
  on_listening:
    - lambda: id(voice_assistant_phase) = ${voice_assist_listening_phase_id};
    - script.execute: adjust_led
  on_stt_vad_end:
    - lambda: id(voice_assistant_phase) = ${voice_assist_thinking_phase_id};
    - script.execute: adjust_led
  on_tts_start:
    - lambda: id(voice_assistant_phase) = ${voice_assist_replying_phase_id};
    - script.execute: adjust_led
  on_end:
    - wait_until:
        not:
          voice_assistant.is_running:
    - nabu.set_ducking:
        decibel_reduction: 0   # 0 dB means no reduction
        duration: 1.0s
    - lambda: id(voice_assistant_phase) = ${voice_assist_idle_phase_id};
    - script.execute: adjust_led
  on_timer_finished:
    - switch.turn_on: timer_ringing

script:
  - id: ring_timer
    then:
      - while:
          condition:
            switch.is_on: timer_ringing
          then:
            - media_player.play_media: http://192.168.0.110:8123/local/sounds/timer-ding.mp3
            - delay: 1s
            - wait_until:
                not:
                  media_player.is_playing:
  - id: adjust_led
    then:
      - if:
          condition:
            lambda: return !id(init_in_progress);
          then:
            - if: 
                condition:
                  switch.is_on: timer_ringing
                then:
                  - light.turn_on:
                      id: led_ww           
                      red: 0%
                      green: 100%
                      blue: 0%
                      brightness: 60%
                      effect: fast pulse 
                else:
                  - if:
                      condition:
                        wifi.connected:
                      then:
                        - if:
                            condition:
                              api.connected:
                            then:
                              - lambda: |
                                  switch(id(voice_assistant_phase)) {
                                    case ${voice_assist_listening_phase_id}:
                                      id(led_ww).turn_on()
                                        .set_brightness(0.6)
                                        .set_rgb(1.0, 0.2, 1.0)
                                        .set_effect("Slow Pulse")
                                        .perform();
                                      break;
                                    case ${voice_assist_thinking_phase_id}:
                                      id(led_ww).turn_on()
                                        .set_brightness(0.6)
                                        .set_rgb(1.0, 0.2, 1.0)
                                        .set_effect("Fast Pulse")
                                        .perform();
                                      break;
                                    case ${voice_assist_replying_phase_id}:
                                      id(led_ww).turn_on()
                                        .set_brightness(0.6)
                                        .set_rgb(0.2, 1.0, 1.0)
                                        .set_effect("Slow Pulse")
                                        .perform();
                                      break;
                                    case ${voice_assist_error_phase_id}:
                                      id(led_ww).turn_on()
                                        .set_brightness(0.6)
                                        .set_rgb(1.0, 1.0, 0.2)
                                        .set_effect("Fast Pulse")
                                        .perform();
                                      break;
                                    case ${voice_assist_muted_phase_id}:
                                      id(led_ww).turn_on()
                                        .set_brightness(0.3)
                                        .set_rgb(1.0, 0.0, 0.0)
                                        .perform();
                                      break;
                                    case ${voice_assist_not_ready_phase_id}:
                                      id(led_ww).turn_on()
                                        .set_brightness(0.3)
                                        .set_rgb(1.0, 1.0, 0.2)
                                        .perform();
                                        break;
                                    default:
                                      id(led_ww).turn_off()
                                        .perform();
                                  }
                            else:
                              - light.turn_on:
                                  id: led_ww           
                                  red: 100%
                                  green: 0%
                                  blue: 0%
                                  brightness: 40%
                                  effect: fast pulse 
                      else:
                        - light.turn_on:
                            id: led_ww           
                            red: 100%
                            green: 0%
                            blue: 0%
                            brightness: 40%
                            effect: slow pulse
          else:
            - light.turn_on:
                id: led_ww           
                red: 100%
                green: 100%
                blue: 0%
                brightness: 30%
                effect: slow pulse

globals:
  - id: init_in_progress
    type: bool
    restore_value: false
    initial_value: "true"
  - id: voice_assistant_phase
    type: int
    restore_value: false
    initial_value: ${voice_assist_not_ready_phase_id}
1 Like

I still have 2x bare Respeakers, and actually have Xiao S3 boards and exactly that speakers from Amazon.

But I’m thinking doing something more presentable. Will try to do some modeling on the weekend.

By the way, that default mount might be flimsy, but it actually buffers the speaker and the board from vibration. I scratched off the sticky tape from that cubes and added a drop of super glue. :slight_smile:

2 Likes

Seems like it should be working. Only minor issue is no AP specified but captive_portal: is This shouldn’t cause issues but captive_portal is specifically for connecting to the AP hotspot to enter in your wifi creds. I would probably just add it even though it doesn’t become a drive until it can’t connect to WiFi after 60 seconds per the docs.

I also noticed the the previous screen screenshot there is an entry under Diagnostics that says “away” and wasn’t sure what that was all about. Is it still there after the clean build files and new install?

Lastly, are you doing installs over WiFi now or still plugging in the XIAO to a PC or laptop? If laptop/PC I would verify you can bring up the logs over WiFi. From the screenshot above it seems like “assist in progress” is the only thing not greyed out.

EDIT: You do have the ESPHome secrets file setup,.correct? Seeeds example has you hard code the credentials so just asking to make sure.

Regardless the logs via wifi should be similar.to the below.

Logs respeakerv3.yaml
INFO ESPHome 2024.9.2
INFO Reading configuration /config/esphome/respeakerv3.yaml...
INFO Updating https://github.com/esphome/voice-kit@dev
WARNING GPIO3 is a strapping PIN and should only be used for I/O with care.
Attaching external pullup/down resistors to strapping pins can cause unexpected failures.
See https://esphome.io/guides/faq.html#why-am-i-getting-a-warning-about-strapping-pins
INFO Starting log output from 192.168.0.250 using esphome API
INFO Successfully connected to respeakerv3 @ 192.168.0.250 in 0.152s
INFO Successful handshake with respeakerv3 @ 192.168.0.250 in 0.084s
[21:48:47][I][app:100]: ESPHome version 2024.9.2 compiled on Oct  1 2024, 23:27:46
[21:48:47][C][wifi:600]: WiFi:
[21:48:47][C][wifi:428]:   Local MAC: 24:EC:4A:00:09:4C
[21:48:47][C][wifi:433]:   SSID: [redacted]
[21:48:47][C][wifi:436]:   IP Address: 192.168.0.250
[21:48:47][C][wifi:440]:   BSSID: [redacted]
[21:48:47][C][wifi:441]:   Hostname: 'respeakerv3'
[21:48:47][C][wifi:443]:   Signal strength: -72 dB ▂▄▆█
[21:48:47][C][wifi:447]:   Channel: 11
[21:48:47][C][wifi:448]:   Subnet: 255.255.255.0
[21:48:47][C][wifi:449]:   Gateway: 192.168.0.1
[21:48:47][C][wifi:450]:   DNS1: 192.168.0.1
[21:48:47][C][wifi:451]:   DNS2: 0.0.0.0
[21:48:47][C][logger:185]: Logger:
[21:48:47][C][logger:186]:   Level: DEBUG
[21:48:47][C][logger:188]:   Log Baud Rate: 115200
[21:48:47][C][logger:189]:   Hardware UART: USB_SERIAL_JTAG
[21:48:47][C][gpio.binary_sensor:015]: GPIO Binary Sensor 'Mute'
[21:48:47][C][gpio.binary_sensor:016]:   Pin: GPIO4
[21:48:48][C][esp32_rmt_led_strip:187]: ESP32 RMT LED Strip:
[21:48:48][C][esp32_rmt_led_strip:188]:   Pin: 1
[21:48:48][C][esp32_rmt_led_strip:189]:   Channel: 0
[21:48:48][C][esp32_rmt_led_strip:214]:   RGB Order: GRB
[21:48:48][C][esp32_rmt_led_strip:215]:   Max refresh rate: 0
[21:48:48][C][esp32_rmt_led_strip:216]:   Number of LEDs: 1
[21:48:48][C][gpio.binary_sensor:015]: GPIO Binary Sensor 'User button'
[21:48:48][C][gpio.binary_sensor:016]:   Pin: GPIO3
[21:48:48][C][light:103]: Light 'Respeakerv3'
[21:48:48][C][light:105]:   Default Transition Length: 0.0s
[21:48:48][C][light:106]:   Gamma Correct: 2.80
[21:48:48][C][template.switch:068]: Template Switch 'timer_ringing'
[21:48:48][C][template.switch:091]:   Restore Mode: always OFF
[21:48:48][C][template.switch:057]:   Optimistic: YES
[21:48:48][C][psram:020]: PSRAM:
[21:48:48][C][psram:021]:   Available: YES
[21:48:48][C][psram:024]:   Size: 8191 KB
[21:48:48][C][safe_mode.button:024]: Safe Mode Button 'Safe Mode Boot'
[21:48:48][C][safe_mode.button:024]:   Icon: 'mdi:restart-alert'
[21:48:48][C][factory_reset.button:011]: Factory Reset Button 'Factory reset'
[21:48:48][C][factory_reset.button:011]:   Icon: 'mdi:restart-alert'
[21:48:48][C][restart.button:017]: Restart Button 'Restart'
[21:48:48][C][restart.button:017]:   Icon: 'mdi:restart'
[21:48:48][C][captive_portal:089]: Captive Portal:
[21:48:48][C][mdns:116]: mDNS:
[21:48:48][C][mdns:117]:   Hostname: respeakerv3
[21:48:48][C][esphome.ota:073]: Over-The-Air updates:
[21:48:48][C][esphome.ota:074]:   Address: respeakerv3.local:3232
[21:48:48][C][esphome.ota:075]:   Version: 2
[21:48:48][C][esphome.ota:078]:   Password configured
[21:48:48][C][safe_mode:018]: Safe Mode:
[21:48:48][C][safe_mode:020]:   Boot considered successful after 60 seconds
[21:48:48][C][safe_mode:021]:   Invoke after 10 boot attempts
[21:48:48][C][safe_mode:023]:   Remain in safe mode for 300 seconds
[21:48:48][C][api:139]: API Server:
[21:48:48][C][api:140]:   Address: respeakerv3.local:6053
[21:48:48][C][api:142]:   Using noise encryption: YES
[21:48:48][C][micro_wake_word:072]: microWakeWord:
[21:48:48][C][micro_wake_word:073]:   models:
[21:48:48][C][micro_wake_word:015]:     - Wake Word: okay nabu
[21:48:48][C][micro_wake_word:016]:       Probability cutoff: 0.97
[21:48:48][C][micro_wake_word:017]:       Sliding window size: 5
[21:48:48][C][micro_wake_word:021]:     - VAD Model
[21:48:48][C][micro_wake_word:022]:       Probability cutoff: 0.50
[21:48:48][C][micro_wake_word:023]:       Sliding window size: 5
[21:50:58][D][micro_wake_word:347]: Detected 'okay nabu' with sliding average probability is 0.99 and max probability is 1.00
[21:50:58][D][voice_assistant:512]: State changed from IDLE to START_MICROPHONE

As usual super glue seems like the solution to my main issue. I just don’t like it falling off and yanking on the JST wire, especially after that post above. Super Glue and duct tape can fix almost anything although duct tape tends to lose some style points unless hidden.

1 Like

Omg after multiple flashs, removal from esphome integration and the lot it finally works. woo hoo!!!

The performance is still crap though. My fault for expecting miracles. lol

Sorry dont mean to be nasty or anything. Just an observation I guess. I havent used it with local AI which was taking too long in my initial tests. Might try that.

Also I had to enable the respeakerv3 led to make it work after the flash. The seeed code it was working on its own.
image

Hi!

Does anyhave have the JTAG pinout of the ReSpeaker Lite available?
(We really need the schematic. Don’t want to find all the details by manually measuring.)

I plan to use my XMOS XTAG4 adapter to experiment with custom builds (I2S/UA variants) of the XMOS firmware from here with 48kHz enabled instead of the default 16kHz.

One could try that without a XTAG4 adapter, but I feel more comfortable when I am able to reflash in case of failing firmware images.

The design files of the XTAG-4 adapter can be found here. Fun fact: it also includes a XU-316 chip and could be reflashed.

1 Like

Great news!
Maybe you could open up another thread for further discussions?
I have a couple of questions. Especially about the used XMOS processor and its firmware, because you are using 4 mics instead of only 2. :slight_smile:

New thread created :slight_smile: