Hast du dich jemals gefragt, wie du deinen Sprachassistenten wie Amazon Alexa oder Google Home durch einen lokalen Sprachassistenten ersetzen kannst, der deine Sprachdaten nicht um die Welt schickt, sondern alles lokal bei dir zu Hause verarbeitet, weil du dir Sorgen machst, wie die großen Konzerne deine Daten verwenden? Oder bist du einfach nicht zufrieden mit den Funktionen und der Intelligenz, die sie bieten, und möchtest eigene Funktionen hinzufügen?
Wenn deine Antwort „ja“ lautet, dann ist diese Beitragsreihe perfekt für dich. Ich zeige dir in verschiedenen Episoden, wie du deinen eigenen, lokalen Sprachassistenten bauen kannst.
In dieser ersten Episode konzentriere ich mich darauf, einen groben Prototyp zu bauen. In den kommenden Episoden werden wir ein Gehäuse bauen und den Assistenten noch intelligenter machen!
Das folgende Video gibt dir einen Überblick darüber, was passieren wird. Alle Schritte werden im folgenden Artikel detaillierter erklärt. Hinweis: Video nur auf Englisch.
Überblick über die Architektur
Das folgende Schaubild zeigt die Gesamtarchitektur des Systems. Im Zentrum der Architektur steht ein ESP32-Entwicklungsboard mit installiertem ESPHome. Das ESP32-Entwicklungsboard ist mit einem Mikrofon (zum Aufzeichnen deiner Stimme), einem Verstärker und einem Lautsprecher (zum Antworten) und einem LED-Kreis (zur Anzeige des Status) verbunden. Das ESP32 kommuniziert mit Home Assistant und sendet die Sprachaufnahmen, um das Aktivierungswort zu erkennen. Wenn das Aktivierungswort erkannt wurde, hört es auf Befehle.
Benötigte Teile und Werkzeuge
- INMP441 Mikrofon
- MAX98375A Verstärker
- 5W Lautsprecher
- WS2812 RGB LED Ring
- ESP32-Entwicklungsboard (Ich benutze ein ESP32 DEV Kit C NodeMCU)
- Home Assistant Installation mit installiertem ESPHome Add-on (Besuche https://www.home-assistant.io/ und https://esphome.io/ für Details zur Einrichtung)
Schritt 1: Verkabelung
Das folgende Bild zeigt genau, wie alles verkabelt werden muss. Die von mir gewählten Pins zum Anschließen des Mikrofons und des Verstärkers an das ESP32 sind nur Beispiele. Du kannst auch andere verwenden, musst dann jedoch auch die YAML-Datei anpassen (Schritt 2).
Schritt 2: ESPHome YAML-Code schreiben
Dies ist mein Beispiel-ESPHome-YAML-Code, um den Sprachassistenten sowie den LED-Ring prototypisch zum Laufen zu bringen:
esphome:
name: my-smart-speaker
friendly_name: my-smart-speaker
esp32:
board: esp32dev
framework:
type: arduino
# Enable logging
logger:
level: DEBUG
# Enable Home Assistant API
api:
encryption:
key: <YOUR_ENCRYPTION_KEY>
ota:
password: <YOUR_OTA_PASSWORD>
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "My-Smart-Speaker"
password: <YOUR_HOTSPOT_FALLBACK_PASSWORD>
captive_portal:
i2s_audio:
- id: i2s_in
i2s_lrclk_pin: GPIO27
i2s_bclk_pin: GPIO26
- id: i2s_out
i2s_lrclk_pin: GPIO25
i2s_bclk_pin: GPIO14
microphone:
- platform: i2s_audio
i2s_audio_id: i2s_in
adc_type: external
pdm: false
id: mic_i2s
i2s_din_pin: GPIO13
bits_per_sample: 32bit
speaker:
- platform: i2s_audio
i2s_audio_id: i2s_out
id: speaker_i2s
dac_type: external
i2s_dout_pin: GPIO32
mode: mono
voice_assistant:
microphone: mic_i2s
speaker: speaker_i2s
use_wake_word: false
noise_suppression_level: 3
auto_gain: 31dBFS
volume_multiplier: 2.0
id: assist
on_end:
- light.turn_off:
id: led_ring
on_wake_word_detected:
- light.addressable_set:
id: led_ring
range_from: 16
range_to: 17
red: 0%
green: 0%
blue: 100%
- delay: 0.03s
- light.addressable_set:
id: led_ring
range_from: 15
range_to: 18
red: 0%
green: 0%
blue: 100%
- delay: 0.03s
- light.addressable_set:
id: led_ring
range_from: 14
range_to: 19
red: 0%
green: 0%
blue: 100%
- delay: 0.03s
- light.addressable_set:
id: led_ring
range_from: 13
range_to: 20
red: 0%
green: 0%
blue: 100%
- delay: 0.03s
- light.addressable_set:
id: led_ring
range_from: 12
range_to: 21
red: 0%
green: 0%
blue: 100%
- delay: 0.03s
- light.addressable_set:
id: led_ring
range_from: 11
range_to: 22
red: 0%
green: 0%
blue: 100%
- delay: 0.03s
- light.addressable_set:
id: led_ring
range_from: 10
range_to: 23
red: 0%
green: 0%
blue: 100%
- delay: 0.03s
- light.addressable_set:
id: led_ring
range_from: 9
range_to: 1
red: 0%
green: 0%
blue: 100%
- delay: 0.03s
- light.addressable_set:
id: led_ring
range_from: 9
range_to: 24
red: 0%
green: 0%
blue: 100%
- delay: 0.03s
- light.addressable_set:
id: led_ring
range_from: 7
range_to: 8
red: 0%
green: 50%
blue: 50%
- light.addressable_set:
id: led_ring
range_from: 0
range_to: 1
red: 0%
green: 50%
blue: 50%
- delay: 0.1s
- light.addressable_set:
id: led_ring
range_from: 2
range_to: 6
red: 0%
green: 100%
blue: 00%
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(assist).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(assist).set_use_wake_word(false);
light:
- platform: neopixelbus
type: GRB
variant: WS2812
pin: GPIO4
num_leds: 24
name: "LED Ring"
id: "led_ring"
Nachdem du den YAML-Code geschrieben hast, musst du ihn auf das ESP-Entwicklungsboard flashen. Ich möchte dies hier nicht im Detail erklären, da es bereits zahlreiche Tutorials gibt, die dies ausführlich beschreiben.
Schritt 3: Sprachpipeline in Home Assistant einrichten
Um eine Sprachpipeline in Home Assistant einzurichten, folge diesen Schritten:
- Installiere die Whisper- und Piper-Add-ons über „Einstellungen“ > „Add-ons“ – diese Add-ons sind notwendig, um Text in Sprache und umgekehrt zu konvertieren. Du musst dann die beiden Add-ons starten.
- Gehe nun zum Abschnitt „Einstellungen“ > „Geräte & Integrationen“, wo du sowohl Piper als auch Whisper automatisch entdeckt sehen solltest. Klicke auf „konfigurieren“ für beide Add-ons. Du solltest nun sowohl Piper als auch Whisper in deiner Liste der Integrationen sehen.
- Danach kannst du zu „Einstellungen“ > „Sprachassistent“ gehen, um eine Sprachpipeline einzurichten. Wähle „Assistent hinzufügen“.
- Jetzt musst du deinem Assistenten einen Namen geben. Unter „Conversation Agent“ wähle „Home Assistant“. Unter „Speech-to-Text“ wähle „Whisper“ und unter „Text-to-Speech“ wähle „Piper“.
- Schließlich wähle ein Aktivierungswort. Für Teil I der Serie wählen wir ein vordefiniertes Aktivierungswort wie „Alexa“.
Schritt 4: Experimentiere mit deinem neuen prototypischen Sprachassistenten!
Nun hast du einen prototypischen lokalen Sprachassistenten eingerichtet – Glückwunsch! Ich hoffe, er funktioniert. Viel Spaß beim Experimentieren. Wenn du auf Probleme stößt, hinterlasse bitte einen Kommentar!
Teil II dieser Tutorial-Reihe findest du hier.
No responses yet