Amazon a analysé plus de 30 milliards de commandes vocales en 2025. Chaque "Alexa, allume la lumière" traverse leurs centres de données avant de revenir chez vous. Ce n'est pas une faille de sécurité — c'est le fonctionnement prévu du produit. Vous n'achetez pas un assistant vocal : vous louez un service de transcription et offrez vos habitudes quotidiennes à un géant de la publicité.

L'alternative existe depuis 2023 et elle tourne parfaitement en 2026 : un ESP32-S3 à 10 €, un microphone INMP441 à 8 €, un amplificateur MAX98357A à 10 €, ESPHome, Whisper et Piper. Résultat — un satellite vocal intégré nativement à Home Assistant, dont aucun échantillon audio ne quitte votre réseau local. Ce guide couvre tout le parcours : câblage, YAML ESPHome complet, installation des add-ons HA, configuration du wake word en français et dépannage.

Wyoming, Whisper, Piper : la stack expliquée

Avant de brancher quoi que ce soit, comprendre comment ces trois briques s'articulent évite bien des erreurs de configuration.

Wyoming : le protocole qui relie tout

Wyoming est un protocole audio open-source développé par l'équipe Rhasspy. Il standardise les échanges entre les composants d'un pipeline vocal : détection du wake word, transcription speech-to-text (STT), traitement de l'intention par Home Assistant, synthèse text-to-speech (TTS). Home Assistant l'intègre nativement depuis la version 2023.5, sans configuration réseau particulière — les services Wyoming sont découverts automatiquement par Zeroconf.

Le pipeline complet, de votre voix à la réponse, s'organise comme suit :

  1. Détection wake word — l'ESP32-S3 écoute en permanence via le microphone INMP441. microWakeWord tourne en local sur la puce, sans réseau. Aucun audio ne part avant que le mot déclencheur soit reconnu.
  2. Streaming audio — après détection, l'ESP32-S3 envoie le flux audio à Home Assistant via WiFi, en utilisant le composant voice_assistant d'ESPHome.
  3. Transcription (Whisper) — l'add-on faster-whisper reçoit l'audio et le transcrit en texte. Il tourne localement sur votre serveur Home Assistant.
  4. Traitement Assist — Home Assistant interprète la commande textuelle et détermine l'action à exécuter (allumer une lumière, interroger un capteur, déclencher une automatisation).
  5. Synthèse vocale (Piper) — l'add-on Piper transforme la réponse textuelle en audio. Voix française naturelle, générée localement.
  6. Lecture — l'ESP32-S3 reçoit l'audio de la réponse et le diffuse via le MAX98357A vers le haut-parleur.

Cette stack ne nécessite pas d'abonnement Nabu Casa. Elle fonctionne en LAN uniquement, sans ouverture de port. Chaque maillon est open-source.

Wyoming sur Raspberry Pi versus Wyoming sur ESP32-S3

La communauté HACF et le forum Home Assistant utilisent souvent "Wyoming Satellite" pour désigner deux implémentations distinctes. La différence est importante :

  • Satellite Python sur Raspberry Pi — le package rhasspy/wyoming-satellite tourne sur un Raspberry Pi Zero 2W ou Pi 3, avec une carte son externe (ReSpeaker 2Mic, 4Mic). Plus flexible pour les configurations audio complexes, mais plus cher (30-50 €) et plus énergivore (~2-3 W en écoute continue).
  • Satellite ESPHome sur ESP32-S3 — le composant voice_assistant d'ESPHome implémente le protocole Wyoming directement dans le firmware du microcontrôleur. Moins de 15 €, consommation ~0,5 W, configuration via YAML. C'est l'approche de ce guide.

Pour un usage domotique standard — commandes vocales, interrogation de capteurs, déclenchement d'automatisations — l'ESP32-S3 avec ESPHome est la solution la plus économique et la mieux intégrée à Home Assistant. Le Raspberry Pi reste pertinent si vous avez besoin d'un réseau de microphones directionnels ou d'une qualité audio studio.

Matériel nécessaire — deux options pour tous les budgets

Option 1 — DIY complet : ESP32-S3 + INMP441 + MAX98357A

Cette option demande un câblage sur breadboard (aucune soudure nécessaire avec des connecteurs Dupont). Budget total entre 35 et 40 €.

