8 Kasım 2026
Kendi Home Mini'ni Yap, Türkçe Konuştur
Google Home Mini Türkçe konuşmuyor; ben de 'Hey Jarvis' deyince uyanan, Türkçe konuşan, evi Home Assistant üzerinden yöneten bir asistan yaptım. Malzeme listesi, lehim, ESPHome kodu, 3D baskı kutu (STL'ler dahil) ve üç haftalık ince ayarın hepsi burada.
Evimde yıllardır bir Google Home Mini var. Anons hoparlörü olarak kusursuz: bulaşık makinesi bitince "bulaşık hazır" diyor, çocuklar okuldan gelince karşılıyor. Ama ona Türkçe bir şey sormak mümkün değil; Türkiye'de Türkçe asistan hiç gelmedi, "Hey Google" dışında bir isim veremezsiniz, beynini değiştiremezsiniz. Çocuklar "neden bizimle konuşmuyor" diye sorunca karar verdim: kendi asistanımızı yapacağız. Adı Jarvis olacak, Türkçe konuşacak, evi yönetecek.
Üç hafta sonra salonda 3D baskı bir kutunun içinde duran Jarvis, "Hey Jarvis, dışarısı kaç derece?" deyince "Dışarısı 8,6 derece, parçalı bulutlu" diyor; "arka lambayı aç" deyince açıp "Arka ışığı açtım" diyor; çocukların sorduğu bilmeceye bilmeceyle cevap veriyor. Bu yazı, aynısını yapmak isteyenler için her şey: parça listesi, lehim, firmware, ESPHome kodu, kutunun STL dosyaları ve öğrendiğim dersler.

Malzeme listesi
Hepsi Türkiye'den (Robot Sepeti) geldi; elektronik toplamı bir akıllı hoparlör fiyatının altında.
| Parça | Ne işe yarıyor | Not |
|---|---|---|
| Seeed ReSpeaker Lite (USB 2-Mic) | İki mikrofon + XMOS XU316 ses işlemcisi: yankı ve gürültü temizleme, hoparlör çıkışı | Kartın üstünde XIAO yuvası, 3,5 mm jak, JST PH 2.0 hoparlör soketi var |
| Seeed XIAO ESP32-S3 | Wi-Fi + "Hey Jarvis" uyandırma kelimesini cihazda tanıma | Harici anten takılı gelir (kutunun içinde kalıyor) |
| WS2812B LED halka, 12'li (Ø50 mm) | Dinlerken kırmızı, düşünürken mor, konuşurken yeşil | 16'lı (Ø67) da olur; kutu 12'liye göre |
| Hoparlör Ø45 mm, 4 Ω 5 W | Kutu içi ses | Alternatif: 3,5 mm jaktan harici bir set |
| USB-C adaptör 5 V 2–3 A | Besleme, ReSpeaker'ın kendi USB-C'sinden | Telefon şarjı yeter |
| Pin header 2×7 (XIAO için), 3 kablo, (isteğe bağlı) 330 Ω direnç, 1000 µF kondansatör | Lehim | |
| 3D baskı kutu, 5 parça, PETG | Aşağıda, STL'ler yazının sonunda | ~60 g filament |
Yazılım: ESPHome (Home Assistant eklentisi) + formatBCE'nin ReSpeaker Lite paketi. Seeed'in resmi yoluna göre çok daha az uğraş; Home Assistant'ın kendi Voice PE cihazının bütün özellikleri geliyor.
Fotoğraflarla montaj







Lehim: üç kablo, iki köprü
1. XIAO'yu ReSpeaker'a. Kartın üstünde XIAO'nun yeri ve USB-C ucunun yönü çizili; o çizime göre, pin header ile lehimleyin (doğrudan yüzeye değil; sökmek gerekirse kolay oluyor). Ben ilk hafta header'ı lehimsiz "takarak" kullandım; ses kesik kesik geldi, iki hafta Wi-Fi'dan şüphelendim. Sorun temassızlıktı. Lehimleyin.
2. Buton köprüleri. ReSpeaker'daki iki buton XIAO'ya lehim köprüsüyle bağlanıyor: USR → D2, MUTE → D3. Yapılmazsa butonlar ve yazılımdan mikrofon kapatma çalışmıyor.
3. LED halka. Halkanın arkasında dört ped: DI (DIN), DO, 5V, GND. DO boş kalır.
| Halka | → | XIAO |
|---|---|---|
| DIN | → | D0 (GPIO1) |
| 5V | → | 5V |
| GND | → | GND |
D0 zaten kartın kendi RGB LED'ini sürüyor; halka ona paralel bağlanıyor, ikisi birlikte yanıyor. Başka boş pin yok, bilinçli tercih. Data hattına seri 330 Ω direnç sinyali korur; halka titrerse 5V hattına bir 1N4001 diyot (voltajı 4,3 V'a düşürüp 3,3 V sinyali daha iyi okutur). Halkanın DIN pedi lehimde kalkarsa (benimki kalktı) kabloyu doğrudan ilk LED'in DIN bacağına lehimleyebilirsiniz.
4. Hoparlör. JST PH 2.0 2 pinli kabloyla kartın SPK soketine. Harici set kullanacaksanız 3,5 mm jak.
XMOS firmware'i (bir kez)
ReSpeaker fabrikadan USB mikrofon modunda geliyor; Home Assistant için I2S 48 kHz firmware'i yüklenmeli. Kabloyu ReSpeaker'ın kendi USB-C'sine (jakın yanındaki) takın, XIAO'nunkine değil:
brew install dfu-util # Linux: apt install dfu-util
dfu-util -l # kartı gör
dfu-util -R -e -a 1 -D respeaker_lite_i2s_dfu_firmware_48k_v1.1.0.binDosya formatBCE'nin GitHub deposundaki sürümle aynı etiketten indirilir (ör. 2026.10.3). Yükleme sırasında kabloyu çekmeyin; bitince çıkarıp takın.
ESPHome: tüm kod
Home Assistant → ESPHome Builder → yeni cihaz → ESP32-S3 → kurulumu atlayıp editöre şunu yapıştırın. Paket tüm ses işini yapıyor; dosya yalnızca LED halkayı ve Jarvis renklerini değiştiriyor:
substitutions:
respeaker_lite_ref: 2026.10.3
packages:
respeaker-satellite: github://formatBCE/Respeaker-Lite-ESPHome-integration/config/common/respeaker-satellite-base.yaml@${respeaker_lite_ref}
esphome:
name: jarvis-salon
friendly_name: Jarvis Salon
wifi:
power_save_mode: none # (1) ses kesilmesinin ilk çözümü
output_power: 11dB # (2) modemin dibindeyse verici gücünü düşür
improv_serial: # Wi-Fi bilgisi ilk yüklemede web.esphome.io'dan girilir
ota:
- platform: esphome
id: ota_esphome
speaker:
- id: !extend i2s_audio_speaker
buffer_duration: 600ms # (3) paket varsayılanı 100 ms; takılmanın asıl çözümü
button:
- platform: restart
name: Yeniden Başlat
sensor:
- platform: wifi_signal
name: Wi-Fi sinyal
update_interval: 60s
light:
- id: !remove led_internal
- id: !remove led_respeaker_onboard
- platform: esp32_rmt_led_strip
id: led_internal
internal: true
channel_colors: GRB
pin: GPIO1 # XIAO D0
num_leds: 12 # 16'lı halkada 16
rmt_symbols: 192
bit0_high: 300ns
bit0_low: 975ns
bit1_high: 650ns
bit1_low: 650ns
reset_low: 300us
reset_high: 0us
max_refresh_rate: 15ms
default_transition_length: 0s
color_correct: [55%, 55%, 55%] # güç sınırı: 12 LED beyazda ~0,4 A
effects:
- addressable_lambda:
name: "Slow Pulse"
update_interval: 30ms
lambda: |-
static float f = 0.0; static bool up = true;
auto v = id(led_internal)->current_values;
Color c(v.get_red() * 255, v.get_green() * 255, v.get_blue() * 255);
it.all() = Color(c.red * f, c.green * f, c.blue * f);
f += up ? 0.05 : -0.05;
if (f > 1.0) { f = 1.0; up = false; } else if (f < 0.0) { f = 0.0; up = true; }
- addressable_lambda:
name: "Fast Pulse"
update_interval: 10ms
lambda: |-
static float f = 0.0; static bool up = true;
auto v = id(led_internal)->current_values;
Color c(v.get_red() * 255, v.get_green() * 255, v.get_blue() * 255);
it.all() = Color(c.red * f, c.green * f, c.blue * f);
f += up ? 0.05 : -0.05;
if (f > 1.0) { f = 1.0; up = false; } else if (f < 0.0) { f = 0.0; up = true; }
- addressable_lambda:
name: "Spin" # düşünürken halkada dönen kuyruklu ışık
update_interval: 45ms
lambda: |-
static int head = 0;
auto v = id(led_internal)->current_values;
Color c(v.get_red() * 255, v.get_green() * 255, v.get_blue() * 255);
const int n = it.size();
for (int i = 0; i < n; i++) {
int d = (head - i + n) % n;
float f = d == 0 ? 1.0f : d == 1 ? 0.5f : d == 2 ? 0.22f : d == 3 ? 0.08f : 0.0f;
it[i] = Color(c.red * f, c.green * f, c.blue * f);
}
head = (head + 1) % n;
- platform: partition # HA'dan açılıp kapatılabilen "gece lambası" ışığı
id: led_respeaker_onboard
name: LED halka
entity_category: config
restore_mode: RESTORE_DEFAULT_OFF # boşta sönük; sadece "Hey Jarvis" sonrası yanar
segments:
- id: led_internal
from: 0
to: 11
script:
- id: !remove control_leds_voice_assistant_waiting_for_command_phase
- id: !remove control_leds_voice_assistant_listening_for_command_phase
- id: !remove control_leds_voice_assistant_thinking_phase
- id: !remove control_leds_voice_assistant_replying_phase
- id: control_leds_voice_assistant_waiting_for_command_phase # "Hey Jarvis" dedin, bekliyor
then:
- light.turn_on: {id: led_internal, brightness: 35%, red: 100%, green: 0%, blue: 0%, effect: "Slow Pulse"}
- id: control_leds_voice_assistant_listening_for_command_phase # dinliyor
then:
- light.turn_on: {id: led_internal, brightness: 35%, red: 100%, green: 0%, blue: 0%, effect: "None"}
- id: control_leds_voice_assistant_thinking_phase # düşünüyor
then:
- light.turn_on: {id: led_internal, brightness: 35%, red: 70%, green: 0%, blue: 100%, effect: "Spin"}
- id: control_leds_voice_assistant_replying_phase # konuşuyor
then:
- light.turn_on: {id: led_internal, brightness: 35%, red: 0%, green: 100%, blue: 25%, effect: "Fast Pulse"}Derlemesi Raspberry Pi'de yarım saat sürüyor; sabır. İlk yükleme: Install → Manual download → Factory, sonra kabloyu XIAO'nun USB-C'sine takıp Chrome'da web.esphome.io → Install. Sonrakiler kablosuz (OTA). İlk açılışta XMOS sürümü doğrulanır; LED beyaz yanıp sönerken gücü kesmeyin.
Numaralı üç satır benim üç haftamı yedi:
power_save_mode: none— ESP32 varsayılanı Wi-Fi'ı uyutup uyandırıyor; ses akışı kesik geliyor.output_power: 11dB— Jarvis modemin hemen yanında (−20 dBm). Çok güçlü sinyal de sorun çıkarıyor.buffer_duration: 600ms— asıl çözüm. Paketin 100 ms tamponu her cümlenin başında takılıyordu.!extendyazmazsanız "platform key" hatası alırsınız.
Home Assistant ayarları
- Cihaz → Uyandırma kelimesi: Hey Jarvis (cihazda tanınıyor, bulut yok). Hassasiyet: "Slightly sensitive".
- Bitmiş konuşma tespiti: relaxed. "Aggressive" ile cümlenin sonunu yiyordu.
- Ayarlar → Sesli asistanlar → yeni hat: STT, beyin, TTS. Seçimlerim aşağıda. "Komutları önce yerelde işle" açık: "arka ışığı aç" LLM'e gitmeden 0,3 saniyede çalışıyor.
- Cihaz sayfasında asistan olarak bu hattı seçin.
- Cihazı HA'da bir alana koyun; o alandaki cihazları yerel komutla açınca konuşmak yerine sadece onay sesi çalıyor, çok daha az yorucu.
- Jarvis'in LED halkasını başka otomasyonlardan da sürebilirsiniz (
light.jarvis_salon_led_halka): gol olunca kırmızı-sarı, doğum gününde gökkuşağı.
Türkçe: asıl zor kısım
Donanım bir akşamda bitti; Türkçe'yi düzgün konuşturmak üç hafta sürdü.
Ses tanıma (STT). Ücretsiz Whisper kısa Türkçe komutlarda uyduruyor ("dekoratif ışığı aç"ı "ağaç" diye duydu). Groq üzerinden Whisper large-v3 daha iyi, cihaz adlarını ipucu metni olarak vermek de yardımcı oluyor; ama en isabetlisi Google'ın bulut STT'si. Tamamen yerel istiyorsanız Türkçe için ince ayarlı Whisper modelleri var; kalite farkı hissediliyor.
Beyin (LLM). Evdeki bir bilgisayarda çalışan Gemma 4; bilgisayar kapalıyken Gemini. Ayrıntısı ve talimatın tamamı Hibrit Yapay Zekâlı Ev Kontrol Sistemi yazısında. Hangi model olursa olsun asıl iş talimatta: "cihaz belirsizse sor, tahmin etme", "televizyon sesine cevap verme", "sayıları rakamla yaz" gibi kurallar olmadan asistan kafasına göre ışık kapatıyor.
Seslendirme (TTS). Edge TTS'in Türkçe "Emel" sesi doğal ve ücretsiz. Tamamen yerel Piper'ın Türkçe sesleri var ama daha robotik. Tuzak: cevabın sonuna "." koyunca TTS 8 saniye takılıyordu, "Ok." çözdü. Emoji ve madde işareti sesli okunduğu için talimatta yasak.
İngilizce hata mesajı. Beyin hata verince HA "Sorry, I had a problem…" diyor. Firmware'e bir satır ekleyip (on_tts_start: metin "Sorry" ile başlıyorsa bayrak kaldır) HA'da "Bir sorun oldu, tekrar dener misin?" dedirtiyorum.
Aile. Talimatta aile üyeleri tanıtılı; çocuklara sabırlı ve basit anlatıyor, sohbet sürerken kısa bir soruyla devam ediyor. Küçük olan bilmece sorduruyor, büyük olan maç skoru soruyor (internet arama aracı sayesinde cevap veriyor).
Kutu: 3D baskı, beş parça
Kutuyu kendim tasarladım (Python + Manifold ile parametrik), beş sürüm oldu: ilkine halka sığmadı, ikincide jak deliği dar geldi, üçüncüsü raylı oturma ve klipsli kapak, dördüncüsü altında hoparlör bölmesi, beşincide jak ve USB-C ağızları yüzde 20 büyüdü, hoparlör kablosunun deliği kartın soket ucuna taşındı.

