Introduction

Publié par Richard Dern le 16/09/2019 - Aucun commentaire

Sommaire du dossier
  1. Introduction
  2. Les filtres
  3. Le circuit
  4. Câblage
  5. Software

Contexte

Mon installation de HomeAssistant et de ses périphériques est un peu particulière, dans la mesure où c'est une installation de hass.io sur un serveur x86. Je n'ai donc pas utilisé une image de hass.io ni de HomeAssistant sur un Raspberry Pi: j'ai opté pour l'installation via docker sur un système debian buster. En conséquence, je n'ai pas directement accès au système d'exploitation depuis HomeAssistant.

En plus, je ne veux pas que les notifications vocales sortent de la machine qui héberge HomeAssistant: le serveur HomeAssistant est planqué sous l'escalier, et j'aimerais au moins mes notifications vocales dans mon bureau. Enfin, je veux peut être, à terme, avoir des notifications vocales à plusieurs endroits différents.

Difficultés

Première difficulté: faire du TTS sur le serveur HomeAssistant sans accès au système d'exploitation. Je précise également qu'il est absolument hors de question de passer par Google, Amazon, Microsoft, ou n'importe quel autre fournisseur cloud. Le TTS doit impérativement se faire en local. C'est une contrainte personnelle: rien ne m'empêche de le faire, c'est juste que je m'y refuse. Ah, si, il y a bien une contrainte technique: aussi surprenant que ça puisse paraître, pour que les services cloud puissent renvoyer le fichier son, HomeAssistant doit être accessible depuis Internet, ce qui n'est pas mon cas.

Il n'y a qu'une seule solution Libre qui respecte ces critères: MaryTTS. Mais son installation m'a posé de nombreux problèmes, et au final, je n'étais pas complètement satisfait. C'est écrit en java, donc c'est très lourd, et je trouve que la maintenance est pénible. Surtout sans paquet debian. Dommage, parce qu'il fonctionne en client/serveur et facilitait donc l'utilisation avec HomeAssistant sous docker.

Au final, j'ai opté pour un montage que d'aucun considèrera sûrement comme farfelu, mais ça fonctionne bien, via picoTTS.

Deuxième difficulté: vu que pico ne fonctionne pas en client/serveur, il a fallut que je créé un mini-serveur qui va attendre les requêtes textuelles pour les convertir en fichier wav.

Troisième difficulté: envoyer ce wav au Raspberry Pi Zero W qui va ensuite lire ce fichier.

Enfin, dernière difficulté: sortir du son depuis un Raspberry Pi Zero W dépourvu de sortie son (autre que la sortie HDMI que je ne vais pas exploiter).

Pourquoi faire simple quand on peut faire compliqué hein 😅

Mais je crois que tout ce montage va se révéler particulièrement intéressant et pertinent: en découplant le TTS du Raspberry Pi Zero W, donc en laissant le serveur HomeAssistant créer le fichier son, le Raspberry Pi n'est plus qu'un basique lecteur de fichiers wav en réseau. Et comme il est dépourvu de sortie son facile à utiliser, je dois passer par le PWM. Or, les ESP32 intègrent un DAC et du PWM. Donc, à terme, tout ce montage à base de Raspberry Pi devrait pouvoir être très facilement complété voire remplacé par des ESP32...

Mon montage - physique - final fait très "bricolage" bas de gamme. Il y a de nombreuses améliorations possibles, et je les aurai réalisées d'office si les conditions nécessaires avaient été réunies:

Notifications vocales - Raspberry Pi Zero W Edition - Projet terminé

Le Raspberry Pi Zero W et le module ampli dans leur boitier doté d'une paire de haut-parleurs et d'une LED

  • Attribution:
  • Richard Dern

Composants

Le Raspberry Pi Zero W va donc être au coeur de ce montage. Est-il est encore nécessaire de le présenter ?

Comme il ne dispose pas de sortie son facile à exploiter sans un ampli HDMI ou une TV, je vais devoir la "fabriquer". Heureusement pour moi, les chinois ont créé cette formidable petite carte dotée d'un ampli PAM8403 prête à l'emploi: elle s'alimente en 5V et sort du 2x3W. Veuillez noter que cette puissance ne conviendra pas à un environnement bruyant. On peut la trouver facilement sur eBay pour quelques dizaines de centimes !

Comme on va utiliser le PWM du Pi pour sortir du son et que ce n'est pas idéal de le faire directement, il va falloir construire des filtres passe-haut et passe-bas. Pour chaque canal, on aura donc besoin de deux résistances et deux condensateurs. Il restera malgré tout un bruit audible que l'on va pouvoir atténuer en utilisant une troisième résistance entre l'ampli et le haut-parleur.

J'ai trouvé chez mon revendeur habituel des haut-parleurs parfaits pour mon usage: 3W, 4Ω, et une large bande passante (entre 200Hz et 20kHz), en plus d'être extrêmement compacts. J'ai choisi une forme rectangulaire parce que je pensais que lorsque je ferai mon montage, je pourrais créer un boitier avec mon imprimante 3D. Malheureusement, elle n'est pas encore prête... Donc pour me simplifier la vie, j'aurai peut être dû prendre des haut-parleurs ronds... Quoiqu'il en soit, ils sont de très bonne qualité.

J'ai ajouté une LED rouge on ne peut plus classique, couplée à une résistance, qui s'allumera pendant la lecture du fichier wav.

Commentaires

Vous pouvez utiliser markdown dans votre commentaire. Si vous indiquez une adresse email, elle sera utilisée pour vous notifier des commentaires publiés sur cette page. Elle ne sera utilisée qu'à cette fin et ne sera jamais transmise à un tiers.