Özet: 30 Saniyede ESP32 Pinout
  • ESP32, Espressif’in çift çekirdekli Xtensa LX6 işlemcili, 240 MHz’de çalışan Wi-Fi + Bluetooth mikrodenetleyicisi. Çipte 34 GPIO var, karta ise 30 ya da 38 pin çıkarılmış.
  • 30 pin ile 38 pin farkı pin sayısından ibaret değil: 38 pinli kartta fazladan çıkan pinlerin altısı dahili flash belleğe bağlı ve kullanılamaz.
  • GPIO6 ile GPIO11 arası flash belleğe ayrılmış. Bağlarsanız kart açılmaz.
  • GPIO34, 35, 36, 39 yalnızca giriş. Çıkış veremezler, dahili pull-up/pull-down da yoktur.
  • GPIO0, 2, 5, 12, 15 strapping pini. Açılış anında yanlış seviyeye çekilirse kart ya açılmaz ya yükleme moduna takılır.
  • Wi-Fi açıkken ADC2 okumaz. Analog sensörleri GPIO32-39 arasındaki ADC1 pinlerine bağlayın.
  • Kart 3,3 volt mantıkla çalışır ve 5 volda tolere etmez. 5 V sensör çıkışını doğrudan bağlamayın.

ESP32 ucuz, hızlı, Wi-Fi’li ve Bluetooth’lu. Ama ilk projede insanı çıldırtan bir tarafı var: 38 pin yazıyor, hepsini kullanamıyorsunuz. Röleyi bir pine takıyorsunuz kart açılmıyor, sensörü başkasına takıyorsunuz Wi-Fi açılınca değer saçmalıyor, LED’i üçüncüsüne takıyorsunuz her açılışta bir kere yanıp sönüyor.

Hiçbiri arıza değil. Hepsinin nedeni pin haritasında yazılı. Bu yazıda DevKit V1 kartının pinout şemasını, hangi pinleri neden kullanamayacağınızı, 30 pin ile 38 pin arasındaki gerçek farkı ve ilk kodu yüklerken takılacağınız yerleri sırayla geçeceğiz. 👇🏻


ESP32 Pinout Şeması

En çok aranan şey bu olduğu için başa koyalım. Aşağıdaki tablo ESP32 DevKit V1 (ESP32-WROOM-32) kartının çıkardığı pinleri ve her birinin ikincil işlevlerini gösteriyor:

PinADCDokunmatikRTCDiğer işlevNot
GPIO0ADC2_CH1T1BOOT düğmesiStrapping, dahili pull-up
GPIO1UART0 TXAçılışta hata ayıklama logu basar
GPIO2ADC2_CH2T2Dahili mavi LEDStrapping
GPIO3UART0 RXAçılışta HIGH
GPIO4ADC2_CH0T0Serbest
GPIO5VSPI CSStrapping, açılışta PWM basar
GPIO6-11Dahili flashKullanılamaz
GPIO12ADC2_CH5T5MTDI (JTAG)Strapping, açılışta HIGH ise kart açılmaz
GPIO13ADC2_CH4T4MTCK (JTAG)Serbest
GPIO14ADC2_CH6T6MTMS (JTAG)Açılışta PWM basar
GPIO15ADC2_CH3T3MTDO (JTAG)Strapping, LOW ise açılış logu susar
GPIO16UART2 RXWROVER modülünde PSRAM’e ayrılmış
GPIO17UART2 TXWROVER modülünde PSRAM’e ayrılmış
GPIO18VSPI CLKSerbest
GPIO19VSPI MISOSerbest
GPIO21I2C SDAVarsayılan I2C veri hattı
GPIO22I2C SCLVarsayılan I2C saat hattı
GPIO23VSPI MOSISerbest
GPIO25ADC2_CH8DAC1Gerçek analog çıkış
GPIO26ADC2_CH9DAC2Gerçek analog çıkış
GPIO27ADC2_CH7T7Serbest
GPIO32ADC1_CH4T9Wi-Fi ile uyumlu analog
GPIO33ADC1_CH5T8Wi-Fi ile uyumlu analog
GPIO34ADC1_CH6Yalnızca giriş
GPIO35ADC1_CH7Yalnızca giriş
GPIO36 (VP)ADC1_CH0Yalnızca giriş
GPIO39 (VN)ADC1_CH3Yalnızca giriş

