Forum: Mikrocontroller und Digitale Elektronik ESP32-S3 --> ASR-Server


von D a v i d K. (oekel) Benutzerseite


Lesenswert?

Moin,

vermutlich bin ich der Zeit wieder total hinterher, denn ich musste mich 
gerade erst mal von der KI aufgleisen lassen, dass man längst nicht mehr 
von STT spricht.

Aber eines nach dem Anderen.
Ich bin begeisterter SmartHome **"Entwickler"** (hauptberuflich 
objektorientierte Sprachen und etwas eingerostet, was C angeht), 
verzeiht mir daher, wenn ich gerne auf modulare Fertiglösungen setze.

Habe einen HomeServer mit etlichen Docker-Instanzen sowie ein Dutzend 
ESP8266 mit Tasmota laufen.
Und als ich dort nun über die Limitierung von Custom-Codes zu ESPHome 
sowie einem ESP32 wechseln wollte, überschlugen sich die Neuerungen!

Daher hier die Blaupause, die mir die KI nach ca. 30 min Gespräch 
ausgespuckt hat.
Vorab, ich möchte von euch wissen, welche Community-Projekte sich mit 
diesen Themen bereits beschäftigen und was die beste 
Hard-/Software-Kombination für das Ganze wäre:

---

**1. Anreiz:**
https://www.amazon.de/gp/product/B0DRJBVQ3X/
(Den gibt es bei AliExpress auch für die Hälfte)

---

**Hardware-Hinweise für viele ESP32-S3 Nodes:**

  - ESP32-S3 Boards mit I²S-Mikrofon (wie Waveshare 1,46″ Rundboard)
  - Kompakt + stromsparend → ~200 mW typischer Verbrauch
  - WLAN stabil → für Echtzeit-Streaming oder MQTT
  - Optional Mikro-Speaker → TTS Feedback über PCM5101 DAC

**Software auf ESP32:**

  - ESPHome für Pegel/Wake Word
  - Custom Arduino / ESP-IDF für Audio-Paketierung und MQTT

**Server-Seite:**

  - Docker-Container für ASR (Vosk / Coqui)
  - Ein zentraler leistungsfähiger Rechner → erkennt Befehle aus allen 
Räumen
  - Vorteil: nur ein Server, viele ESP32-S3 Nodes → sehr 
energieeffizient

---

**Kurz gesagt:**
ESPHome selbst unterstützt derzeit weder Wake Word Detection noch die 
direkte Kommunikation mit einem ASR-Server.

**Workaround:**

  - ESP32 Firmware selbst (Arduino/ESP-IDF) liest I²S-Mikrofon aus
  - Pakete via MQTT / Websocket an Vosk/Coqui-Server
  - Wake Word lokal → Pakete nur bei Bedarf senden → reduziert 
Bandbreite
  - ESPHome kann trotzdem parallel laufen für LED-Steuerung, Taster etc.

---

**ESPHome weiterhin zuständig für:**

  - LED-Steuerung (digital oder PWM)
  - Touch  Taster  Sensoren
  - MQTT Integration für Statusmeldungen

**ESP32-Firmware zuständig für:**

  - Wake Word Detection (lokal)
  - Audio-Paketierung für ASR-Server

---

**Konzept:**
Eine einzige Firmware, die sowohl:

  - ESPHome-Komponenten für LEDs, Taster, Sensoren steuert
  - Custom-Code (Arduino / ESP-IDF) für Wake Word Detection und 
Audio-Paketierung enthält

**Voraussetzungen:**
ESPHome als Custom Component erweitern oder direkt auf ESP-IDF / Arduino 
Core programmieren.

**Herausforderungen:**

  - Komplexeres Build-System
  - RAM/Flash des ESP32 muss reichen → Wake Word Modelle + ESPHome 
(+GPIOs/PWM)
  - Echtzeit-Streaming muss gut optimiert sein

---


Hat/Hatte damit schon Jemand Erfahrungen und Kann mir Tips zum weiteren 
Vorgehen/Einkauf/Fehlkauf/Dimensionierung geben?

LG aus dem Norden

: Bearbeitet durch User
von D a v i d K. (oekel) Benutzerseite


Lesenswert?

**Programmierergüsse der KI (Beispielcode, Custom Component, I²S, Wake 
Word Task, MQTT):**
1
// ===============================
2
// ESPHome Custom Component Skeleton für Audio / Wake Word
3
// ===============================
4
5
#include "esphome.h"
6
7
class AudioTrigger : public Component, public PollingComponent {
8
public:
9
  AudioTrigger() : PollingComponent(10) {} // Polling alle 10ms
10
11
  void setup() override {
12
    // Mikrofon / I2S initialisieren
13
  }
14
15
  void update() override {
16
    // Wake Word Detection / Pegel
17
    if (wakeword_detected()) {
18
      // MQTT oder ESPHome Event auslösen
19
      id(my_binary_sensor).publish_state(true);
20
    }
21
  }
22
};
23
24
// ===============================
25
// I2S Initialisierung (ESP-IDF / Arduino)
26
// ===============================
27
i2s_config_t i2s_config = {
28
    .mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_RX),
