Projet voice control

Comment est cablé le L/R de l’INMP ?

Le L/R est relié au GND.
Oui je suis sur une breadboard :wink:

Retire chanel left de la partie Microphone pour tester :wink:

Super @Krull56, il y a du mieux :slight_smile:

19:45:18	[D]	[voice_assistant:557]	
Speech recognised as: "allume la lampe marine"
19:45:18	[D]	[voice_assistant:529]	
Event Type: 5
19:45:18	[D]	[voice_assistant:562]	
Intent started
19:45:18	[D]	[voice_assistant:562]	
Intent started
19:45:18	[D]	[voice_assistant:529]	
Event Type: 6
19:45:18	[D]	[voice_assistant:529]	
Event Type: 7
19:45:18	[D]	[voice_assistant:585]	
Response: "Allumé"

Merci beaucoup, je dois quitter pour ce soir mais je sors apaisé :slight_smile:
Je reprends demain, la lampe s’est allumée.
Top merci
Bob

2 « J'aime »

Bonsoir,
Petit retour :
Suite au passage concluant du retour vocal sur mon ampli (pour test), et l’ajout d’une led pour signaler la reconnaissance du mot de réveil ça fonctionne bien, reste à ajuster les alias.
Par contre en activant le speaker (c’est le but) c’est comme si l’ESP avait besoin de temps pour récupérer son souffle :wink:

speaker:
  - platform: i2s_audio
    id: my_speaker
    dac_type: external
    i2s_dout_pin: GPIO27   #DIN 
    mode: mono
    i2s_audio_id: i2s_in

ça avance, reste à trouver la bonne config pour le speaker de l’ESP32, pas envie que le système allume l’ampli juste pour ça :wink:
Peut être un autre ESP32 avec un media_player: avec 2 amplis (MAX98357) et deux HP pour soulager celui qui a le micro.

Bob

Tu as quoi comme symptômes exactement ? Le retour est haché ? Le volume est faible ?
Un truc que je n’ai pas encore testé c’est d’utiliser le media_player intégré dans mon code initial en début de ce post comme moteur de réponse avec le on_tts.end ( tout comme pour ton ampli :wink: ).
Je mets ça sur ma todo-list

C’est fait :grin:
Le volume n’a pas vraiment changé , mais les réponses sont plus claires et pas hachées comme ca peut arriver de temps en temps en utilisant « Speaker » en réponse.
par contre le max98357 est pas top niveau puissance réelle, à remplacer par un PCM5102 + Ampli plus punchy ?

@+

Symptôme : après une ou deux requête il faut attendre plusieurs minutes pour que ça refonctionne.
Bon appétit :wink:

Tu as toujours ces déconnexions ponctuelles ?

Bonjour @Krull56
Je l’ai très rarement mais ça arrive encore.
Bob

Hello,

Rien à voir avec ESP and family, mais un petit programme pour lancer directement assist sur PC/MAC/LINUX

timmo001/home-assistant-assist-desktop: Use Home Assistant Assist on the desktop. Compatible with Windows, MacOS, and Linux (github.com)

@+

Bonjour,
Suite à l’ajout de :

Je vois que mon ESP32 freeze très souvent, le fonctionnement reste très aléatoire, même l’allumage de la led bleu de la carte devient très lent, pour le son, parfois ça fonctionne, souvent non.
Je vais faire un 2ème assistant basé sur un ESP32 avec PSRAM pour voir si c’est mieux.
Merci pour toutes les infos et échanges de ce post.
Bob

@Krull56,
Pourrais-tu partager ton yaml complet stp avec media_player intégré :wink:

Merci
Bob

Hello

Le voici avec le media player + le mute All (light+media) revu en conséquence

esphome:
  name: satellite1
  friendly_name: Satellite1
  on_boot:
    - priority: -100
      then:
        - wait_until: api.connected
        - light.turn_on:
            id: led
            effect: pulse
            red: 100%
            blue: 0%
            green: 0%
        - switch.turn_on: use_wake_word
        - delay: 5s
        - voice_assistant.start_continuous:
        - light.turn_off: led



esp32:
  board: esp32dev
  framework:
    type: arduino
   

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: 

ota:
  password: 

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Test Fallback Hotspot"
    password: "RwJBFIeZYHDb"

captive_portal:




light:
  - platform: esp32_rmt_led_strip
    chipset: WS2812
    rmt_channel: 0
    pin: GPIO16
    num_leds: 16
    rgb_order: GRB
    name: "Neopixel Light"
    id: led
    effects:
      - pulse:
          name: Pulse
          transition_length: 0.5s
          update_interval: 0.5s
          min_brightness: 0%
          max_brightness: 100%
      - addressable_scan:
          name: Scan
          move_interval: 50ms
          scan_width: 4
      - addressable_color_wipe:
          name: Wipe
          colors:
            - red: 0%
              green: 0%
              blue: 10%
              num_leds: 1
            - red: 0%
              green: 0%
              blue: 50%
              num_leds: 1
          add_led_interval: 100ms
          reverse: false

i2s_audio:
  - id: i2s_in
    i2s_lrclk_pin: GPIO25
    i2s_bclk_pin: GPIO32

microphone:
  - platform: i2s_audio
    adc_type: external
    pdm: false
    id: mic_i2s
    bits_per_sample: 32bit
    i2s_audio_id: i2s_in
    i2s_din_pin: GPIO33

media_player:
  - platform: i2s_audio
    id: media_sat2
    name: "media_sat"
    i2s_dout_pin: GPIO26
    dac_type: external
    mode: mono

voice_assistant:
  id: va
  microphone: mic_i2s
  use_wake_word: true
  noise_suppression_level: 2
  auto_gain: 0dBFS
  volume_multiplier: 4.0

  
  on_listening:
    then:
    - if:
        condition:         
          switch.is_off: MuteLight
        then :
           - light.turn_on:
              id: led
              blue: 100%
              red: 0%
              green: 0%
              brightness: 100%
              effect: Wipe

  on_tts_start:
    then:
    - if:
        condition:         
          switch.is_off: MuteLight
        then :
           - light.turn_on:
              id: led
              blue: 0%
              red: 100%
              green: 0%
              brightness: 100%
              effect: Pulse
              

  on_tts_end:
        - homeassistant.service:
            service: media_player.play_media
            data:
               entity_id: media_player.satellite1_media_sat
               media_content_id: !lambda 'return x;'
               media_content_type: music
               announce: "true"
        - delay : 10s
        - homeassistant.service:
           service: tts.clear_cache



  on_end:
    - delay: 2s
    - light.turn_off: led




switch:

  - platform: template
    name: "MuteAll"
    id: MuteAll
    optimistic: true
    on_turn_on:
      - switch.turn_on: MuteLight
      - media_player.volume_set: !lambda "return 0.0;"
    on_turn_off:
      - switch.turn_off: MuteLight
      - media_player.volume_set: !lambda "return 1;"

  - platform: template
    name: MuteLight
    id: MuteLight
    optimistic: true



  - platform: template
    id: listen_force
    name: Listen_force
    optimistic: true
    restore_mode: ALWAYS_OFF
    on_turn_on:
      - switch.turn_off: use_wake_word
      - delay: 0.5s
      - voice_assistant.start_continuous
    on_turn_off:
      - switch.turn_on: use_wake_word


  - 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
    on_turn_off:
      - voice_assistant.stop
      - lambda: id(va).set_use_wake_word(false);




  

Bonjour,
Merci @Krull56,
Je vois bien mon media_player :

Mais aucun son, pas mieux depuis les outils de dev → Services.
Pour le « i2s_dout_pin: » de media_player je mets bien le GPIO que j’avais pour le speaker ?

Mon YAML :

Bob

esphome:
  name: esp32-psram-voice-control-2
  friendly_name: Esp32 Psram Voice Control 2

  #on_boot:
  #  - priority: -100
  #    then:
  #      - wait_until: api.connected
  #      - delay: 5s
  #      - speaker.play:
  #          data: [0x00]

  #      - delay: 1s
  #      - if:
  #          condition:
  #            switch.is_on: use_wake_word
  #          then:
  #            - voice_assistant.start_continuous:

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:
  level: debug

# Enable Home Assistant API
api:
  encryption:
    key: "gDrtxsGTMhoGo10AGjOhvdY="

ota:
  password: "6e6362d7d59f97"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  manual_ip:
    static_ip: 192.168.1.47
    gateway: 192.168.1.254
    subnet: 255.255.255.0  

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Esp32-Psram-Voice-Control-2"
    password: "Okr2hj"

captive_portal:

debug:
  update_interval: 5s

text_sensor:
  - platform: debug
    device:
      name: "Device Info"
    reset_reason:
      name: "Reset Reason"

