Çevrimdışı ESP32 Metin Okuma (Text-to-Speech) Sistemi Oluşturma: İnternet Gerekmez!
İnternet bağlantısına bağımlı olmayan akıllı cihazlar ve IoT uygulamaları geliştirmek, gizlilik, güvenilirlik ve düşük gecikme avantajları sunar. Özellikle sesli geri bildirim gerektiren projelerde, çevrimdışı çalışan bir metin okuma (Text-to-Speech – TTS) sistemi büyük önem taşır. Bu makalede, güçlü ve uygun maliyetli ESP32 mikrodenetleyiciyi kullanarak, tamamen çevrimdışı bir TTS sistemi nasıl kurulacağını detaylıca inceleyeceğiz. İnternet olmadan cihazınızın size sesli yanıtlar vermesini sağlayacak bu sistem, birçok yenilikçi uygulama için zemin hazırlayacaktır.
Sistem Mimarisi ve Bileşenler
Çevrimdışı bir ESP32 metin okuma sistemi oluşturmak, donanım ve yazılım bileşenlerinin uyumlu bir şekilde entegre edilmesini gerektirir. Bu bölümde, sistemin genel yapısını ve ihtiyaç duyacağımız temel bileşenleri ele alacağız.
Genel Bakış
Sistemimizin temel amacı, ESP32’ye girilen metni, herhangi bir internet bağlantısına ihtiyaç duymadan sesli çıktılara dönüştürmektir. Bu, genellikle önceden hazırlanmış ses dosyalarını (kelimeler, cümleler veya fonemler) SD kart gibi bir depolama biriminde tutarak ve ESP32’nin bunları uygun sırayla çalarak gerçekleştirilir. Bu yaklaşım, ESP32’nin sınırlı işlem gücünü ve belleğini en verimli şekilde kullanmamızı sağlar.
Donanım Bileşenleri
Projemiz için gerekli temel donanım bileşenleri şunlardır:
- ESP32 Geliştirme Kartı: Sistemin beyni olacak mikrodenetleyici.
- SD Kart Modülü: Metin okuma için kullanılacak ses dosyalarını depolamak için.
- Harici Hoparlör: Sesli çıktıyı duymak için.
- Ses Amplifikatörü: ESP32’den gelen zayıf ses sinyalini hoparlörü sürecek seviyeye yükseltmek için (örneğin, PAM8403 veya MAX98357 I2S amplifikatör).
- Jumper Kabloları ve Breadboard: Bileşenleri birbirine bağlamak için.
- Güç Kaynağı: ESP32 ve diğer bileşenler için stabil güç sağlamak amacıyla.
Yazılım Bileşenleri
Yazılım tarafında ise şunlara ihtiyacımız olacak:
- Arduino IDE: ESP32 kodunu yazmak ve yüklemek için geliştirme ortamı.
- ESP32 Kart Desteği: Arduino IDE’nin ESP32’yi tanıması için gerekli olan paket.
- SD Kütüphanesi: ESP32’nin SD kart ile iletişim kurmasını sağlayan kütüphane.
- Ses Çalma Kütüphanesi: WAV veya MP3 gibi ses dosyalarını oynatmak için (örneğin, ESP8266Audio kütüphanesi).
- Metin-Sese Dönüşüm Aracı (PC Üzerinde): Ses dosyalarını önceden hazırlamak için kullanılacak bir yazılım (örneğin, eSpeak, Google Cloud TTS API’si – sadece dosya oluşturma aşamasında internet gerekli, cihazda değil).
Donanım Seçimi ve Bağlantıları
Projenin başarılı olması için doğru donanım seçimi ve doğru bağlantılar hayati öneme sahiptir. Bu bölümde, her bir donanım bileşenini ve bunların ESP32 ile nasıl bağlanacağını detaylandıracağız.
ESP32 Geliştirme Kartı
ESP32, Wi-Fi ve Bluetooth özelliklerinin yanı sıra güçlü çift çekirdekli işlemcisi ve geniş belleği sayesinde bu tür projeler için ideal bir seçimdir. Farklı ESP32 kart modelleri (ESP32-DevKitC, ESP32 WROOM gibi) mevcuttur; herhangi biri işimizi görecektir. Kartın üzerinde yeterli GPIO pini bulunduğundan emin olun.
Ses Çıkışı ve Amplifikatör
ESP32’nin doğrudan bir hoparlörü sürme kapasitesi yoktur. Bu nedenle, bir ses amplifikatörü kullanmamız gerekir. İki yaygın yaklaşım vardır:
- PWM Tabanlı Ses Çıkışı: ESP32’nin DAC pinlerini veya PWM özelliğini kullanarak analog ses sinyali üretip harici bir analog amplifikatöre (örneğin, PAM8403) bağlamak. Bu yöntem daha basit olabilir ancak ses kalitesi I2S’e göre daha düşük olabilir.
- I2S Tabanlı Ses Çıkışı: ESP32’nin donanımsal I2S arayüzünü kullanarak dijital ses sinyali üretip bir I2S DAC/amplifikatöre (örneğin, MAX98357) bağlamak. Bu, daha yüksek ses kalitesi ve daha az CPU yükü sunar. Bu makalede I2S yaklaşımını önereceğiz.
MAX98357 I2S amplifikatör, küçük boyutları ve kolay entegrasyonu nedeniyle popüler bir seçimdir. Genellikle 3.3V veya 5V ile çalışır ve ESP32’nin I2S pinlerine doğrudan bağlanır.
SD Kart Modülü ve Depolama
Ses dosyalarımızı depolamak için bir mikro SD kart modülüne ihtiyacımız var. Bu modüller genellikle SPI arayüzünü kullanır. Bağlantılar aşağıdaki gibidir:
- VCC: ESP32 3.3V
- GND: ESP32 GND
- CS (Chip Select): ESP32 GPIO 5 (veya farklı bir GPIO)
- MOSI (Master Out Slave In): ESP32 GPIO 23
- MISO (Master In Slave Out): ESP32 GPIO 19
- SCK (Serial Clock): ESP32 GPIO 18
SD kartın FAT32 formatında biçimlendirildiğinden emin olun.
Bağlantı Şeması
Aşağıda, temel bağlantıların bir özeti bulunmaktadır. Pin numaraları kullandığınız ESP32 kartına ve tercih ettiğiniz I2S pinlerine göre değişiklik gösterebilir.
ESP32 – SD Kart Modülü:
- ESP32 3.3V -> SD Modül VCC
- ESP32 GND -> SD Modül GND
- ESP32 GPIO 5 -> SD Modül CS
- ESP32 GPIO 18 -> SD Modül SCK
- ESP32 GPIO 19 -> SD Modül MISO
- ESP32 GPIO 23 -> SD Modül MOSI
ESP32 – MAX98357 I2S Amplifikatör:
- ESP32 3.3V -> MAX98357 VIN
- ESP32 GND -> MAX98357 GND
- ESP32 GPIO 25 -> MAX98357 DIN (Data In)
- ESP32 GPIO 26 -> MAX98357 BCLK (Bit Clock)
- ESP32 GPIO 22 -> MAX98357 LRCL (Left/Right Clock veya Word Select)
- MAX98357 SPK+ / SPK- -> Hoparlör
Yazılım Geliştirme Ortamı ve Kütüphaneler
Donanım bağlantılarını tamamladıktan sonra, ESP32’yi programlamak için yazılım ortamımızı hazırlamamız gerekiyor.
Arduino IDE Kurulumu
Arduino IDE’yi resmi web sitesinden indirip kurun. Kurulum tamamlandıktan sonra, ESP32 kart desteğini eklemeniz gerekecektir.
ESP32 Kart Desteği Ekleme
- Arduino IDE’yi açın.
- Dosya > Tercihler (File > Preferences) menüsüne gidin.
- “Ek Kart Yöneticisi URL’leri” (Additional Boards Manager URLs) alanına aşağıdaki URL’yi ekleyin:
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json - Tamam’a tıklayın.
- Araçlar > Kart > Kart Yöneticisi (Tools > Board > Boards Manager) menüsüne gidin.
- Arama kutusuna “esp32” yazın ve “esp32 by Espressif Systems” paketini kurun.
Gerekli Kütüphaneler
Projemiz için bazı kütüphanelere ihtiyacımız olacak. Bu kütüphaneleri Arduino IDE’nin Kütüphane Yöneticisi (Sketch > Kütüphaneyi Dahil Et > Kütüphaneleri Yönet) aracılığıyla kurabilirsiniz:
- ESP8266Audio: Hem ESP8266 hem de ESP32 için ses dosyalarını çalmaya yarayan güçlü bir kütüphanedir. WAV, MP3 gibi formatları destekler.
- SD: Bu kütüphane genellikle ESP32 kart desteği ile birlikte gelir, ancak yüklü olduğundan emin olun.
- SPI: SD kart iletişimi için gereklidir, bu da genellikle dahildir.
Metin-Sese Dönüşüm Stratejisi
ESP32’nin işlem gücü, karmaşık, gerçek zamanlı metin okuma motorlarını çalıştırmak için yeterli değildir. Bu nedenle, çevrimdışı bir sistem için en pratik ve yüksek kaliteli çözüm, metin-sese dönüşüm işlemini daha güçlü bir cihazda (bilgisayar veya bulut tabanlı bir hizmet) önceden yaparak, elde edilen ses dosyalarını ESP32’nin SD kartına kaydetmektir. ESP32 daha sonra bu dosyaları uygun sırayla oynatır.
Bu strateji, “metin okuma” yeteneğini, metni ses dosyalarına dönüştürme ve bu dosyaları cihazda oynatma olarak iki aşamaya ayırır. Cihazın kendisi internete ihtiyaç duymadan sesleri oynatır.
Çevrimdışı Metin-Sese Dönüşüm Stratejisi ve Uygulama
Bu bölüm, sistemin kalbi olan çevrimdışı metin-sese dönüşüm stratejisini ve bunun nasıl uygulanacağını detaylandırmaktadır.
Önceden Oluşturulmuş Ses Dosyaları Yaklaşımı
Yukarıda bahsedildiği gibi, ESP32 üzerinde gerçek zamanlı ve yüksek kaliteli bir TTS motoru çalıştırmak oldukça zordur. Bu nedenle, en etkili yöntem, konuşulacak kelimeleri, cümleleri veya fonemleri önceden ses dosyalarına dönüştürmek ve bunları ESP32’nin SD kartında saklamaktır. ESP32, ihtiyacı olduğunda bu dosyaları SD karttan okuyarak ses çıkışına gönderir. Bu, sistemin tamamen çevrimdışı çalışmasını sağlar ve internet bağımlılığını ortadan kaldırır.
Ses Dosyalarının Hazırlanması
Ses dosyalarını hazırlamak için çeşitli yöntemler kullanabilirsiniz:
- Çevrimdışı PC Uygulamaları: eSpeak gibi açık kaynaklı TTS motorlarını bilgisayarınıza kurarak istediğiniz metinleri WAV formatında ses dosyalarına dönüştürebilirsiniz. Bu, tamamen çevrimdışı bir çözüm sunar.
- Bulut Tabanlı TTS Hizmetleri (Hazırlık Aşamasında): Google Cloud Text-to-Speech, Amazon Polly veya Microsoft Azure Speech gibi hizmetler, son derece doğal ve yüksek kaliteli sesler üretir. Bu hizmetleri kullanarak istediğiniz metinleri MP3 veya WAV formatında ses dosyalarına dönüştürüp bilgisayarınıza indirebilirsiniz. Bu aşamada internet bağlantısı gereklidir, ancak dosyalar bir kez oluşturulduktan sonra ESP32’de çevrimdışı kullanılır.
- Kendi Ses Kayıtlarınız: Belirli kelimeler veya ifadeler için kendi sesinizi kaydederek de ses dosyaları oluşturabilirsiniz.
Ses dosyalarını hazırlarken dikkat etmeniz gerekenler:
- Format: ESP32’nin desteklediği formatları (tercihen 16kHz örnekleme hızı, 16-bit, mono WAV) kullanın. MP3 de desteklenir ancak sıkıştırmayı çözmek daha fazla işlem gücü gerektirebilir.
- Adlandırma: Dosyaları kolayca tanınabilir ve programatik olarak erişilebilir isimlerle kaydedin (örneğin, “merhaba.wav”, “sicaklik_sensoru.wav”).
SD Karta Yükleme ve Yönetim
Hazırladığınız ses dosyalarını SD kartınıza yüklemeniz gerekmektedir. Dosyaları SD kartın kök dizinine veya belirli alt klasörlere (örneğin, “/kelimeler”, “/cümleler”) düzenli bir şekilde yerleştirebilirsiniz. Bu, ESP32 kodunuzun dosyaları bulmasını ve yönetmesini kolaylaştırır.
Örneğin, “Merhaba dünya!” cümlesini seslendirmek istiyorsanız, “merhaba.wav” ve “dunya.wav” adında iki ayrı dosya oluşturup SD karta yükleyebilirsiniz. ESP32, bu iki dosyayı sırayla çalarak cümleyi oluşturacaktır.
ESP32 Üzerinde Ses Çalma
ESP32, SD karttan okuduğu ses dosyalarını I2S arayüzü aracılığıyla amplifikatöre ve hoparlöre gönderir. Bu işlemi gerçekleştirmek için ESP8266Audio kütüphanesini kullanacağız. Bu kütüphane, WAV ve MP3 dosyalarını SD karttan okuyup I2S çıkışına yönlendirme yeteneğine sahiptir.
Temel mantık şöyledir: Uygulamanızda bir metin parçası seslendirilmesi gerektiğinde (örneğin, “Sıcaklık 25 derece”), bu metin kelimelere veya önceden tanımlanmış ifadelere ayrılır. Her bir kelime veya ifade için SD karttaki karşılık gelen ses dosyası bulunur ve sırayla oynatılır. Bu, “metin okuma” deneyimini çevrimdışı olarak simüle eder.
Sistem Entegrasyonu ve Kod Örnekleri
Şimdiye kadar ele aldığımız donanım ve yazılım bileşenlerini bir araya getirerek çalışan bir sistem oluşturalım. Aşağıda, temel bir Arduino taslağı ve metin işleme mantığı için örnekler bulunmaktadır.
Temel Arduino Taslağı
Aşağıdaki örnek kod, ESP32’nin SD