29
    .sample_rate = 16000,
30
    .bits_per_sample = I2S_BITS_PER_SAMPLE_16BIT,
31
    .channel_format = I2S_CHANNEL_FMT_ONLY_LEFT,
32
    .communication_format = I2S_COMM_FORMAT_I2S_MSB,
33
    .intr_alloc_flags = ESP_INTR_FLAG_LEVEL1,
34
    .dma_buf_count = 8,
35
    .dma_buf_len = 64,
36
    .use_apll = false
37
};
38
i2s_driver_install(I2S_NUM_0, &i2s_config, 0, NULL);
39
40
// ===============================
41
// FreeRTOS Task für Wake Word Detection
42
// ===============================
43
xTaskCreatePinnedToCore(
44
    wakeWordTask,       // Task Funktion
45
    "WakeWordTask",     // Name
46
    4096,               // Stackgröße
47
    NULL,               // Parameter
48
    1,                  // Priorität
49
    NULL,               // Task Handle
50
    1                   // Core 1
51
);
52
53
// ===============================
54
// Audio-Paketierung & MQTT Streaming
55
// ===============================
56
while(streaming) {
57
    size_t bytes_read;
58
    i2s_read(I2S_NUM_0, buffer, buffer_size, &bytes_read, portMAX_DELAY);
59
    mqtt_publish_audio(buffer, bytes_read);
60
}

PS: Irgendwie funktioniert die Formatierung hier gerade nur in der 
Vorschau...

von Harald K. (kirnbichler)


Lesenswert?

D a v i d K. schrieb:
> Daher hier die Blaupause, die mir die KI nach ca. 30 min Gespräch
> ausgespuckt hat.

Lass es doch bitte einfach bleiben.

Es hat keinen Sinn, das Forum mit KI-Slop zuzumüllen.

von D a v i d K. (oekel) Benutzerseite


Lesenswert?

Harald K. schrieb:
> Es hat keinen Sinn, das Forum mit KI-Slop zuzumüllen.

Es hieß in der Vergangenheit immer: "mehr Kontext, wir haben keine 
Glaskugel"
Nun gebe ich den Minimalauszug meiner Recherge und es ist auch wieder 
falsch.
(Ich hoffe es atet nun nicht wieder in Shitstorm aus, denn diese Art von 
Vermüllung hatten wir bereits immer)

Freue mich auf hilfreiche Info (den Code kann ich gerne versuchen noch 
zu löschen, auch wenn ich ihn als Ansatz ebenfalls interessant fand)

von Alexander (alecxs)


Lesenswert?

D a v i d K. schrieb:
> Freue mich auf hilfreiche Info

Bei was denn?

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Du wirst den Shitstorm eher dadurch auslösen, daß Du erst irgendwelche 
Dinge von der KI "programmieren lässt" und diese dann durch uns gefixt 
haben willst, weil die KI es eben doch nicht so richtig bringt.

Ich finde es durchaus interessant, was eine KI heute für Programme 
schreiben kann, aber wenn man es richtig gut haben will oder irgendwas 
nicht so funktioniert wie es soll, dann kommt man eben immer noch nicht 
drum herum, selbst programmieren zu lernen.

Für die ESP32 findet man sehr viele Möglichkeiten und Bibliotheken in 
der Arduino-Umgebung.

von D a v i d K. (oekel) Benutzerseite


Lesenswert?

Alexander schrieb:
> D a v i d K. schrieb:
>> Freue mich auf hilfreiche Info
>
> Bei was denn?
welche Community-Projekte sich mit
diesen Themen bereits beschäftigen

Ben B. schrieb:
> Du wirst den Shitstorm eher dadurch auslösen, daß Du erst irgendwelche
> Dinge von der KI "programmieren lässt" und diese dann durch uns gefixt
> haben willst...
Nein, Copilot und Co liefern immer nur Ansätze. Was mir dort die letzten 
6 Monate vorgeschlagen wurde war immer schlechter als mein Code und kam 
nie zum Eisatz. Ich kenne die Problematik also und würde es nie von 
Jemand anderen verlangen.


> Für die ESP32 findet man sehr viele Möglichkeiten und Bibliotheken in
> der Arduino-Umgebung.
Das ist ja auch nur eine Chipfamilie. Bibliotheken werde ich sicher 
selbständig finden. Mir geht es um ganze Projekte oder Frameworks, damit 
man das Rad nicht neu erfinden muss bzw. sicher auf die Kernprobleme 
/"das neue" konzentrieren kann.

Niemand will die 30. MQTT Lib bauen oder den 101. IP-Stack für die 
kleinen Biester. Gleiches gilt für Displays und Touches.