Liste complète :

  • ESP32-S3-DevKitC-1 — Version N8R8 recommandée (8 Mo Flash, 8 Mo PSRAM). La version N16R8 offre plus de marge pour les modèles microWakeWord v2 mais n'est pas indispensable.
  • Microphone INMP441 — microphone MEMS I2S. Faible bruit, omnidirectionnel, alimentation 3.3V directe depuis l'ESP32. Référence DIY incontournable. Évitez les modules MAX4466 ou KY-038 qui sont analogiques et incompatibles avec ce guide.
  • Amplificateur MAX98357A — DAC I2S + amplificateur class D mono intégré, 3W sur 4Ω. Qualité largement suffisante pour un assistant vocal en pièce de vie.
  • Haut-parleur 3W / 4Ω — privilegier 4Ω pour maximiser la puissance du MAX98357A. Un diamètre de 40 à 57 mm offre un bon rendu vocal.
  • Breadboard + câbles Dupont mâle-femelle — pour le prototypage sans soudure.
Rapport qualité-prix
ESP32-S3 DevKitC-1

ESP32-S3 DevKitC-1

ESP32-S3 · Dual Xtensa LX7 · 8 Mo Flash · USB-C · ~10 EUR

Voir sur Amazon Livraison Prime · Retours gratuits
Microphone INMP441 I2S

Microphone INMP441 I2S

Microphone MEMS I2S · SNR 61 dBA · 24 bits · Omnidirectionnel · ~8 EUR

Voir sur Amazon Livraison Prime · Retours gratuits
Amplificateur MAX98357A I2S

Amplificateur MAX98357A I2S

Ampli I2S classe D · 3W sur 4Ω · Gain réglable 3-15 dB · DAC intégré · ~10 EUR

Voir sur Amazon Livraison Prime · Retours gratuits
Mini haut-parleur 3W 4Ω

Mini haut-parleur 3W 4Ω

Mini HP passif 3W 4Ω · JST-PH2.0 · 70×31 mm · Lot de 2 · ~8 EUR

Voir sur Amazon Livraison Prime · Retours gratuits

Option 2 — Solution semi-clé en main : Waveshare ESP32-S3 AI Smart Speaker

Si vous préférez éviter le câblage du microphone et du haut-parleur, le Waveshare ESP32-S3 AI Smart Speaker intègre un double microphone avec réduction de bruit, un haut-parleur, et 7 LED RGB programmables — le tout sur une carte compacte à 27 €. Basé sur l'ESP32-S3R8 (8 Mo de PSRAM), il se configure avec ESPHome de la même façon que le montage DIY décrit dans ce guide.

Principal avantage par rapport à l'option DIY : aucun câblage I2S à réaliser. La double matrice de microphones avec traitement du signal intégré améliore la détection du wake word en environnement bruyant. Note importante : la carte nécessite une batterie LiPo 3,7V (connecteur MX1.25) pour fonctionner en mode autonome — pour une installation permanente, une alimentation 5V via USB-C suffit.

Meilleur choix
Waveshare ESP32-S3 AI Smart Speaker

Waveshare ESP32-S3 AI Smart Speaker

Dual mics · Réduction bruit · HP intégré · 7x RGB LED · ESP32-S3R8 · ~27 EUR

Voir sur Amazon Livraison Prime · Retours 30 jours

Schéma de câblage — INMP441 et MAX98357A sur ESP32-S3

Les deux puces communiquent avec l'ESP32-S3 via le bus I2S (Inter-IC Sound). L'ESP32-S3 supporte deux interfaces I2S indépendantes, ce qui permet d'avoir simultanément le microphone en entrée et le haut-parleur en sortie — le mode duplex complet, indispensable pour pouvoir écouter la réponse immédiatement après avoir parlé.

Composant Broche composant GPIO ESP32-S3 Description
INMP441VDD3V3Alimentation 3.3V
INMP441GNDGNDMasse
INMP441L/RGNDSélection canal gauche (mono)
INMP441SCKGPIO14Horloge bit — BCLK
INMP441WSGPIO12Sélection mot — LRCLK
INMP441SDGPIO11Données audio vers ESP32
MAX98357AVIN5VAlimentation 5V (VBUS)
MAX98357AGNDGNDMasse
MAX98357ABCLKGPIO18Horloge bit depuis ESP32
MAX98357ALRCGPIO17Sélection mot depuis ESP32
MAX98357ADINGPIO16Données audio depuis ESP32
Haut-parleur+MAX98357A OUT+Borne positive amplifiée
Haut-parleurMAX98357A OUT−Borne négative amplifiée