- Dış ölçü 91 × 59 × 57 mm; kart tabanının iç genişliği 54 mm.
- ReSpeaker iki uzun kenardaki raylara kayarak oturuyor, iki adet M2×5 vida ile sabitleniyor.
- Kapak klipsli; XIAO ucundaki çentikten tırnakla açılıyor.
- Hoparlör tabana ağzı aşağı bakacak şekilde oturuyor, ses ızgaradan ve ayakların açtığı boşluktan çıkıyor. Kablosu Ø5 delikten kart tabanına geçiyor.
- Baskı: PETG, 0,2 mm katman, %20 dolgu, destek yok (her parça düz yüzü tablaya gelecek şekilde tasarlandı). Toplam ~3,5 saat.
STL dosyaları: jarvis_hoparlor_govdesi.stl, jarvis_taban.stl, jarvis_difuzor.stl, jarvis_kapak.stl, jarvis_ayaklar_4adet.stl — jarvis-kutu-v5-stl.zip. 16'lı halka ya da hoparlörsüz sürüm isteyen İletişim'den yazsın, parametrik dosyadan üretip gönderirim.
Ne kadar sürdü, ne kadar tuttu
Zaman: lehim ve kutu bir hafta sonu, yazılım ve Türkçe ince ayar üç haftaya yayılan akşamlar. Bugün Jarvis'in cevap süresi, uyandırmadan sesin çalmasına kadar 2–3 saniye; yerel komutlar 0,3 saniye.
Sonuç
Google Home Mini Türkçe konuşmuyor ve konuşmayacak. Ama bir hafta sonu ve dört parçayla, istediğiniz isme cevap veren, Türkçe konuşan, beynini istediğiniz zaman değiştirebildiğiniz ve evinizi gerçekten yöneten bir asistan yapmak mümkün. Üstelik ne söylediğinizin kimin sunucusuna gittiğine siz karar veriyorsunuz.
Sorular, takıldığınız yerler ve kendi Jarvis'lerinizin fotoğrafları için İletişim sayfasından yazabilirsiniz.
Kaynaklar: formatBCE/Respeaker-Lite-ESPHome-integration (GitHub); Seeed ReSpeaker Lite wiki; Home Assistant "Assist" ve "Voice" dokümanları; ESPHome esp32_rmt_led_strip ve i2s_audio dokümanları.
Yorumlar
Yorumlar yükleniyor…