95% meiner Anforderung erfüllt ja ESPHome. Einige % kommen jetzt durch 
die neue Hardware daher, die halt noch nicht includiert sind und ich 
möchte wissen wer damit bereits Erfahrungen hat.

Keine Vorgebeten Endlösungen aus dem Forum hier (ich weiß nicht wieseo 
dies immer eines der ersten Vorwürfe ist) sondern einfach nur Hilfe zur 
Selbsthilfe in Form von Quellen, Stichworten oder State of the Art 
Erfahrungen.

LG

von Alexander (alecxs)


Lesenswert?

D a v i d K. schrieb:
> welche Community-Projekte sich mit
> diesen Themen bereits beschäftigen

Ich verstehe immernoch nicht wonach Du fragst. Suchst Du eine 
Alternative zu Tasmota?

Der Text mit Pfeilen → und mit **Sternchen** triggert. Da er einen 
großen Teil Deines Posts ausmacht habe ich nicht weitergelesen. Es wäre 
einfacher wenn Du ein konkretes Anliegen mit eigenen Worten formulieren 
könntest. Welche Anforderungen sind denn bei Dir dazugekommen, was 
willst Du realisieren?

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

>> Für die ESP32 findet man sehr viele Möglichkeiten
>> und Bibliotheken in der Arduino-Umgebung.
> Das ist ja auch nur eine Chipfamilie. [..]
So so. Das solltest Du vielleicht nochmal nachlesen.

Ansonsten halt wirklich einfach was eigenes schreiben, so schwer ist 
MQTT nun auch wieder nicht. Umständlich ist es, obwohl es angeblich 
genau für kleine Controller bzw. IoT gemacht ist... aber meiner Meinung 
nach ist das Protokoll mit seiner dummen Längenkodierung vermischt mit 
den Nutzdaten der letzte Scheiß. Mit Telegrammen, in denen man einfach 2 
oder 4 Byte zur Angabe der Länge der Nutzdaten hat, wäre das erheblich 
einfacher und übersichtlicher gewesen, auch auf kleinen Controllern.

von D a v i d K. (oekel) Benutzerseite


Lesenswert?

Alexander schrieb:
> was willst Du realisieren?

Global in meinem IoT: Umstellung von Tasmota auf ESPHome (da ersteres 
nur sehr eingschränkt eigenen Code Scripte zulässt)

Konkret:
Einen Mikropfon-Satelliten für jeden Raum.
(Der aber auch noch kleinere Sensor und Aktoren-Aufgaben übernimmt, 
damit ich dafür nicht erneut einen ESP benötige)

PS: Mir könnte ja auch einer der Admins hier verraten, warum die 
Formatierung im Makroviewer der Vorschau noch funktioniert und beim 
finalen Absenden nicht mehr. Danke.

von Alexander (alecxs)


Lesenswert?

Die Threads die es hier für ESPHome gibt sehen alle sehr nach 
Einzelkämpfer aus, da ist nicht viel Input gekommen. Ich bin da auch 
raus.

von D a v i d K. (oekel) Benutzerseite


Lesenswert?

Alexander schrieb:
> Die Threads die es hier für ESPHome gibt sehen alle sehr nach
> Einzelkämpfer aus, da ist nicht viel Input gekommen. Ich bin da auch
> raus.

Danke, ich hege aber die stille Hoffnung, dass es auch anderen guten 
Foren gibt und es erlaubt sei Quellen außerhalb von <<hier>> zu posten.

von Harald K. (kirnbichler)


Lesenswert?

D a v i d K. schrieb:
> und es erlaubt sei Quellen außerhalb von <<hier>> zu posten.

Ist es ja auch. KI-Slop aber ist keine Quelle.

von D a v i d K. (oekel) Benutzerseite


Lesenswert?

Harald K. schrieb:
> D a v i d K. schrieb:
>> und es erlaubt sei Quellen außerhalb von <<hier>> zu posten.
>
> Ist es ja auch. KI-Slop aber ist keine Quelle.

Ahhhhhhhh.....soryy :P
Ich brauche doch kein Forum um Selbstgespräche zu führen ;)

Wenn ich eine Lösung hätte würde ich doch das Endprodukt präsentieren.
Mein Anliegen ist nicht "Slop" als Quelle zu erklären, sondern euch zu 
bitten mir Quellen zu nennen.

von Harald K. (kirnbichler)


Lesenswert?

D a v i d K. schrieb:
> Mein Anliegen ist nicht "Slop" als Quelle zu erklären, sondern euch zu
> bitten mir Quellen zu nennen.

Ach. Und was sollte dann Dein Eröffnungsbeitrag hier?

von D a v i d K. (oekel) Benutzerseite


Lesenswert?

Ich geb es auf.

@Admin bitte komplett löschen.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

> Ich geb es auf.
> @Admin bitte komplett löschen.
Das gibst Du auch noch auf.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.