Kart üstünde GPIO20, GPIO24, GPIO28-31 yok. Bunlar çipin paketinde dışarı çıkarılmamış pinler, aramanıza gerek yok. GPIO37 ve GPIO38 de çipte var ama DevKit kartlarında header’a bağlı değil.

👉🏻 Pinleri kart üstünde görsel olarak görmek isterseniz ESP32 pinout aracımız DevKit V1, S3, C3, C6 ve S2 kartlarını yan yana gösteriyor ve pinlere tıklayınca işlevlerini açıyor.


Reklam

ESP32 Nedir?

ESP32, Espressif’in 2016’da çıkardığı ve ESP8266’nın yerini alan Wi-Fi + Bluetooth mikrodenetleyicisi. Piyasadaki kartların büyük çoğunluğu aynı modülü kullanıyor: ESP32-WROOM-32.

ÖzellikDeğer
İşlemci32 bit Xtensa LX6, çift çekirdek, 240 MHz’e kadar
SRAM520 KB
FlashModülde 4 MB (WROOM-32)
KablosuzWi-Fi 802.11 b/g/n 2,4 GHz + Bluetooth 4.2 Klasik ve LE
GPIO34 (kartta 25-30 tanesi kullanılabilir)
ADC2 adet 12 bit, toplam 18 kanal
DAC2 adet 8 bit
Dokunmatik10 kanal
Arayüzler3x UART, 2x I2C, 4x SPI, 2x I2S, CAN, Ethernet MAC, SD/MMC
PWM16 kanal LEDC, her çıkış pininde kullanılabilir
Derin uyku~10 µA, ULP yardımcı çekirdek

Arduino Uno ile kıyaslarsanız fark uçurum: Uno 16 MHz tek çekirdek ve 2 KB RAM sunar, ESP32 240 MHz çift çekirdek ve 520 KB. Üstelik Wi-Fi ve Bluetooth kutunun içinde geliyor. Karşılığında ödediğiniz bedel: 5 volt toleransı yok ve pin kullanımı Uno kadar serbest değil.

ESP32 mi ESP8266 mı?

ESP8266 (NodeMCU) hâlâ satılıyor ve daha ucuz. Tek çekirdek, Bluetooth yok, 17 GPIO ve tek ADC kanalı var.

Basit bir sensör okuyup buluta gönderecekseniz ESP8266 yeterli. Bluetooth, birden fazla analog sensör, dokunmatik giriş ya da ekran süreceksiniz ESP32 alın. Aradaki fiyat farkı bugün zaten çok küçük.

ESP8266 ile başlamak isterseniz NodeMCU kurulum yazımıza bakabilirsiniz.


30 Pin ile 38 Pin Farkı

Aynı isimle satılan iki kart var ve aradaki fark yalnızca boy değil.

30 pinli DevKit V1: Kenar başına 15 pin. Kullanabileceğiniz her GPIO dışarı çıkmış durumda.

38 pinli DevKit V1: Kenar başına 19 pin. Fazladan gelen sekiz pinin altısı dahili flash belleğin veri hatları (GPIO6, 7, 8, 9, 10, 11), kalan ikisi ek GND ve güç pini.

Yani 38 pinli kart size sekiz fazla pin vermiyor. İki fazla pin veriyor, altısı da tuzak. Header’da duruyorlar, lehimleyebiliyorsunuz, ama bir şey bağladığınız anda kart flash belleğini okuyamayıp açılmıyor.

38 pinli kartta SD ve CLK yazan pinler

Serigrafide SD0, SD1, SD2, SD3, CMD, CLK yazan pinler işte bunlar. İsim SD kart takabileceğinizi düşündürüyor ama alakası yok; bu isimler flash belleğin SPI hattından geliyor.

Bu altı pini boş bırakın. SD kart bağlayacaksanız normal SPI pinlerini (GPIO18, 19, 23 ve bir CS pini) kullanın.

Peki hangisini almalı? Fark yaratan tek şey ek GND pini ve breadboard uyumu. 38 pinli kart standart breadboard’da genelde tek sıra boş bırakmıyor, jumper kabloyu yandan takmak zorunda kalıyorsunuz. 30 pinli kart bu yüzden prototiplemede daha rahat.


