Inleiding: Waarom een Voice-Controlled Home Assistant bouwen?

Voice control is niet langer een futuristisch concept .Het is een praktische manier om te communiceren met uw thuisomgeving. Terwijl commerciële oplossingen zoals Amazon Echo of Google Nest bieden gemak, het bouwen van uw eigen stemgestuurde huis assistent met microcontrollers geeft u volledige controle over functionaliteit, privacy en kosten. Dit project leert u hoe u goedkope microcontroller boards, microfoonmodules, luidsprekers, en cloud of on-device spraakherkenning combineren om een systeem dat reageert op uw gesproken commando's te creëren. Of u wilt het aan te zetten verlichting, controleren of een thermostaat, een DIY aanpak kunt u elk aspect op uw behoeften.

Deze uitgebreide gids omvat component selectie, systeem architectuur, stap-voor-stap hardware setup, programmering details, testmethoden en geavanceerde functies. Tegen het einde, heb je een solide basis om een betrouwbare stem assistent die past bij uw slimme thuis ecosysteem te bouwen.

De juiste microcontroller kiezen

De microcontroller is het brein van uw assistent. Het moet omgaan met audio capture, netwerk communicatie, en apparaat controle. Drie populaire keuzes zijn de ESP32, Arduino Uno met Wi-Fi schild, en Raspberry Pi Pico W.

ESP32

