Giriş: Neden bir ses kontrol eden bir Home Asistanı Oluşturun?

Ses kontrolü artık bir futuristik konsept değildir - ev ortamınızla etkileşim kurmanın pratik bir yoludur. Amazon Echo veya Google Nest gibi ticari çözümler, kendi ses kontrollü ev asistanını mikrokontrolcülerle birlikte inşa etmek, gizlilik ve maliyetle kontrol etmenizi sağlar. Bu proje size düşük maliyetli mikro kontrol tahtalarını, mikrofon modüllerinizi, konuşmacıları ve bulut veya on-device sesinizi, konuşma komutlarınızı size yanıt veren bir sistem oluşturmak için nasıl bir yaklaşım sunar.

Bu genişletilmiş kılavuz, bileşen seçimi, sistem mimarisi, adım adım adım donanım kurulumu, programlama detayları, test yöntemleri ve gelişmiş özellikler içerir. Sonunda, akıllı ev ekosistemine sığabilecek güvenilir bir ses asistanı inşa etmek için sağlam bir temele sahip olacaksınız.

Doğru Micronetler seçmek

Mikrokontroller asistanınızın beynidir. Ses yakalama, ağ iletişimi ve cihaz kontrolü ile ilgilidir. Üç popüler seçim ESP32, Arduino Uno'yu Wi-Fi kalkanı ve Raspberry Pico W ile birlikte ele almalıdır.

ESP32

ESP32 en tavsiye edilen seçenek çünkü Wi-Fi ve Bluetooth'ı inşa etti, yeterli RAM (520 KB), ve gerçek zamanlı ses akışı ve API çağrılarını aynı anda ele geçirebilecek bir çift çekirdekli işlemci. Ayrıca Arduino IDE ve MicroPython'u destekliyor, programlamayı basit hale getiriyor.

Arduino Uno with Wi-Fi Shield

Bir Arduino Uno ESP8266 Wi-Fi kalkanı ile eşleştirilmiş, zaten Uno sahibiyseniz, sınırlı RAM (2 KB) ve daha yavaş saat hızı, ses tamponlarını yönetmek için daha zor bir işlem yapmanız gerekir.

Raspberry Pi Pi Pico W

2022 yılında Raspberry Pico W, Wi-Fi'yi içeriyor ve 264 KB SRAM ile 133 MHz'de çalışıyor. Daha basit komut setleri için daha az güçlü, MicroPython desteği hızlı prototipleme için mükemmel.

Bu kılavuz için, ESP32 kullanıyorsanız resmi belge ve veri tablolarını bulabilirsiniz.(0)Espressif ESP32 Referans[Döntgen: 1)

Mikrophone ve Konuşmacı Modülleri

Güvenilir ses yakalama ve oyun gerisi önemlidir. mikrofon için, temiz bir analog sinyal için I2S kullanan bir modüle ihtiyacınız var. MAX4466 elektrikli mikrofonu amplifikatör popüler bir seçimdir, çünkü hassas, düşük doz ve daha iyi ses kalitesi ile çalışır, INMP441 MEMS mikrofonu için I2S'yi dijital ses için kullanan ve analog gürültü sorunlarını ortadan kaldırır.

Konuşmacı için, basit bir 8-ohm, 0,5W konuşmacı bir direnici (bugünün sınırı) ile bağlantılı olarak, yüksek hacimli ve daha net bir çıkış için, MAX98357 I2S amplifikatörü küçük bir konuşmacı ile kullanabilir ve ESP32 ile arayüze kolay.

Her ses bileşeninin onları sisteme entegre etmeden önce bireysel olarak test edin. Hızlı bir çizer, ekran monitöre ses kayıt edebilir veya kablolama ve yapılandırmayı doğrulamak için bir test oynayabilir.

Ses Tanımlama Seçenekleri

Buluta Dayalı Ses Tanımlama