Le brochage L/R de l'INMP441 relié à GND configure le microphone en canal gauche — réglage standard pour un usage mono. Ne laissez pas cette broche flottante : l'audio serait aléatoirement affecté à l'un ou l'autre canal, causant des captures intermittentes.

Ces GPIO (11, 12, 14, 16, 17, 18) sont valides pour l'ESP32-S3-DevKitC-1. Sur une autre carte ESP32-S3, évitez GPIO19 et GPIO20 (réservés USB-OTG) et GPIO26 à GPIO32 si votre carte utilise du PSRAM externe sur ces broches.

Étape 1 — Installer Whisper et Piper dans Home Assistant

Configurons d'abord le côté serveur : les deux add-ons qui traitent l'audio. Cette étape ne prend que quelques minutes depuis l'interface HA.

Installer faster-whisper (speech-to-text)

Faster-Whisper est une implémentation optimisée du modèle Whisper d'OpenAI, adaptée au CPU sans GPU. Il tourne entièrement en local.

  1. Dans Home Assistant : Paramètres → Modules complémentaires → Boutique des modules
  2. Rechercher Faster Whisper et cliquer sur Installer
  3. Dans l'onglet Configuration, choisir la taille du modèle :
Modèle RAM requise Latence (N100) Latence (Pi 4) Précision FR
tiny~400 Mo0,4–0,8 s1–2 sCorrecte
small~950 Mo0,7–1,2 s1,5–3 sBonne
medium~3 Go1,5–2,5 s4–8 sTrès bonne

Pour la majorité des usages en français : small est le meilleur compromis. Sur Raspberry Pi 4, démarrez avec tiny et montez à small si la précision est insuffisante sur les noms propres ou les commandes complexes.

Démarrez le module et activez le démarrage automatique. Une fois actif, Faster Whisper est découvert automatiquement par Home Assistant comme service Wyoming.

Installer Piper (text-to-speech)

Piper est un moteur TTS neuronal local conçu pour fonctionner sur du matériel modeste. Le support du français est mature, avec plusieurs voix disponibles.

  1. Dans la Boutique des modules, rechercher Piper et installer
  2. Dans la configuration, sélectionner la voix. Pour le français :
  • fr_FR-siwis-medium — voix féminine, intonation naturelle, recommandée pour un usage domotique quotidien
  • fr_FR-upmc-medium — voix masculine, articulation claire. Note : cette voix peut parler trop rapidement dans certaines versions de l'add-on Piper. Si c'est le cas, préférez fr_FR-tom-medium.
  • fr_FR-tom-medium — voix masculine dynamique, alternative fiable à upmc

Démarrez et activez le démarrage automatique.

Créer le pipeline Assist en français

Le pipeline Assist orchestre le flux entre STT, traitement de l'intention et TTS.

  1. Paramètres → Assistants vocaux → Ajouter un assistant
  2. Nom : Satellite ESP32 local
  3. Langue : Français
  4. Service de reconnaissance vocale : faster-whisper
  5. Service de synthèse vocale : Piper → voix fr_FR-siwis-medium
  6. Agent de conversation : Home Assistant (par défaut, commandes prédéfinies)
  7. Enregistrer

Si vous souhaitez des réponses conversationnelles libres en français — "qu'est-ce que je devrais faire aujourd'hui vu la météo ?" — remplacez l'agent de conversation par Ollama. Le guide complet est disponible ici : Ollama + Home Assistant : LLM local sans cloud. Le pipeline devient alors : voix → Whisper → Ollama → Piper → voix, entièrement local.

Étape 2 — Configuration ESPHome : le YAML complet

Voici le YAML complet pour l'ESP32-S3-DevKitC-1, prêt à coller dans l'éditeur ESPHome. Les GPIO correspondent au tableau de câblage ci-dessus. Adaptez les secrets selon votre configuration.