De ESP32 is de meest aanbevolen optie omdat het ingebouwde Wi-Fi en Bluetooth, voldoende RAM (520 KB), en een dual-core processor die kan omgaan met real-time audio streaming en API-gesprekken gelijktijdig. Het ondersteunt ook de Arduino IDE en MicroPython, waardoor programmering eenvoudig. De lage kosten (ongeveer $ 5

Arduino Uno met Wi-Fi Shield

Een Arduino Uno gekoppeld met een ESP8266 Wi-Fi schild is een haalbaar alternatief als u al eigenaar bent van een Uno. Echter, de beperkte RAM (2 KB) en langzamere kloksnelheid maken het moeilijker om audiobuffers te beheren. U zult waarschijnlijk zware verwerking moeten uitladen naar de cloud, die latency kan introduceren.

Framboos Pi Pico W

De Raspberry Pi Pico W is aangekondigd in 2022 en loopt op 133 MHz met 264 KB SRAM. Het is minder krachtig dan de ESP32 maar werkt goed voor eenvoudiger commandosets. De MicroPython ondersteuning is uitstekend voor snelle prototypering.

Voor deze gids gaan we ervan uit dat u een ESP32 gebruikt. U vindt officiële documentatie en datasheets op de Espressif ESP32 Referentie.

Microfoon- en luidsprekermodules

Betrouwbare audio-opname en afspelen zijn cruciaal. Voor de microfoon heb je een module nodig die een schoon analoog signaal uitstuurt. De MAX4466 electret microfoonversterker is een populaire keuze omdat het gevoelig is, geluidsarm en werkt met 3.3V logica. Voor een betere geluidskwaliteit, denk dan aan de INMP441 MEMS microfoon, die I2S gebruikt voor digitale audio en analoge ruisproblemen elimineert.

Voor de luidspreker kan een eenvoudige 8-ohm, 0,5W luidspreker aangesloten via een weerstand (om de stroom te beperken) hoorbare feedback produceren. Voor een hoger volume en een duidelijker uitgang, gebruik je de MAX98357 I2S versterker met een kleine luidspreker. Deze module kan een 3W luidspreker besturen en is eenvoudig te koppelen met de ESP32.

Test altijd elk audio-element afzonderlijk voordat u ze in het systeem integreert. Een snelle schets kan audio opnemen naar de seriële monitor of een testtoon afspelen om bedrading en configuratie te verifiëren.

Begrijpen van de opties voor spraakherkenning

Cloud-based spraakherkenning

Diensten zoals Google Speech-to-Text, Amazon Transcribe, of Azure Speech-to-Text[] bieden hoge nauwkeurigheid en ondersteunen meerdere talen. U stuurt audiogegevens over HTTP of WebSocket en ontvangt herkende tekst. Het nadeel is vertrouwen op internetconnectiviteit en potentiële latency (200FLT:5]. Maandelijkse gratis ingrepen bestaan (bijv. 60 minuten per maand op Google), maar zwaar gebruik kan geld kosten.

On-Device Voice Recognition

Voor privacy en offline gebruik kunt u lichte bibliotheken gebruiken zoals Porcupine (vanaf Picovoice) of TensorVolg Lite Micro] met een aangepast zoekwoordspottingmodel. Porcupine biedt voorgetrainde wakewoorden (bv. "Computer" en "Alexa") en draait op apparaten met resource-getariseerd. Het gebruikt ongeveer 100 KB RAM en 200 KB flitser. Voor continue spraakherkenning op het apparaat, overwegen Whisper[ draait op een rand AI-versneller, maar dat voegt complexiteit en kosten toe.

Een hybride benadering is ook populair: gebruik een on-device wake woord om cloud-gebaseerde herkenning voor volledige commando's te triggeren. Dit vermindert het gebruik van cloud en verbetert de responstijd.

Overzicht systeemarchitectuur

Een typische architectuur bestaat uit drie lagen:

  1. Input Layer: Microfoon legt geluid vast. Een analoge-naar-digitale converter (ADC) of I2S-interface zet het signaal om naar digitale data.
  2. Laag verwerken: De microcontroller buffert audio, detecteert een wake-woord of knopdruk, stuurt vervolgens het audio-blok naar een cloud API of verwerkt het lokaal. Na herkenning ontleedt het de opdrachttekst en brengt het in kaart met een actie.
  3. Uitvoerlaag: De microcontroller activeert relais, stuurt infraroodsignalen, publiceert MQTT berichten, of gebruikt GPIO om apparaten te bedienen. Het kan ook een audiobevestiging afspelen via de luidspreker.

Het volgende diagram (conceptueel) toont de datastroom: Microfoon → ESP32 → Wi-Fi → Cloud API → JSON response → ESP32 → Relay/LED/luidspreker. Voor lokale verwerking wordt de cloudstap vervangen door een lokale bibliotheek.

Stap-voor-stap bouwgids

Stap 1: Verzamel componenten

U heeft het volgende nodig:

  • ESP32-ontwikkelingsbord (bv. NodeMCU-32S)
  • MAX4466 of INMP441 microfoonmodule
  • MAX98357 I2S versterker + luidspreker (3W, 4-8 ohm)
  • Broodplanken en truien
  • Relaismodule (voor het regelen van wisselstroomtoestellen)
  • Optioneel: LED, weerstand, drukknop, OLED display
  • USB-voeding (5V, 2A)

Stap 2: Bedrading

Verbind de microfoonmodule:

  • MAX4466: VCC tot 3.3V, GND tot GND, OUT tot GPIO34 (ADC).
  • INMP441 (I2S): VCC tot 3.3V, GND tot GND, L/R tot GND (links kanaal), DOUT tot GPIO25, BCLK tot GPIO26, WS tot GPIO27.

Verbind de luidsprekerversterker:

  • MAX98357: VIN tot 5V (of USB-vermogen), GND tot GND, BCLK tot GPIO26, LRC tot GPIO27, DIN tot GPIO25. (Opmerking: BCLK en WS-spelden kunnen worden gedeeld met I2S-microfoon indien ze goed zijn geconfigureerd, maar het is makkelijker om afzonderlijke pinnen toe te wijzen om conflicten te voorkomen.)
  • Speaker positief voor versterker uitgang positief, negatief voor uitgang negatief.

Verbind de relaismodule:

  • VCC tot 5V, GND tot GND, IN tot GPIO32 (of een digitale pin).
  • Contacten met uw apparaat relais (met een apart hoogspanningscircuit .. neem veiligheidsmaatregelen).

Stap 3: Installeer software afhankelijkheden

Installeer het Arduino IDE en voeg het ESP32-boardpakket toe. Gebruik de Boards Manager om "esp32" door Espressif Systems te installeren. Installeer vervolgens bibliotheken:

  • WiFi.h (ingebouwd)
  • HTTPClient.h
  • ArduinoJson.h (voor het verwerken van API-responsen)
  • driver/i2s.h (voor I2S-audio)
  • WebServer.h (indien nodig voor lokale configuratie)

Voor cloud herkenning, hebt u ook de Google Speech-to-Text API client bibliotheek nodig (of gebruik directe REST oproepen). Voor on-device wake woord, install Porcupine bibliotheek van Picovoice.

Stap 4: Programmeren van de Microcontroller

Schrijf code die de volgende lus uitvoert:

  1. Initialiseren: Wi-Fi, I2S microfoon, luidspreker en GPIO instellen.
  2. Luister naar wake word: Voortdurend audio proeven en naar Porcupine voeren. Als een wake word gedetecteerd, een vlag instellen en een pieptoon afspelen.
  3. Recordcommando: Capture 3
  4. Stuur naar de cloud: Converteer audio naar het gewenste formaat (WAV PCM 16-bit, 16 kHz mono). POST naar Google Speech-to-Text eindpunt. Ontvang JSON met transcriptie.
  5. Opdracht verwerken: Gebruik een string matching of een eenvoudige intent parser. Bijvoorbeeld, als het transcript bevat "turn on the light," zet GPIO32 HIGH.
  6. Reageer: Speel een bevestigingstoon of spreek het resultaat via TTS (facultatief).
  7. Terug naar de luisterstaat.

Hieronder volgt een vereenvoudigd code knipsel (niet bedoeld om letterlijk te kopiëren) dat de structuur illustreert:

#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
#include <driver/i2s.h>

const char* ssid = "YOUR_SSID";
const char* password = "YOUR_PASS";

void setup() {
 Serial.begin(115200);
 WiFi.begin(ssid, password);
 while (WiFi.status() != WL_CONNECTED) delay(500);
 // Initialize I2S, GPIO etc.
}

void loop() {
 // Check wake word – omitted for brevity
 if (wake_word_detected) {
 record_audio();
 String transcript = send_to_google(audio_buffer);
 if (transcript.indexOf("light") != -1) {
 digitalWrite(RELAY_PIN, HIGH);
 play_beep();
 }
 delay(1000); // debounce
 }
}

Implementeer foutafhandeling voor Wi-Fi-afschakeling, API-timeouts en ongeldige commando's. Gebruik de WiFiClientSecure klasse voor HTTPS-verzoeken.

Testen en debuggen van uw assistent

Test elke component eerst in isolatie:

  • Microfoon: Upload een schets die de ADC of I2S leest en drukt amplitude af op de serieplotter. Spreek in de microfoon en verifieer de golfvormwijzigingen.
  • Speaker: Gebruik de toon() functie of I2S speler om een eenvoudige melodie uit te voeren.
  • Wi-Fi: Ping google.com van de seriële monitor.
  • Relay: Schakel de pin handmatig in en luister naar de klik.

Integreer vervolgens de spraakherkenning. Begin met een eenvoudig hard gecodeerd commando (bijv. druk op een knop om een test audiobestand te versturen) om ervoor te zorgen dat de API oproep werkt. Beweeg geleidelijk naar live microfoon input. Gebruik seriële logs om het transcript en de timing te zien.

Gemeenschappelijke vraagstukken:

  • Geen audio gedetecteerd: Controleer de I2S-speldenbedrading, sample rate, bitdiepte mismatch. Op ESP32 zijn de ADC-kanalen 0
  • API geeft "leeg" terug: Zorg ervoor dat audio in het juiste formaat (16-bits PCM, 16kHz, mono) staat. Google verwacht basis64-gecodeerde WAV of ruwe bytes met een matching sample rate.
  • Slow response: Netwerklatentie is onvermijdelijk. Gebruik indien mogelijk een bekabelde ethernetmodule of verminder de audioduur.

Uitbreiden van functionaliteit

Zodra uw basisassistent werkt, overwegen het toevoegen van deze functies:

Meerdere apparaatbesturing

Gebruik een MQTT broker (zoals Musquitto) om commando's te publiceren naar andere ESP32 knooppunten rond het huis. Uw hoofdeenheid kan "keuken/licht/aan" naar een secundaire knooppunt sturen dat dat specifieke licht regelt.

Tekst-tot-spraak (TTS) Feedback

Gebruik in plaats van een eenvoudige piep, de Google Cloud Text-to-Speech API of een offline bibliotheek zoals espeak (geporteerd naar ESP32) om bevestigingsberichten te spreken. Dit maakt de assistent interactiever.

Aangepaste Wake Woorden

Gebruik Picovoice Console om een aangepast wakewoord (bijvoorbeeld "Jarvis") te trainen en in te zetten op de ESP32. De bibliotheek is gratis voor niet-commercieel gebruik.

Spraakbediening voor media

Integreer met Spotify API of Kodi (via JSON-RPC) zodat je "jazz af kunt spelen" en muziek kunt streamen.

Sensorintegratie

Bevestig een DHT22 temperatuur/vochtigheidssensor. Als de gebruiker vraagt "Wat is de temperatuur?", lees dan de sensor en reageer met de waarde.

Lokale terugval

Als Wi-Fi is uitgeschakeld, terugvallen op een beperkte set offline commando's (bijv., schakel relais op basis van een eenvoudig trefwoord zoals "on" of "off" gedetecteerd via Porcupine trefwoord matching).

Beveiliging en privacyoverwegingen

Het bouwen van een stemassistent die voortdurend luistert roept geldige zorgen op. Neem deze stappen om jezelf te beschermen:

  • Gebruik HTTPS voor alle API-aanroepen. De ESP32
  • Minimaliseer cloudafhankelijkheid: Gebruik on-device wake woord om te voorkomen dat alle audio naar het internet wordt verzonden. Alleen kortstondige commando audio wordt verzonden.
  • Lokale verwerking: Houd voor gevoelige taken de gehele spraakpijpleiding offline. Standalone modellen zoals TensorVolg Lite Micro] kunnen een handvol commando's herkennen zonder internetverbinding.
  • Fysische mute schakelaar: Maak een schakelschakelaar tussen de microfoonvoeding en VCC. Wanneer uitgeschakeld is de microfoon volledig uitgeschakeld.
  • Netwerksegmentatie: Plaats IoT-apparaten op een apart VLAN-netwerk of gastnetwerk om blootstelling te beperken indien dit in gevaar komt.

Let ook op de servicevoorwaarden voor elke cloud API die u gebruikt. Sommige verbieden continu streamen of vereisen uitdrukkelijke toestemming van de gebruiker. Altijd voldoen aan de lokale privacyvoorschriften.

Conclusie

Het bouwen van een stemgestuurde huisassistent met microcontrollers is een lonend project dat hardware, software en natuurlijke taalverwerking samenvoegt. Door te beginnen met een ESP32, een MEMS microfoon en een cloud API, kunt u een functionele assistent in een weekend creëren. De ervaring die u opdoet in analoge audio, I2S communicatie, Wi-Fi netwerken en API integratie zal u goed bedienen in talloze andere IoT projecten.

Als je comfortabel groeit, verleg de grenzen: voeg lokale spraakherkenning, controle over MQTT, of zelfs een web dashboard om aangepaste commando's te trainen. De schoonheid van een DIY-assistent is dat het evolueert met u. Er is geen vergrendeld ecosysteem .Alle functies die u toevoegt is volledig onder uw controle.

Voor verdere lezing, controleer de ESP IoT Solution repository voor kant-en-klare stem assistent voorbeelden, en de Porcupine wake word engine documentatie om aangepaste triggers toe te voegen. Gelukkig bouwen!