Kullanamayacağınız Pinler

Yeni başlayanların projesini bozan liste bu. Dört grup var.

1. Flash belleğe ayrılmış pinler

GPIO6, 7, 8, 9, 10, 11 dahili SPI flash belleğe bağlı. Espressif bunu açıkça yazıyor: bu pinler modül üzerindeki flash ve PSRAM’e bağlıdır, başka amaçla kullanılmamalıdır.

WROVER modüllü kartlarda GPIO16 ve GPIO17 de PSRAM’e ayrılmış olur. Düz WROOM-32 kartlarda bu ikisi serbest ve UART2 olarak kullanılabilir.

2. Yalnızca giriş pinleri

GPIO34, GPIO35, GPIO36 (VP) ve GPIO39 (VN) çıkış veremez. Dahası, dahili pull-up ve pull-down dirençleri de yoktur.

Pratikte ne demek: bu pinlere bir buton bağlarsanız INPUT_PULLUP çalışmaz, harici 10 kΩ direnç eklemek zorundasınız. LED bağlarsanız hiç yanmaz.

Bu dört pin analog sensör için idealdir, çünkü hepsi ADC1’de.

GPIO36 ve GPIO39 kesme uyarısı

Espressif’in errata notu: ADC kullanırken ya da uyku modu açıkken Wi-Fi/Bluetooth ile birlikte GPIO36 ve GPIO39’da kesme (interrupt) kullanmayın. Donanım hatası nedeniyle yanlış tetiklemeler oluşuyor.

Bu pinleri sadece analogRead ile okuyorsanız sorun yok.

3. Strapping pinleri

Beş pin, kartın açılış anında nasıl davranacağını belirliyor:

PinGörevYanlış kullanımda ne olur
GPIO0Yükleme moduAçılışta LOW ise kart programa geçmez, yükleme modunda bekler
GPIO2Yükleme modu yardımcısıGPIO0 LOW iken bunun da LOW olması gerekir
GPIO5SDIO zamanlamasıAçılışta LOW dayatılırsa açılış bozulabilir
GPIO12Flash voltajı (MTDI)Açılışta HIGH ise flash 1,8 V’a düşer ve kart hiç açılmaz
GPIO15Açılış logu (MTDO)LOW ise seri porttaki açılış çıktısı susar

En sinsi olanı GPIO12. Buraya 10 kΩ pull-up direnci olan bir modül (bazı ekran ve röle kartları böyle) bağladığınız anda kart açılmaz ve nedenini bulmak saatler alır.

Kural basit: bu beş pine açılış anında sabit seviye dayatan hiçbir şey bağlamayın. Kart açıldıktan sonra hepsi normal GPIO gibi kullanılabilir.

4. Açılışta sinyal basan pinler

Bunlar yasak değil ama sürpriz yapıyor:

  • GPIO1 ve GPIO3: UART0 hattı. Açılışta hata ayıklama logu basar ve seri port kullandığınızda meşguldür.
  • GPIO5, GPIO14, GPIO15: Açılışta kısa bir PWM sinyali çıkarır.

Bu pinlere röle bağlarsanız kart her yeniden başladığında röle bir kere tıklar. Motor sürücü bağlarsanız motor bir an seğirir. Kritik yükleri buraya bağlamayın.

Sonuç: rahatça kullanabileceğiniz pinler

Wi-Fi açıkken, seri port kullanırken ve normal bir WROOM-32 kartta elinizde kalan güvenli pinler:

Giriş ve çıkış: GPIO4, 13, 16, 17, 18, 19, 21, 22, 23, 25, 26, 27, 32, 33 Yalnızca giriş: GPIO34, 35, 36, 39

Yani 38 pin yazan kartta rahatça kullanabileceğiniz 18 pin var. Çoğu proje için fazlasıyla yeter.


ADC, DAC ve Dokunmatik Pinler

Wi-Fi açıkken ADC2 okumuyor

ESP32’de iki ayrı analog-dijital çevirici var ve ikincisi Wi-Fi ile aynı donanımı paylaşıyor.

  • ADC1: GPIO32, 33, 34, 35, 36, 39. Wi-Fi açıkken sorunsuz çalışır.
  • ADC2: GPIO0, 2, 4, 12, 13, 14, 15, 25, 26, 27. Wi-Fi sürücüsü açıkken kullanılamaz.