Google Talk-to-Text , [[Dönetici:2|Amazon Transcript) veya [[Dönetici: 4|Dış[Dönetici[Dönetici[Dönetici[Dönetici], yüksek doğruluk ve destek birden çok dil sunar.You send audio data over or WebSocket and receive known text.The downside is depend on internet bağlantısı ve potansiyel latency (200-500 ms). Aylık ücretsiz tiers (örneğin, 60 dakika Google'da) var, ancak ağır kullanım maliyeti para.

On-Device Voice Recognition

Gizli ve çevrimdışı operasyon için, hafif kütüphaneler kullanabilirsiniz.(0)Porcupine) veya [[Bloga|2|TensorFlow Lite Micro[DDDDDDDDDDDDDDDDDDDDDD) , Porcupine, önceden hazırlanmış bir uyandırma kelimesi sunar (İngilizce).

Hibrit bir yaklaşım da popülerdir: Bulut tabanlı tam komutlar için tanımayı tetiklemek için bir on-device uyanma kelimeyi kullanın.Bu bulut kullanımını azaltır ve yanıt süresini artırır.

Sistem Mimari Genel Bakış

Tipik bir mimari üç tabakadan oluşur:

  1. [FOC) veya I2S arayüzü, sinyali dijital verilere dönüştürür.
  2. [FONT:0)Processing Katman[[DÜDÜT:1): Mikrokontrolörler ses, bir uyandırma kelimeyi veya düğme basınını tespit eder, sonra ses chunk'u bulut API'ye gönderir veya yerel olarak işlemleri yapar.
  3. [FONT=0)Output Katman: Mikrokontrolörler röleleri tetikler, kızılötesi sinyalleri gönderir, MQTT mesajları yayınlar veya GPIO'yi kontrol cihazlarına kullanır. Ayrıca konuşmacı aracılığıyla bir ses onay oynayabilir.

Aşağıdaki diyagram (konceptual) veri akışını gösterir: Microphone → ESP32 → Wi-Fi → Cloud API → JSON yanıt → ESP32 → yerel işlem için bulut adım yerel bir kütüphane tarafından değiştirilir.

Step-by-Step Build Guide

Adım 1: Gather Bileşenler

İhtiyacınız olacak:

  • ESP32 geliştirme kurulu (örneğin NodeMCU-32S)
  • MAX4466 veya INMP441 mikrofon modülü
  • MAX98357 I2S amplifik + konuşmacı (3W, 4-8 ohm)
  • Ekmek ve atlayıcı teller
  • Relay modülü ( AC cihazları kontrol etmek için)
  • Seçmeli: LED, dirençli, it düğmesine, OLED ekran
  • USB güç tedariki (5V, 2A)

Adım 2: Wiring

Mikrofon modülüne bağlanın:

  • [FONT:0)MAX4466[Dönem: VCC'ye 3.3V'ye, GND'ye GND'ye kadar (ADC) OUT'a kadar.
  • [FONT:0)INMP441 (I2S))[FONT to 3, 3, 3, C) GND, GND, L/R to GND (Sol kanal) DOUT to GPIO25, BCLK to GPIO27, WS to GPIO27.

Konuşmacı yükselticisine bağlanın:

  • [FONT=0)MAX98357[[Dönetici: VIN to 5V (veya USB gücü), GND'ye GND, BCLK'yı GPIO26'ya, LRC'ye GPIO27'ye, DIN'ye GPIO25'e (Not: BCLK ve WS pins, uygun bir şekilde yapılandırılırsa I2S mikrofonla paylaşılabilir, ancak çatışmaları önlemek için ayrı pimler atamak daha kolaydır.)
  • Konuşmacı pozitif çıktı, negatif çıktı.

röle modülüne bağlanın:

  • VCC 5V, GND'e GND, GPIO32'ye (veya herhangi bir dijital pin)
  • Cihazınıza (bir yüksek gerilim devresini kullanarak) klinisyen kontakları - güvenlik önlemleri alın.

Adım 3: Yazılım Bağımlılığı Yükleme

Aşağıdakiler için:0)Arduino IDE[[Dönetici: 1 ) ve ESP32 yönetim paketini ekleyin. Kurullar Yöneticisini Espressif Systems tarafından "esp32" yüklemeye kullanın.

  • [FONT=0)WiFi.h[[Dönetici:0)
  • [FONT=0)HTTPClient.h).
  • [FONT=0)ArduinoJson.h) (Pekiz yanıt için)
  • [FONT=0) {0}([0) {0}
  • [FONT=0)WebServer.h[[Dönetici için gerekirse yerel konfigürasyon için)

Bulut tanıma için, aynı zamanda [[0|Google Konuşma-Text API) müşteri kütüphanesi (veya doğrudan REST çağrılarını kullanın).For on-device uyandırma kelimesi için, installETHFLT:2Porcupine kütüphanesi) Pico faturasından.

Adım 4: Mikrokontrolör programlama

Aşağıdaki döngüyü gerçekleştiren kod yazın:

  1. [FONT:0)Initialize[Dönetici: Wi-Fi, I2S mikrofonu, konuşmacıyı ve GPIO'yi kurdu.
  2. [FONT:0) Uyanan kelime için bakınız[[Dönetici: Sürekli örnek ses ve Porcupine besleme. Bir uyandırma kelimesi tespit edildiğinde, bir bayrak ayarla ve bir beep oyna.
  3. [FONT:0)Record komut[[[Dönetici: 1 ): 3-5 saniye ses yakalama (veya sessizlik algılamasına kadar).
  4. [FONT=0] Buluta ek olarak [Dönetici: Gerekli formata ses (WAV PCM 16-bit, 16 kHz mono). POST to Google Talk-to-Text endpoint. Alıcı JSON with transcript.
  5. [FONT:0]Parse komut[[[Dönetici: 1)[[Dönetici:0)[değiştir | kaynağı değiştir], eğer transkript “dönüşüm” içeriyorsa, GPIO32 Yüksek Lisansı.
  6. [FONT:0)Respond[DÜT:1): TTS (isteğe bağlı) ile sonuç oyna.
  7. Dinleyerek devlet dinlemek için geri dön.

Aşağıda basitleştirilmiş bir kod parçaları (projeyi gösteren kopyalanmış fiilatim) anlamına gelmiyor:

#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
 }
}

Wi-Fi bağlantı için uygulama hatası, API zamanıouts ve geçersiz komutlar.Use theETHFLT:0)WiFiClientSecure) class for HTTPS requests.

Test ve Debugging Your Asistan

İlk önce izolasyonda her bileşeni test edin:

  • [FONT=0)Micfon[Dönetici: ADC veya I2S okur ve baskılar seri arsaya doğru gidiyor ve dalgaform değişiklikleri doğrulayın.
  • [FONT:0) Konuşma[DÜT:1): Tone() işlevi veya I2S oyuncuyu basit bir melodiyi yazdırmak için kullanın.
  • [FONT:0)Wi-Fi[DÜT:1]: Seri monitöründen Google.com.
  • [FONT:0)Relay[DÜT:1): pin manuel olarak çal ve tıklamayı dinle.

Sonra ses tanımasını entegre edin. Basit bir zor kodlanmış komutla başlayın (örneğin, bir test ses dosyası göndermek için bir düğmeye basın) API çağrısını işe almak için. Gradually canlı mikrofon girişi için hareket edin.

Ortak konular:

  • [FONT=0] Hiçbir ses tespit edilmedi[[Dönetici: Check I2S pins kablo, örnek oranı, biraz derinlik yanlış bir maç.In ESP32, ADC kanalları 0-7 tüm mevcut değil; GPIO34-39 ADC1 için.
  • [[0)API geri döner "boş" (): Sesin doğru formatta olması (16-bit PCM, 16kHz, mono). Google, baz64-encoded WAV veya ham bytes ile bir eşleme oranıyla bekliyor.
  • [FONT:0]Slow yanıt[[[DÜDÜT:1): Ağ gecikmesi kaçınılmazdır. Mümkün olursa telli Ethernet modülü kullanın veya ses süresini azaltır.

Fonksiyonelliği genişletmek

Temel asistanınız işe başladığında, bu özellikleri eklemeyi düşünün:

Birden çok Cihaz Kontrolü

Evdeki diğer ESP32 düğümlerine komutları yayınlamak için bir e-posta aracı ([0)MQTT brokeri[[[Döntgen:0))) ve bu özel ışık kontrolleri ikincil olarak gönderebilirsiniz.

Text-to-Speech (TTS) Feedback

Basit bir arı yerine, ESD'yi kullanın:0)Google Cloud Text-to-Speech API) veya çevrimdışı bir kütüphane [FONT:2|peak) (tekrarlı mesajlar konuşmak için.Bu, asistanı daha interaktif hale getirir.

Özel Wake Words Words Words Words Words

Pico fatura Konsolu özel bir uyandırma kelimeyi (örneğin, "Jarvis" ve ESP32'de dağıtın. Kütüphane, rakip olmayan kullanım için ücretsizdir.

Media için Ses Kontrolü

API'yi (Dönetici)[FONT=0) veya [[FONT=0) ile bütünleştirin (Dönetici ile) böylece "Play jazz" ve yayın müziğine başlayabilirsiniz.

Sensör Entegrasyonu

Bir 407 sıcaklık / presilite sensörü a. Kullanıcı "Sıcaklık nedir?" diye sorduğunda, sensör okuyun ve değere cevap verin.

Yerel Sonbahar

Wi-Fi aşağı, sınırlı bir çevrimdışı komut setine geri dönün (örneğin, Porcupine’nin anahtar kelime eşleştirmesi gibi basit bir anahtar kelimeye dayanarak) geçmek için.

Güvenlik ve Gizlilik

Sürekli olarak etkilenen bir ses asistanı inşa edin, bu adımları kendiniz korumak için alın:

  • [FONT=0]Use HTTPS[DÜT:1] Tüm API çağrıları için. ESP32'nin WiFiClientSecure TLS'yi destekliyor, ancak CA sertifikası parmak izi veya güvenilir bir kök sertifikasını içermelidir.
  • [FONT:0) Bulut bağımlılığını dikkate almak[[Dönetici: 1 ): Tüm sesleri internete göndermeden kaçınmak için uyanmak için bir kelime kullanın.
  • [FONT:0)Local işleme[[Dönetici:0)[[Döneticiler için, tüm konuşma boru hattı çevrimdışı tutmak.KensorFlow Lite Micro) herhangi bir internet bağlantısı olmadan bir avuç komut tanıyabilir.
  • [FONT=0]Physical mute ([Dönetici)[[[Dönetici: 0)))))))): Mikrofon gücü ve VCC arasında bir toggle geçiş.
  • [FONT:0) Ağ segmentasyonu[[DÜT 1: 1): İLAN veya misafir ağı, uzlaşmazsa sınırlılık için sınırlanmayı sınırlayın.

Ayrıca kullandığınız herhangi bir bulut API için hizmet şartlarını unutmayın. Bazı sürekli akış yasaklar veya açık kullanıcı onayı gerektirir. Her zaman yerel gizlilik kurallarına uymak.

Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç

Mikrokontrolörlerle bir ses kontrollü ev asistanı inşa etmek, donanım, yazılım ve doğal dil işleme birleştiren bir projedir. ESP32, bir MEMS mikrofonu ve bir bulut API, bir hafta sonu içinde işlevsel bir asistan oluşturabilirsiniz.

Rahat büyüdüğünde, sınırları zorlamak: yerel konuşma tanıma, MQTT'yi kontrol etmek veya hatta özel komutları eğitmek için bir web paneli bile. DIY asistanının güzelliği sizinle birlikte geliştiğidir.Geçmiş bir ekosistem yoktur - eklediğiniz her özellik tamamen sizin kontrolünüz altında.

Daha fazla okuma için, [[0)ESP IoT Çözümü hazır ses asistan örnekleri için depolanır ve [[Şaptanış kelimesi motor belgelerini döndürür).