esphome:
  name: voice-satellite
  friendly_name: Voice Satellite Salon

esp32:
  board: esp32-s3-devkitc-1
  framework:
    type: esp-idf   # Obligatoire pour voice_assistant — ne pas utiliser Arduino

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  # Fallback AP si la connexion WiFi échoue
  ap:
    ssid: "Voice Satellite Setup"
    password: "configureme"

api:
  encryption:
    key: !secret api_key

ota:
  - platform: esphome
    password: !secret ota_password

logger:
  level: INFO   # Passer en DEBUG pour diagnostiquer les problèmes audio

# ─── I2S Interface 1 — Microphone INMP441 ───────────────────────────────────
i2s_audio:
  - id: i2s_micro
    i2s_lrclk_pin: GPIO12   # WS — sélection mot
    i2s_bclk_pin: GPIO14    # SCK — horloge bit

# ─── I2S Interface 2 — Amplificateur MAX98357A ──────────────────────────────
  - id: i2s_ampli
    i2s_lrclk_pin: GPIO17   # LRC — sélection mot
    i2s_bclk_pin: GPIO18    # BCLK — horloge bit

# ─── Microphone INMP441 ─────────────────────────────────────────────────────
microphone:
  - platform: i2s_audio
    id: micro_inmp441
    i2s_audio_id: i2s_micro
    i2s_din_pin: GPIO11     # SD de l'INMP441 vers l'ESP32
    adc_type: external
    pdm: false              # L'INMP441 est I2S standard — jamais PDM

# ─── Haut-parleur via MAX98357A ─────────────────────────────────────────────
speaker:
  - platform: i2s_audio
    id: speaker_max98357
    i2s_audio_id: i2s_ampli
    i2s_dout_pin: GPIO16    # DIN du MAX98357A depuis l'ESP32

# ─── Media player ────────────────────────────────────────────────────────────
media_player:
  - platform: speaker
    id: voice_speaker
    name: "Voice Satellite Speaker"
    speaker_id: speaker_max98357

# ─── Wake word sur l'appareil — microWakeWord v2 ────────────────────────────
micro_wake_word:
  id: wake_word_engine
  models:
    - model: okay_nabu          # Wake word officiel Home Assistant
  on_wake_word_detected:
    - voice_assistant.start:
        silence_detection: true  # Détecte automatiquement la fin de la phrase

# ─── Assistant vocal ─────────────────────────────────────────────────────────
voice_assistant:
  id: va
  microphone: micro_inmp441
  media_player: voice_speaker
  noise_suppression_level: 2    # 0 (off) à 4 (agressif) — 2 est un bon point de départ
  auto_gain: 31dBFS             # Gain automatique du microphone
  volume_multiplier: 4.0        # Amplification logicielle — réduire si distorsion
  on_listening:
    - logger.log: "Satellite : en écoute"
  on_stt_end:
    - logger.log: "Satellite : traitement en cours"
  on_tts_start:
    - logger.log: "Satellite : lecture réponse"
  on_end:
    - logger.log: "Satellite : pipeline terminé"
  on_error:
    - logger.log:
        format: "Satellite erreur %d : %s"
        args: ['code', 'message.c_str()']

Flashez ce firmware via l'interface ESPHome. L'ESP32-S3 devrait apparaître dans Paramètres → Intégrations → ESPHome quelques secondes après le démarrage. Associez-le au pipeline Satellite ESP32 local que vous avez créé précédemment.

Ajouter un retour visuel avec une LED RGB

Si votre montage inclut une LED NeoPixel (ou la LED RGB intégrée à certaines variantes ESP32-S3), les callbacks du voice_assistant permettent d'indiquer visuellement l'état du satellite. Le codage couleur standard de la communauté :

  • Bleu pulsant — en écoute active (après wake word)
  • Vert pulsant — traitement de la requête
  • Cyan fixe — lecture de la réponse Piper
  • LED éteinte — veille (seul microWakeWord est actif)

Ajoutez ces blocs au YAML si vous disposez d'une LED connectée à GPIO48 (adapter selon votre montage) :

light:
  - platform: neopixelbus
    id: led_statut
    type: GRB
    pin: GPIO48
    num_leds: 1
    name: "LED Statut Satellite"
    restore_mode: ALWAYS_OFF

Puis remplacez les callbacks logger.log du voice_assistant par les commandes lumière correspondantes :

  on_listening:
    - light.turn_on:
        id: led_statut
        brightness: 70%
        red: 0%
        green: 0%
        blue: 100%
        effect: pulse
  on_stt_end:
    - light.turn_on:
        id: led_statut
        brightness: 70%
        red: 0%
        green: 100%
        blue: 0%
        effect: pulse
  on_tts_start:
    - light.turn_on:
        id: led_statut
        brightness: 50%
        red: 0%
        green: 100%
        blue: 50%
  on_end:
    - light.turn_off:
        id: led_statut

Étape 3 — Wake word en français avec microWakeWord v2

microWakeWord est une bibliothèque de détection de wake word conçue spécifiquement pour les microcontrôleurs ESP32. Son avantage décisif : elle exploite les extensions vectorielles SIMD des cœurs Xtensa LX7 de l'ESP32-S3 (souvent appelées "NPU" par la communauté) pour exécuter le modèle de détection directement sur la puce. Aucun audio n'est envoyé au réseau avant que le mot déclencheur soit reconnu — ni à Home Assistant, ni à aucun serveur externe.

Modèles disponibles dans ESPHome

ESPHome intègre nativement plusieurs modèles microWakeWord. Les plus utilisés en 2026 :

  • okay_nabu — wake word officiel Home Assistant. Fiable, peu de faux positifs. Choisir ce modèle en priorité.
  • hey_jarvis — populaire dans la communauté DIY, bon taux de détection
  • alexa — option de transition si vous avez des habitudes Amazon à débrayer

Pour une utilisation 100 % francophone, okay_nabu reste le choix le plus robuste malgré son origine anglophone. Les modèles de wake word nativement français sont encore peu nombreux dans microWakeWord, mais la communauté contribue activement. Le HACF forum documente régulièrement les nouveaux modèles disponibles.

Si vous tenez absolument à un wake word en français, la librairie Porcupine3 (Picovoice) supporte des déclencheurs comme "Framboise" ou "Maison". Son intégration dans ESPHome est possible via un custom component mais sort du cadre de ce guide — elle requiert une clé API Picovoice (gratuite pour usage personnel).

microWakeWord v2 : les améliorations depuis ESPHome 2024.7

La version 2 de microWakeWord, disponible depuis ESPHome 2024.7 (juillet 2024), apporte trois améliorations concrètes par rapport à la v1 :

  • Inférence 40 % plus rapide — détection en moins de 50 ms sur ESP32-S3, grâce à un step size réduit à 10 ms (contre 20 ms en v1)
  • Taux de faux positifs réduit significativement par rapport à v1 (moins de réveils intempestifs par le téléviseur ou les conversations ambiantes)
  • Support de plusieurs modèles simultanément — possible d'écouter "okay_nabu" ET "hey_jarvis" en parallèle

ESPHome sélectionne automatiquement microWakeWord v2 dès que votre firmware est compilé avec ESPHome 2024.7 ou supérieur. Aucune modification du YAML n'est nécessaire si vous utilisez la syntaxe model: okay_nabu présentée ci-dessus.

Associer le satellite au pipeline Assist

Le satellite ESPHome que vous venez de configurer apparaît automatiquement dans Home Assistant après la première connexion WiFi. Pour qu'il utilise spécifiquement le pipeline francophone :

  1. Paramètres → Intégrations → ESPHome
  2. Cliquer sur l'appareil voice-satelliteConfigurer
  3. Dans la section Assistant vocal, sélectionner Satellite ESP32 local
  4. Enregistrer

Testez immédiatement avec des commandes simples :

  • "Okay Nabu, allume la lumière du salon"
  • "Okay Nabu, quelle est la température dans la chambre ?"
  • "Okay Nabu, éteins toutes les lumières"
  • "Okay Nabu, quel temps fait-il ?"

Pour que les commandes sur les entités Home Assistant fonctionnent, celles-ci doivent être exposées à l'assistant vocal. Dans Paramètres → Assistants vocaux → Entités exposées, vérifiez que vos lumières, climatiseurs et autres appareils sont bien listés.

Tests et résultats : latence et précision

Voici les métriques observées sur une configuration type ESP32-S3 + Whisper small + Piper fr_FR-siwis-medium, avec différents serveurs Home Assistant :

Serveur HA Wake word Transcription Synthèse Piper Latence totale
Mini PC Intel N100< 50 ms0,7–1,2 s0,3–0,5 s1,0–1,8 s
Raspberry Pi 5< 50 ms1,0–1,8 s0,3–0,5 s1,3–2,3 s
Raspberry Pi 4< 50 ms1,5–3,0 s0,4–0,7 s2,0–3,7 s
Raspberry Pi 4 (tiny)< 50 ms0,5–1,0 s0,4–0,7 s1,0–1,7 s

La latence de wake word est celle de microWakeWord v2 fonctionnant on-device sur l'ESP32-S3 — elle est identique quel que soit le serveur. La latence totale perçue par l'utilisateur est la somme de la transcription Whisper et de la synthèse Piper, avec l'ESP32-S3 agissant comme terminal audio aux deux extrémités.

Un Mini PC N100 (disponible autour de 120-150 € en version barebone) offre une expérience proche d'un Echo Dot. Sur Raspberry Pi 4 avec le modèle tiny, la différence est acceptable. Le guide Mini PC N100 vs Raspberry Pi 5 pour Home Assistant couvre le choix du serveur en détail.

Comparatif : ESP32-S3 DIY vs Waveshare S3 Speaker vs Amazon Echo Dot

Critère ESP32-S3 DIY Waveshare S3 Speaker Amazon Echo Dot 5e gén.
Prix~40 €~27 €~35 €
Données envoyées au cloudAucuneAucuneToutes (Amazon)
Latence (serveur N100)1–2 s1–2 s< 1 s
Wake word en françaismicroWakeWord v2microWakeWord v2Non (Alexa uniquement)
Intégration Home AssistantNative ESPHomeNative ESPHomePartielle (nécessite Nabu Casa)
Commandes personnalisées HATotalesTotalesLimitées
Abonnement requisNonNonNon (mais services Amazon liés)
Vie privée RGPDTotaleTotaleNulle
Consommation en veille~0,5 W~0,8 W~1,7 W
Difficulté de setupIntermédiaireIntermédiaireDébutant

Dépannage — les 5 problèmes les plus fréquents

1. Le microphone ne capte rien — aucun audio détecté

Symptôme : le satellite se connecte à Home Assistant, le wake word n'est jamais détecté, les logs ESPHome ne montrent aucun level audio.

Causes et solutions par ordre de probabilité :

  • GPIO inversés SCK/WS — vérifiez que SCK (horloge bit) et WS (sélection mot) ne sont pas échangés. C'est l'erreur de câblage la plus fréquente.
  • Broche L/R flottante — la broche L/R doit être reliée à GND. Si elle est laissée non connectée, le microphone ne produit aucune donnée fiable.
  • PDM au lieu de I2S — vérifiez que pdm: false est bien dans le YAML. L'INMP441 est I2S standard.
  • Alimentation insuffisante — l'INMP441 doit être alimenté en 3.3V depuis la broche 3V3 de l'ESP32 (jamais 5V).
  • Framework Arduino — le framework arduino supporte mal le mode duplex I2S. Utilisez obligatoirement type: esp-idf dans la configuration ESP32.

2. Le wake word se déclenche en boucle

Symptôme : le satellite démarre le pipeline en continu sans intervention, ou se déclenche dès que Piper commence à parler.

  • Boucle micro/haut-parleur — la voix synthétisée par le haut-parleur est captée par l'INMP441 et reconnue comme wake word. Solution 1 : réduisez le volume du haut-parleur ou augmentez la distance physique entre les deux composants. Solution 2 : ajoutez les callbacks on_tts_start / on_tts_end dans le YAML pour couper le microphone pendant la lecture : on_tts_start: - microphone.stop_capture: micro_inmp441 et on_tts_end: - microphone.capture: micro_inmp441.
  • Bruit ambiant similaire au wake word — augmentez noise_suppression_level de 2 à 3 dans la configuration voice_assistant.
  • Sensibilité excessive du modèle — dans la configuration micro_wake_word, vous pouvez ajuster le seuil de probabilité en ajoutant probability_cutoff: 85%. La valeur par défaut est définie dans le manifest JSON de chaque modèle (en général autour de 97 %). Diminuer ce seuil améliore la détection mais augmente les faux positifs ; augmenter le réduit les faux positifs au risque de rater des déclenchements légitimes.

3. La latence dépasse 4 secondes

Symptôme : la réponse arrive mais après un délai qui rend l'assistant peu confortable.

  • Modèle Whisper trop lourd pour le serveur — passez de small à tiny. Le gain est de 1 à 2 secondes sur Raspberry Pi 4.
  • Serveur HA surchargé — vérifiez le CPU dans Paramètres → Système → Matériel. Si le CPU est à plus de 80 % en permanence, la transcription est mise en file d'attente.
  • Signal WiFi faible — l'ESP32-S3 doit avoir un signal WiFi correct (-70 dBm ou mieux). Un signal faible allonge la latence de streaming audio.
  • Démarrage à froid de Faster Whisper — la première transcription après le démarrage du serveur est toujours plus lente (chargement du modèle en mémoire). Les suivantes sont significativement plus rapides.

4. La voix Piper est grésillante ou coupée

Symptôme : la réponse est audible mais avec des artefacts, des coupures ou une saturation.

  • Alimentation 5V insuffisante — une alimentation USB de mauvaise qualité ou un hub USB ne délivrant pas assez de courant produit systématiquement des distorsions sur le MAX98357A. Utilisez une alimentation dédiée 5V/2A.
  • Volume_multiplier trop élevé — si volume_multiplier est supérieur à 6.0, le signal peut saturer numériquement avant l'amplificateur. Réduisez à 4.0 ou 3.0.
  • Câblage BCLK/LRC non blindé — sur breadboard, des câbles longs (> 15 cm) entre l'ESP32 et le MAX98357A captent des interférences. Raccourcissez les liaisons BCLK et LRC en priorité.

5. L'ESP32-S3 redémarre aléatoirement (watchdog reset)

Symptôme : le satellite disparaît régulièrement de Home Assistant, les logs montrent Guru Meditation Error ou Task watchdog triggered.

  • Alimentation insuffisante — l'ensemble ESP32-S3 + INMP441 + MAX98357A en charge audio peut consommer 400 à 600 mA en pic. Un port USB de Raspberry Pi ne délivre que 500 mA max par port. Utilisez une alimentation USB dédiée.
  • Framework Arduino — encore une raison de passer impérativement à esp-idf. Le framework Arduino gère mal les tâches temps réel du composant voice_assistant sur ESP32-S3, causant des watchdog timeouts.
  • Noise suppression level 4 — le traitement DSP à ce niveau est particulièrement intensif. Si les crashs surviennent après la détection du wake word, réduisez noise_suppression_level à 2.
  • Version ESPHome trop ancienne — plusieurs bugs de stabilité sur voice_assistant ont été corrigés dans ESPHome 2025.x. Mettez à jour l'add-on ESPHome dans Home Assistant avant de diagnostiquer davantage.

Pour aller plus loin

Votre satellite vocal local est opérationnel. Quelques pistes pour enrichir le setup :

  • LLM local comme agent de conversation — branchez Ollama comme backend conversationnel pour passer des commandes prédéfinies à un assistant capable de répondre à des questions ouvertes en français, sans cloud.
  • Alertes vocales intelligentes — associez votre satellite à Frigate + Ollama pour des alertes de sécurité contextuelles : "une personne inconnue est devant la porte" plutôt qu'un simple "mouvement détecté".
  • Étendre l'écosystème ESPHome — le même ESP32-S3 peut simultanément gérer d'autres fonctions ESPHome (capteurs de température, relais, LEDs). Consultez le guide ESPHome Zigbee natif sur ESP32-C6/H2 pour voir jusqu'où ESPHome peut aller sur du matériel Espressif.

La stack Wyoming + ESPHome + Whisper + Piper représente ce que l'open-source domotique a de mieux à offrir en 2026 : performant, économique, et intégralement sous votre contrôle. Pour environ 20 €, vous disposez d'un assistant vocal qui ne collecte rien, ne dépend d'aucun abonnement et s'intègre nativement à chaque automatisation Home Assistant que vous avez construite. Vos commandes restent chez vous.