Espressif’in belgesi bunu doğrudan söylüyor: ADC2 Wi-Fi tarafından da kullanılıyor ve sürücü iki taraf arasında koruma uyguluyor. Arduino tarafında bunun karşılığı şudur: WiFi.begin() çağırdıktan sonra ADC2 pininden analogRead yaptığınızda ya 0 döner ya rastgele değer.

Kural: Wi-Fi kullanan projede analog sensör GPIO32-39 arasına bağlanır. Bu altı pin dışında analog okuma yapmayın.

ADC doğrusal değil

ESP32’nin ADC’si 12 bit, yani 0-4095 arası değer döndürür. Ama varsayılan ayarda 0 volta yakın ve 3,1 voltun üstünde ölçüm doğrusallıktan çıkar. Hassas ölçüm yapacaksanız analogSetAttenuation() ile kazanç ayarlayın ya da referans bir direnç bölücüyle çalışma aralığını ortaya çekin.

Gerilim bölücü hesabı için gerilim bölücü hesaplayıcımızı kullanabilirsiniz.

DAC: gerçek analog çıkış

GPIO25 ve GPIO26 çipteki tek gerçek analog çıkışlar. 8 bit, yani 0-255 arası. dacWrite(25, 128) dediğinizde pinden gerçekten 1,65 volt çıkar.

Basit ses üretimi, analog kontrol sinyali ya da referans voltaj için idealdir. Kaliteli ses istiyorsanız I2S ve harici bir DAC modülü gerekir.

Dokunmatik pinler

On pin kapasitif dokunmaya duyarlı: GPIO0, 2, 4, 12, 13, 14, 15, 27, 32, 33. Bir kabloyu ya da bakır yüzeyi doğrudan bağlayıp touchRead() ile okuyabilirsiniz, ek devre gerekmez.

Dikkat: bu pinlerin çoğu aynı zamanda strapping ya da ADC2 pini. Dokunmatik giriş için en rahat ikili GPIO32 ve GPIO33.


SPI, UART ve PWM Pinleri

Arduino Uno’dan gelenlerin en çok şaşırdığı yer burası: ESP32’de pinlerin çoğu sabit değil.

Çipin içinde bir GPIO matrisi var. Uno’da I2C donanımı fiziksel olarak A4 ve A5’e bağlıdır, değiştiremezsiniz. ESP32’de ise donanım birimiyle pin arasında bir yönlendirici katman var, yani neredeyse istediğiniz pini istediğiniz işleve atayabiliyorsunuz.

Wire.begin(4, 5);              // I2C'yi GPIO4 ve GPIO5'e taşı
Serial2.begin(9600, SERIAL_8N1, 13, 27);  // UART2'yi GPIO13/27'ye taşı

Tablodaki “varsayılan” pinler yalnızca kütüphanelerin parametre verilmediğinde kullandığı değerler. Bir modül GPIO21’i işgal ediyorsa I2C’yi başka yere almak tek satır.

İstisna: ADC, DAC ve dokunmatik birimleri matristen geçmez. Analog okuma yalnızca ADC pinlerinden, DAC yalnızca GPIO25 ve GPIO26’dan yapılır. Bunlar çipin fiziksel yapısına bağlı.

SPI

Çipte dört SPI birimi var ama ikisi flash belleğe ayrılmış. Size kalan ikisi:

BirimCLKMISOMOSICS
VSPI (varsayılan)GPIO18GPIO19GPIO23GPIO5
HSPIGPIO14GPIO12GPIO13GPIO15

SPI.begin() parametresiz çağrıldığında VSPI kullanılır. HSPI pinlerinin ikisinin (GPIO12 ve GPIO15) strapping pini olduğuna dikkat edin; SD kart ya da ekran modülü bağlarken açılış sorunu yaşarsanız suçlu genelde budur.

UART

Üç donanım seri portu var:

  • UART0 (GPIO1 TX, GPIO3 RX): USB üzerinden bilgisayara bağlı. Serial bu.
  • UART2 (GPIO17 TX, GPIO16 RX): Serial2 olarak serbest kullanılabilir. GPS, RFID okuyucu ya da başka bir kartla konuşmak için ideal.
  • UART1: Varsayılan pinleri flash belleğe denk geldiği için doğrudan kullanılmaz, matris üzerinden başka pinlere taşınması gerekir.