sensor:
  - platform: debug
    free:
      name: "Heap Free"
    block:
      name: "Heap Max Block"
    loop_time:
      name: "Loop Time"
    #psram:
    #  name: "Free PSRAM"

# voice assistant
i2s_audio:
  - id: i2s_in
    i2s_lrclk_pin: GPIO26   #WS / LRC
    i2s_bclk_pin: GPIO25    #SCK /BCLK

microphone:
  - platform: i2s_audio
    adc_type: external
    pdm: false
    id: mic_i2s
    #channel: left
    bits_per_sample: 32bit
    i2s_audio_id: i2s_in
    i2s_din_pin: GPIO33    #SD
    

#speaker:
#  - platform: i2s_audio
#    id: my_speaker
#    dac_type: external
#    i2s_dout_pin: GPIO27   #DIN 
#    mode: mono
#    i2s_audio_id: i2s_in

media_player:
  - platform: i2s_audio
    id: media_sat1
    name: "media_sat1"
    i2s_dout_pin: GPIO27
    dac_type: external
    mode: mono

voice_assistant:
  microphone: mic_i2s
  id: brunoassist
  noise_suppression_level: 2
  auto_gain: 31dBFS
  volume_multiplier: 2.0
  use_wake_word: true
  #speaker: my_speaker

  on_wake_word_detected: 
    - switch.turn_on:
        id: reveil

  on_error: 
   - if:
        condition:
          switch.is_on: use_wake_word
        then:
          - switch.turn_off: use_wake_word
          - 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:

  on_end: 
    - switch.turn_off:
        id: reveil

  #on_tts_end:
  #  - delay : 2s
  #  - switch.turn_off:
  #      id: reveil

  #Pour envoyer réponse sur le Denon
  on_tts_end:
    - homeassistant.service:
        service: media_player.play_media
        data:
          entity_id: media_player.esp32_voice_control_1_media_sat1 #denon_avc_x3700h mibox3  freebox_player_2
          media_content_id: !lambda 'return x;'
          media_content_type: music
          announce: "true"
    - delay : 8s
    - homeassistant.service:
       service: tts.clear_cache

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(brunoassist).set_use_wake_word(true);
      - if:
          condition:
            not:
              - voice_assistant.is_running
          then:
            - voice_assistant.start_continuous
    
    on_turn_off:
      - voice_assistant.stop
      - lambda: id(brunoassist).set_use_wake_word(false);

  - platform: gpio
    name: "LedVerte"
    id: led
    pin: 21
  - platform: gpio
    name: "LedIo23"
    id: reveil
    pin: 23

  #- platform: template
  #  id: listen_force
  #  name: Listen
  #  optimistic: true
  #  restore_mode: ALWAYS_OFF
  #  on_turn_on:
  #    - switch.turn_off: use_wake_word
  #    - delay: 0.5s
  #    - voice_assistant.start
  #  on_turn_off:
  #    - switch.turn_on: use_wake_word

web_server:
  port: 80

Hello @Bob

C’est étrange car pas de souci de mon côté et oui, même GPIO que pour l’ancien « speaker »

Tu as bien activé ça pour ton esp dans esphome ?

Oui, c’est bien activé.
Avec le nouvel ESP32 + PSRAM ça ne « freeze » plus, ça fonctionne plutôt bien mais parfois le son reste haché ou le texte coupé, peut être prévoir un délai avant la diffusion du message au cas où il ne serait pas entièrement généré…
Bob

Y a pas un pb sur la definition du media_player ? :grin: (à moins qu’il soit sur un autre ESP)

- homeassistant.service:
        service: media_player.play_media
        data:
          entity_id: media_player.esp32_voice_control_1_media_sat1

Car esp32_voice_control_1 n’est pas le nom de ton ESP qui « porte » le media player

Je dois y aller, ah le boulot…
Je regarde ce soir :wink:
Merci


Bob

Sinon, plus simple ( je n’ai pas encore testé), esphome voice assistant supporte maintenant nativement le media player en place du speaker .
En remplacant

voice_assistant:
  microphone: mic_i2s
  id: brunoassist
  noise_suppression_level: 2
  auto_gain: 31dBFS
  volume_multiplier: 2.0
  use_wake_word: true
  speaker: my_speaker

par

voice_assistant:
  microphone: mic_i2s
  id: brunoassist
  noise_suppression_level: 2
  auto_gain: 31dBFS
  volume_multiplier: 2.0
  use_wake_word: true
  media_player: media_sat1

et en supprimant evidemment la partie on_tts_end :wink: