Menü
Sepetiniz
YENİ Alışveriş deneyimimiz yenilendiDaha hızlı, daha kolay
2000 TL üzeri ücretsiz kargo (HepsiJet ve Sürat Kargo)
Arduino & ESP32

ESP32'ye Mikrofon ve Hoparlör Bağlamak: INMP441 ve MAX98357 ile Ses Projeleri

Roboyol Teknik Ekibi8 dk okuma

ESP32 kartınız çoktan çalışıyor. LED yakıyor, sıcaklık ölçüyor, telefonunuza bildirim gönderiyor. Ama bir eksiği var: sizi duymuyor, size bir şey de söyleyemiyor. Kapı çalındığında ötmesini, mutfakta radyo çalmasını ya da seslendiğinizde cevap vermesini isteseniz elinden bir şey gelmez.

Bunu değiştirmek için üç küçük parça yeter: bir mikrofon, bir yükselteç ve bir hoparlör. Bu yazıda üçünü ESP32'ye nasıl bağlayacağınızı gösteriyor, deneyebileceğiniz bir örnek kod veriyor ve aynı parçalarla kurabileceğiniz projeleri sıralıyoruz.

Üç parça: kulak, ses ve ağız

ParçaGöreviBeslemeAklınızda olsun
INMP441 mikrofon modülü, ön ve arka yüzINMP441 mikrofon modülüKulak: sesi dinler, sayıya çevirir3,3 V5 V vermeyin
MAX98357 yükselteç modülüMAX98357 yükselteç modülüSes: sayıyı hoparlörü sürecek güce çevirir5 VHoparlör uçları toprağa bağlanmaz
4 Ohm 3W hoparlör4 Ohm 3W hoparlörAğız: sesi odaya verirYükselteçten40 mm çapında, küçük kutulara sığar

Mikrofon küçük, yuvarlak bir karttır. Küçüklüğüne bakmayın: sesi sayıya çeviren devre de üzerindedir, bu yüzden ESP32'ye doğrudan bağlanır. Çok yönlüdür, yani sesi her yönden alır; odanın neresinde olduğunuz fark etmez.

Yükselteç iki işi birden yapar: ESP32'den gelen sayıları yeniden sese çevirir ve hoparlörü sürecek kadar güçlendirir. Hoparlör kabloları, kartla birlikte gelen vidalı klemense takılır.

Hoparlör 4 ohm ve 3 watt'tır. Yükselteç 5 V ile beslendiğinde bu hoparlöre yaklaşık 2,5 watt temiz güç verir. Bir kapı zili, masa üstü bir radyo ya da konuşan bir saat için bu fazlasıyla yeter.

Mikrofon ile yükseltecin ortak bir özelliği var: ikisi de sesi kabloda sayı olarak taşır. Bu hattın adı I2S'tir. Sayı olarak taşınan ses yoldaki elektriksel gürültüden etkilenmez. İşin güzel yanı, ESP32 bu hattı kendiliğinden konuşur; araya başka bir çevirici kart gerekmez.

Bağlantı tablosu

Mikrofon ve yükselteç iki saat hattını (BCLK ve WS) paylaşır; her birinin ayrıca birer veri hattı vardır. Pin numaraları karta göre değişir:

Modül piniKlasik ESP32ESP32-S3 ve ESP32-C3
Mikrofon SCK ve yükselteç BCLKGPIO26GPIO4
Mikrofon WS ve yükselteç LRCGPIO25GPIO5
Yükselteç DINGPIO22GPIO6
Mikrofon SDGPIO34GPIO7
Mikrofon VDD3V33V3
Mikrofon L/R ve GNDGNDGND
Yükselteç VIN5V5V
Yükselteç GNDGNDGND

Hoparlörün iki kablosunu yükseltecin vidalı klemensine takın. Yükselteçteki GAIN ve SD pinlerini boş bırakın. Kartınızda 5 V pini "VIN" ya da "5V" adıyla yazar.

Bağlarken üç kurala dikkat edin:

  1. Mikrofona 5 V vermeyin. INMP441 en çok 3,6 V'a dayanır; 3V3 pininden besleyin.
  2. Yükselteci 5 V'tan besleyin. 3,3 V ile ses kısılır, bazı modüller hiç açılmayabilir.
  3. Hoparlör kablolarını yalnız yükseltecin iki çıkışına bağlayın. Uçlardan hiçbiri toprağa (GND) bağlanmaz.

Denemeyi bir breadboard üzerinde, jumper kablolarla kurabilirsiniz. Modüllerin pinleri lehimsiz geldiyse önce pinleri lehimleyin. Mikrofonun üzerindeki küçük ses deliğini bant ya da yapıştırıcıyla kapatmayın.

İlk deneme: papağan

Bağlantıyı sınamanın en eğlenceli yolu ESP32'yi papağana çevirmektir. Aşağıdaki kod bir bip sesi verir, iki saniye sizi dinler, sonra duyduğunu hoparlörden tekrarlar. Kendi sesinizi duyuyorsanız mikrofon da hoparlör de çalışıyor demektir.

// ESP32 + INMP441 mikrofon + MAX98357 yükselteç: "papağan"
// Bip sesinden sonra 2 saniye dinler, duyduğunu hoparlörden tekrarlar.
#include <Arduino.h>
#include <driver/i2s.h>

#if CONFIG_IDF_TARGET_ESP32            // klasik ESP32
const int PIN_BCLK = 26, PIN_WS = 25, PIN_HOPARLOR = 22, PIN_MIKROFON = 34;
#else                                  // ESP32-S3 ve ESP32-C3
const int PIN_BCLK = 4, PIN_WS = 5, PIN_HOPARLOR = 6, PIN_MIKROFON = 7;
#endif

const int HIZ = 16000;                 // saniyede 16.000 ses örneği
const int ADET = HIZ * 2;              // 2 saniyelik kayıt
int16_t *kayit;                        // kaydın tutulduğu bellek
int32_t tampon[256 * 2];               // sol, sağ, sol, sağ...

// 16 bitlik sesi hoparlöre gönderir (aynı örnek iki kanala da yazılır)
void cal(const int16_t *ses, int adet) {
  for (int i = 0; i < adet; i += 256) {
    int n = min(256, adet - i);
    for (int k = 0; k < n; k++) {
      tampon[2 * k] = tampon[2 * k + 1] = (int32_t)ses[i + k] << 16;
    }
    size_t yazilan;
    i2s_write(I2S_NUM_0, tampon, n * 8, &yazilan, portMAX_DELAY);
  }
}

// Mikrofondan "adet" kadar örnek okur; hedef NULL ise okuduğunu atar
void dinle(int16_t *hedef, int adet) {
  for (int i = 0; i < adet; i += 256) {
    int n = min(256, adet - i);
    size_t okunan;
    i2s_read(I2S_NUM_0, tampon, n * 8, &okunan, portMAX_DELAY);
    if (!hedef) continue;
    for (int k = 0; k < n; k++) {
      int32_t a = tampon[2 * k], b = tampon[2 * k + 1];
      int32_t s = (abs(a) > abs(b) ? a : b) >> 14;   // mikrofon tek kanaldan konuşur; dolu olanı al
      hedef[i + k] = constrain(s, -32768, 32767);
    }
  }
}

// Kısa uyarı sesi (en çok 100 ms)
void bip(int frekans, int ms) {
  static int16_t dalga[1600];
  int adet = min(1600, HIZ * ms / 1000);
  for (int i = 0; i < adet; i++) dalga[i] = 3000 * sin(2 * PI * frekans * i / HIZ);
  cal(dalga, adet);
}

void setup() {
  Serial.begin(115200);
  kayit = (int16_t *)malloc(ADET * sizeof(int16_t));

  i2s_config_t ayar = {};
  ayar.mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_TX | I2S_MODE_RX);
  ayar.sample_rate = HIZ;
  ayar.bits_per_sample = I2S_BITS_PER_SAMPLE_32BIT;   // INMP441 32 bitlik çerçeve ister
  ayar.channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT;
  ayar.communication_format = I2S_COMM_FORMAT_STAND_I2S;
  ayar.dma_buf_count = 6;
  ayar.dma_buf_len = 256;
  ayar.tx_desc_auto_clear = true;                     // veri yokken hoparlör sussun

  i2s_pin_config_t pin = {};
  pin.mck_io_num = I2S_PIN_NO_CHANGE;
  pin.bck_io_num = PIN_BCLK;
  pin.ws_io_num = PIN_WS;
  pin.data_out_num = PIN_HOPARLOR;
  pin.data_in_num = PIN_MIKROFON;

  if (!kayit || i2s_driver_install(I2S_NUM_0, &ayar, 0, NULL) != ESP_OK || i2s_set_pin(I2S_NUM_0, &pin) != ESP_OK) {
    Serial.println("Ses hattı başlatılamadı");
    while (true) delay(1000);
  }
}

void loop() {
  bip(880, 100);                 // "dinliyorum"
  dinle(NULL, HIZ / 5);          // bip sesinin yankısını atla
  Serial.println("Dinliyorum...");
  dinle(kayit, ADET);
  bip(660, 100);                 // "sıra bende"
  Serial.println("Tekrarlıyorum...");
  cal(kayit, ADET);
  delay(1500);
}

Kodu Arduino IDE'ye yapıştırın, kartınızı seçin ve yükleyin. Pin numaraları kartınıza göre kendiliğinden seçilir. İlk bipten sonra konuşun; ikinci bipten sonra ESP32 sizi tekrarlar.

Kod üç küçük işten oluşur: dinle mikrofondan ses örneklerini okur, cal örnekleri hoparlöre yollar, bip kısa bir uyarı sesi üretir. Saniyede 16.000 örnek alınır; konuşma için bu hız yeterlidir. Daha uzun kayıt isterseniz ADET satırındaki 2'yi büyütün. Her saniye yaklaşık 32 KB bellek ister, bu yüzden birkaç saniyeyi geçmeyin.

Kod, ESP32 Arduino paketinin 2.x ve 3.x sürümlerinde bulunan ses sürücüsünü kullanır. 3.x sürümünde derlerken bu sürücünün eskidiğini söyleyen bir uyarı görebilirsiniz; uyarı derlemeyi durdurmaz.

Bu üç parçayla neler yapılır?

Papağan çalıştıysa zor kısım bitti: kartınız artık hem duyuyor hem konuşuyor. Aynı üç parça, kartı ve kodu değiştirerek çok farklı işlere girer. Aşağıdaki fikirlerin her biri için hazır kitaplıklar var; çoğunda kablolamayı hiç değiştirmeniz gerekmez.

Klasik ESP32 ile

  • Bluetooth hoparlör: Telefonunuz ESP32'yi Bluetooth hoparlör olarak görür ve müziği ona gönderir. Bu iş için mikrofon gerekmez; yükselteç ve hoparlör yeter. Telefondan müzik aktarmak klasik Bluetooth ister ve ESP32 ailesinde bunu yalnız klasik ESP32 yapar.
  • Ev içi telsiz: İki ESP32, iki mikrofon, iki hoparlör. Bir düğmeye basıp konuşursunuz, sesiniz evin öbür ucundaki karttan çıkar.

Kart: ESP32 Modül Type C.

ESP32-S3 ile

  • İnternet radyosu: S3 internetteki radyo yayınını alır, çözer ve hoparlöre verir. Yayını çözmek bellek ister; karttaki 8 MB ek RAM burada işe yarar.
  • Sesli asistan: Home Assistant kullanıyorsanız S3'ü odanıza bir sesli asistan olarak koyabilirsiniz. Uyandırma kelimesini söyleyip komut verirsiniz, cevap hoparlörden gelir. Home Assistant'ta Türkçe konuşan sesler de var.
  • Ses kaydedici: Düğmeye basınca birkaç saniyelik ses kaydeder ve Micro SD karta dosya olarak yazar.

Kart: ESP32-S3 N16R8.

ESP32-C3 Süper Mini ile

  • Alkışla açılan lamba: Mikrofon ortamdaki ses seviyesini ölçer. İki alkış duyunca bir röle lambayı açar, hoparlör kısa bir bip ile onaylar.
  • Kendi sesinizle kapı zili: Düğmeye basılınca karta yüklediğiniz ses çalar: bir melodi, bir köpek havlaması ya da kendi sesinizle "geliyorum". Ses dosyalarını 16 ya da 44,1 kHz olarak kaydedin; yükselteç 22,05 kHz'lik dosyaları çalmaz.
  • Beyaz gürültü makinesi: Ses dosyası bile gerekmez, gürültüyü kod üretir. Kart çok küçük olduğu için her şey avuç içi kadar bir kutuya sığar.

Kart: ESP32-C3 Süper Mini.

Hangi kartla olursa olsun

  • Konuşan saat: Saat başı saati söyler ya da ilaç vaktini hatırlatır. Söyleyeceği sesleri önceden kaydedip karta yüklersiniz.
  • Sese duyarlı bildirim: Bebek odasında ya da atölyede ses belli bir süre yüksek kalırsa telefonunuza haber gönderir.
  • Gürültü göstergesi: Ortam ne kadar gürültülü? Mikrofonun ölçtüğü seviyeyi bir LED halkada gösterin; sınıfta ya da ofiste sessizlik hatırlatıcısı olur.
  • Ses efekt kutusu: Mikrofona söylediğinizi yankılı ya da robot sesiyle geri verir. Çocuklar için eğlenceli bir oyuncaktır.

Üç kartın farkını merak ediyorsanız ESP32 çeşitleri yazımıza göz atın.

Sık sorulan sorular

Hoparlörden ses gelmiyor, ne yapmalıyım?

Önce beslemeye bakın: yükselteç 5V pinine, mikrofon 3V3 pinine bağlı olmalı. Sonra veri kablolarını bağlantı tablosuyla karşılaştırın. Hâlâ ses yoksa yükselteçteki SD pinini VIN'e bağlayın; bu, yükselteci açık tutar.

8 ohm hoparlör kullanabilir miyim?

Evet. Yükselteç 4 ve 8 ohm hoparlörlerle çalışır. 8 ohm hoparlör daha az akım çeker, ama ses biraz daha kısık çıkar. Daha büyük bir kutu için 5 cm 8 ohm 5W hoparlöre bakabilirsiniz.

Güç kaynağı olarak ne kullanmalıyım?

Deneme için bilgisayarın USB girişi yeter. Ses açıldığında yükselteç 650 mA'e kadar akım çekebilir; kalıcı kurulumda en az 1 amperlik bir 5 V adaptör kullanın.

Kaynaklar

Bu yazıyı hazırlarken parçaların üretici belgelerini okuduk, bağlantı pinlerini Espressif'in pin kurallarına göre seçtik ve örnek kodu üç kart için derledik.

  1. INMP441 veri sayfası TDK InvenSense, DS-INMP441-00 Rev 1.1. Besleme gerilimi, veri biçimi ve kanal seçimi.
  2. MAX98357A / MAX98357B veri sayfası Analog Devices, Rev 13. Çıkış gücü, desteklenen örnekleme hızları ve hoparlör bağlantısı.
  3. MAX98357 I2S yükselteç rehberi Adafruit. Modül pinleri, kazanç ayarı ve akım ihtiyacı.
  4. ESP-IDF I2S belgesi Espressif Systems. Mikrofon ve yükseltecin aynı ses hattını paylaşması.
  5. ESP-IDF GPIO belgesi Espressif Systems. Kartlara göre kullanılabilir pinler.
  6. Arduino-ESP32 I2S belgesi Espressif Systems. Paket sürümleri arasındaki ses sürücüsü farkı.
  7. ESP32-A2DP Phil Schatzmann. Bluetooth hoparlör projesinin kitaplığı.
  8. ESP32-audioI2S schreibfaul1. İnternet radyosu projesinin kitaplığı.
  9. ESPHome Voice Assistant ESPHome. Home Assistant sesli asistanı.

Bilgiler 10 Kasım 2026'da kaynaklarla karşılaştırıldı. Örnek kod, ESP32 Arduino paketinin 2.0.4 sürümüyle klasik ESP32, S3 ve C3 kartları için derlendi.

İlgili yazılar

Alışveriş deneyiminizi iyileştirmek ve sitenin temel işlevlerini sağlamak için çerezler kullanıyoruz. Gizlilik ve Çerez Politikası.