PWM

Uno’daki gibi “PWM pinleri” diye ayrı bir grup yok. Çıkış verebilen her pin PWM üretebilir, çünkü 16 bağımsız LEDC kanalı istediğiniz pine yönlendirilebiliyor.

Arduino ESP32 çekirdeğinin 3.x sürümüyle API sadeleşti:

ledcAttach(16, 5000, 8);   // GPIO16, 5 kHz, 8 bit çözünürlük
ledcWrite(16, 128);        // %50 görev döngüsü

Eski ledcSetup ve ledcAttachPin ikilisiyle yazılmış kodlar 3.x’te derlenmez. İnternette bulduğunuz örnek hata veriyorsa önce buna bakın.


Derin Uyku ve RTC Pinleri

Pil ile çalışan projede ESP32’yi derin uykuya alırsınız ve akım ~10 µA’e düşer. Ama uykudayken çip neredeyse tamamen kapalıdır; yalnızca RTC bölgesi ayakta kalır.

Bunun pin karşılığı şu: kartı bir butonla ya da sensörle uyandıracaksanız, o pin RTC destekli olmak zorunda. Yukarıdaki tabloda RTC sütununda ✔ olan pinler bunlar:

GPIO0, 2, 4, 12, 13, 14, 15, 25, 26, 27, 32, 33, 34, 35, 36, 39

GPIO16-23 arası uyandırma yapamaz. Butonu GPIO18’e bağlayıp esp_sleep_enable_ext0_wakeup() çağırırsanız kod derlenir ama kart hiç uyanmaz.

Uykudan uyanınca değerini koruması gereken veriyi de RTC_DATA_ATTR ile işaretlemeniz gerekir, normal değişkenler sıfırlanır:

RTC_DATA_ATTR int uyanmaSayisi = 0;

Sık Kullanılan Bağlantı Örnekleri

Pin haritasını okumak bir şey, sensörü doğru yere takmak başka. En çok sorulan üçü:

I2C LCD ekran: SDA → GPIO21, SCL → GPIO22, VCC → VIN (modül 5 volt ister), GND → GND. Ekran 5 volt beslendiği için I2C hattında 5 volt görünür; çoğu modülde bu tolere edilir ama emin olmak isterseniz seviye çevirici kullanın. Kod tarafı için I2C ile 16x2 LCD kullanımı yazımıza bakabilirsiniz.

DHT11 / DHT22 sıcaklık sensörü: Veri pini herhangi bir serbest GPIO’ya gider, GPIO4 rahat bir seçim. 3,3 volttan beslenir, strapping pini kullanmayın. Kod için DHT11 ve DHT22 rehberimiz var, DHT kod üretici aracımız da hazır kod veriyor.

HC-SR04 mesafe sensörü: Trig herhangi bir çıkış pinine bağlanabilir, ama Echo 5 volt çıkış verir ve doğrudan bağlanamaz. Araya gerilim bölücü koyun: Echo ile GPIO arasına 1 kΩ, GPIO ile GND arasına 2 kΩ. Ayrıntı için HC-SR04 yazımıza bakın.


Güç Pinleri ve Elektriksel Sınırlar

PinNe yapar
VIN / 5VHarici 5 V girişi. Kart üstündeki regülatörü besler
3V3Regülatör çıkışı. Sensörleri buradan besleyin
GNDToprak. Kartta birden fazla var, hepsi ortak
ENReset. LOW çekilirse çip durur

Üç sınırı bilin:

  1. Mantık seviyesi 3,3 volt ve kart 5 volt tolere etmiyor. 5 V çıkış veren bir sensörü (bazı ultrasonik ve LCD modülleri) doğrudan bağlarsanız pini yakabilirsiniz. Araya gerilim bölücü ya da seviye çevirici koyun.
  2. Pin başına akım sınırı 40 mA mutlak maksimum, güvenli tasarım için 20 mA hedefleyin. LED sürerken direnç kullanın, motor ya da röleyi doğrudan sürmeyin.
  3. 3V3 pininden çekebileceğiniz akım regülatöre bağlı. Tipik AMS1117 regülatörlü kartlarda birkaç yüz miliamperden fazlasını beklemeyin. Wi-Fi verirken çipin kendisi anlık 500 mA’e yakın çekiyor.
Brownout detector triggered hatası

Seri portta sürekli Brownout detector was triggered yazıp kart yeniden başlıyorsa sorun kodda değil, beslemede. Çip Wi-Fi’yi açtığı anda akım çekiyor ve voltaj düşüyor.

Sırayla deneyin: kaliteli ve kısa bir USB kablosu, bilgisayarın arka paneli yerine harici 5 V adaptör, 3V3 ile GND arasına 100-470 µF kondansatör. Sorunun büyük çoğunluğu ilk maddede çözülüyor.


Arduino IDE ile İlk Kod

1. Sürücüyü kurun

ESP32 kartında bilgisayarla konuşan ayrı bir çip var ve iki tipi yaygın:

  • CP2102 (Silicon Labs): Kart üstünde kare, küçük bir entegre. Sürücü Silicon Labs sitesinde.
  • CH340 (WCH): Daha ucuz klon kartlarda yaygın.

Kart takılınca Aygıt Yöneticisi’nde sarı ünlemli bir cihaz görünüyorsa sürücü eksiktir. Windows 11 CP2102’yi genelde otomatik tanır, CH340’ı tanımaz.

2. Kart desteğini ekleyin

Arduino IDE kurulu değilse önce Arduino IDE nasıl indirilir yazımıza bakın.

File → Preferences → Additional Board Manager URLs alanına:

https://espressif.github.io/arduino-esp32/package_esp32_index.json

Sonra Tools → Board → Boards Manager açıp “esp32” aratın ve Espressif Systems paketini kurun.

3. Kartı seçin

Tools → Board → ESP32 Arduino → DOIT ESP32 DEVKIT V1. Kartınızın tam adı listede yoksa ESP32 Dev Module her zaman çalışır.

Upload Speed 921600 çoğu kartta sorunsuz. Yükleme yarıda kalıyorsa 115200’e düşürün.

4. Dahili LED’i yakın

DevKit V1’de mavi LED GPIO2‘ye bağlı:

#define LED_PIN 2

void setup() {
  Serial.begin(115200);
  pinMode(LED_PIN, OUTPUT);
  Serial.printf("Çip: %s, çekirdek: %d, frekans: %d MHz\n",
                ESP.getChipModel(), ESP.getChipCores(), getCpuFrequencyMhz());
  Serial.printf("Flash: %u MB\n", ESP.getFlashChipSize() / (1024 * 1024));
}

void loop() {
  digitalWrite(LED_PIN, HIGH);
  delay(500);
  digitalWrite(LED_PIN, LOW);
  delay(500);
}

Seri ekranda çip modelini ve flash boyutunu görüyorsanız kart doğru yapılandırılmış demektir.

5. Kod yüklenmiyorsa

Failed to connect to ESP32: Timed out waiting for packet header hatası klasiktir. Çözümü kart üstündeki düğmelerde:

BOOT düğmesini basılı tutun, IDE “Connecting…” yazmaya başlayınca 2-3 saniye daha basılı tutun, sonra bırakın.

Bazı kartlarda otomatik yükleme devresi eksik olduğu için bu her seferinde gerekir. Hâlâ olmuyorsa: EN düğmesine bir kere basıp bırakın, BOOT’u basılı tutarken EN’e basın, ya da seri portu kullanan başka bir program (seri ekran dahil) açıksa kapatın.


Sık Karşılaşılan Sorunlar

Bu yazıdaki bilgiyi tek tabloya sıkıştıralım. Kartınız beklediğiniz gibi davranmıyorsa önce buraya bakın:

BelirtiMuhtemel nedenÇözüm
Kart hiç açılmıyor, seri portta çıktı yokGPIO12’ye açılışta HIGH dayatan bir modül bağlıModülü ayırın, kartı başka pine taşıyın
Sürekli yeniden başlıyor, Brownout detector yazıyorBesleme yetersizKısa ve kaliteli USB kablo, harici 5 V adaptör, 3V3-GND arasına kondansatör
Kod yüklenmiyor, Failed to connectOtomatik yükleme devresi çalışmıyorBOOT’u basılı tutup yükleyin
Bilgisayar kartı hiç görmüyorUSB sürücüsü eksik ya da kablo veri taşımıyorCP2102/CH340 sürücüsünü kurun, kabloyu değiştirin
analogRead sürekli 0 ya da saçma değerSensör ADC2 pininde, Wi-Fi açıkSensörü GPIO32-39 arasına taşıyın
Butonun INPUT_PULLUP ayarı çalışmıyorButon GPIO34-39 arasındaHarici 10 kΩ direnç ekleyin ya da başka pine taşıyın
LED bağladım hiç yanmıyorPin yalnızca girişGPIO34, 35, 36, 39 çıkış veremez
Kart açılırken röle bir kere tıklıyorRöle GPIO5, 14 ya da 15’teAçılışta sinyal basmayan bir pine taşıyın
Yükleme sonrası kart programa geçmiyorGPIO0 LOW’da kalmışGPIO0’a bağlı devreyi ayırın, EN’e basın
I2C cihazı bulunamıyorYanlış pin ya da beslemeSDA GPIO21, SCL GPIO22; modülü VIN’den besleyin

ESP32 Hangi Dille Programlanır?

Üç yaygın yol var ve seçim projenin boyutuna göre değişiyor:

Arduino (C++): En kolayı. Bu yazıdaki örnekler bu. Arduino’nun kütüphane ekosistemini olduğu gibi kullanırsınız, ekran ve sensör kodu hazır gelir. Yeni başlıyorsanız buradan girin.

ESP-IDF (C): Espressif’in kendi resmi çatısı. Çipin her özelliğine erişir, güç yönetimi ve gerçek zamanlı görev kontrolü çok daha ayrıntılıdır. Ticari ürün geliştiriyorsanız er geç buraya geçersiniz. Öğrenme eğrisi diktir.

MicroPython: Karta yorumlayıcı yükleyip Python yazarsınız. Prototip hızı çok yüksek, karşılığında performans ve bellek kaybı var. Sensör okuyup veri gönderen işler için fazlasıyla yeterli.

Arduino tarafında bilmeniz gereken bir ayrıntı: ESP32 çekirdeği altta FreeRTOS çalıştırır. Yani loop() aslında bir görev içinde dönüyor ve iki çekirdeğin ikincisi boşta duruyor. xTaskCreatePinnedToCore() ile ikinci çekirdeğe iş verebilirsiniz. Uzun süren bir işlemde delay() yerine bunu kullanmak, Wi-Fi bağlantısının kopmasını engeller.


Hangi ESP32 Kartını Almalı?

Piyasada onlarca varyant var, ama karar üç soruya iniyor:

İhtiyaçKart
İlk kez alıyorum, genel amaçlıDevKit V1 (30 pin), WROOM-32 modüllü
Bluetooth Klasik gerekiyorKlasik ESP32, S3’te yok
Çok pin, kamera, renkli ekranESP32-S3
Küçük, ucuz, pil dostuESP32-C3 SuperMini
Matter, Thread, ZigbeeESP32-C6

Klon kart alırken tek dikkat etmeniz gereken şey USB çipi. CP2102’li kartlar genelde sorunsuz, CH340’lılarda sürücü kurmanız gerekir. Bir de “ESP32 38 pin” diye satılan kartların bir kısmı aslında WROVER modüllü çıkıyor; o durumda GPIO16 ve GPIO17’yi de kaybedersiniz.


Sonuç

ESP32’nin pinout’u ilk bakışta karmaşık görünüyor ama aslında dört kural var. Bunları bilirseniz geri kalan her şey akar:

  1. GPIO6-11 flash belleğin, 38 pinli kartta bile bunlara dokunmayın.
  2. GPIO34, 35, 36, 39 sadece giriş, dahili pull-up’ları da yok.
  3. GPIO0, 2, 5, 12, 15 strapping pini, açılışta sabit seviye dayatmayın. Özellikle GPIO12.
  4. Wi-Fi açıkken analog okuma GPIO32-39 arasından, çünkü ADC2 Wi-Fi ile çakışıyor.

Daha fazla pin, yerleşik USB ya da kamera arayüzü gerekiyorsa bir sonraki adım ESP32-S3. Ekran süreceksiniz OLED SSD1306 rehberimiz ve görselden C dizisi çevirici aracımız işinizi görür.

👉🏻 Pin ararken ESP32 pinout aracımızı açık tutun, beş farklı kartı yan yana gösteriyor.