- 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:
| Pin | ADC | Dokunmatik | RTC | Diğer işlev | Not |
|---|---|---|---|---|---|
| GPIO0 | ADC2_CH1 | T1 | ✔ | BOOT düğmesi | Strapping, dahili pull-up |
| GPIO1 | UART0 TX | Açılışta hata ayıklama logu basar | |||
| GPIO2 | ADC2_CH2 | T2 | ✔ | Dahili mavi LED | Strapping |
| GPIO3 | UART0 RX | Açılışta HIGH | |||
| GPIO4 | ADC2_CH0 | T0 | ✔ | Serbest | |
| GPIO5 | VSPI CS | Strapping, açılışta PWM basar | |||
| GPIO6-11 | Dahili flash | Kullanılamaz | |||
| GPIO12 | ADC2_CH5 | T5 | ✔ | MTDI (JTAG) | Strapping, açılışta HIGH ise kart açılmaz |
| GPIO13 | ADC2_CH4 | T4 | ✔ | MTCK (JTAG) | Serbest |
| GPIO14 | ADC2_CH6 | T6 | ✔ | MTMS (JTAG) | Açılışta PWM basar |
| GPIO15 | ADC2_CH3 | T3 | ✔ | MTDO (JTAG) | Strapping, LOW ise açılış logu susar |
| GPIO16 | UART2 RX | WROVER modülünde PSRAM’e ayrılmış | |||
| GPIO17 | UART2 TX | WROVER modülünde PSRAM’e ayrılmış | |||
| GPIO18 | VSPI CLK | Serbest | |||
| GPIO19 | VSPI MISO | Serbest | |||
| GPIO21 | I2C SDA | Varsayılan I2C veri hattı | |||
| GPIO22 | I2C SCL | Varsayılan I2C saat hattı | |||
| GPIO23 | VSPI MOSI | Serbest | |||
| GPIO25 | ADC2_CH8 | ✔ | DAC1 | Gerçek analog çıkış | |
| GPIO26 | ADC2_CH9 | ✔ | DAC2 | Gerçek analog çıkış | |
| GPIO27 | ADC2_CH7 | T7 | ✔ | Serbest | |
| GPIO32 | ADC1_CH4 | T9 | ✔ | Wi-Fi ile uyumlu analog | |
| GPIO33 | ADC1_CH5 | T8 | ✔ | Wi-Fi ile uyumlu analog | |
| GPIO34 | ADC1_CH6 | ✔ | Yalnızca giriş | ||
| GPIO35 | ADC1_CH7 | ✔ | Yalnızca giriş | ||
| GPIO36 (VP) | ADC1_CH0 | ✔ | Yalnızca giriş | ||
| GPIO39 (VN) | ADC1_CH3 | ✔ | Yalnı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.
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.
| Özellik | Değer |
|---|---|
| İşlemci | 32 bit Xtensa LX6, çift çekirdek, 240 MHz’e kadar |
| SRAM | 520 KB |
| Flash | Modülde 4 MB (WROOM-32) |
| Kablosuz | Wi-Fi 802.11 b/g/n 2,4 GHz + Bluetooth 4.2 Klasik ve LE |
| GPIO | 34 (kartta 25-30 tanesi kullanılabilir) |
| ADC | 2 adet 12 bit, toplam 18 kanal |
| DAC | 2 adet 8 bit |
| Dokunmatik | 10 kanal |
| Arayüzler | 3x UART, 2x I2C, 4x SPI, 2x I2S, CAN, Ethernet MAC, SD/MMC |
| PWM | 16 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.
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.
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.
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:
| Pin | Görev | Yanlış kullanımda ne olur |
|---|---|---|
| GPIO0 | Yükleme modu | Açılışta LOW ise kart programa geçmez, yükleme modunda bekler |
| GPIO2 | Yükleme modu yardımcısı | GPIO0 LOW iken bunun da LOW olması gerekir |
| GPIO5 | SDIO zamanlaması | Açılışta LOW dayatılırsa açılış bozulabilir |
| GPIO12 | Flash voltajı (MTDI) | Açılışta HIGH ise flash 1,8 V’a düşer ve kart hiç açılmaz |
| GPIO15 | Açı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:
| Birim | CLK | MISO | MOSI | CS |
|---|---|---|---|---|
| VSPI (varsayılan) | GPIO18 | GPIO19 | GPIO23 | GPIO5 |
| HSPI | GPIO14 | GPIO12 | GPIO13 | GPIO15 |
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ı.
Serialbu. - UART2 (GPIO17 TX, GPIO16 RX):
Serial2olarak 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
| Pin | Ne yapar |
|---|---|
| VIN / 5V | Harici 5 V girişi. Kart üstündeki regülatörü besler |
| 3V3 | Regülatör çıkışı. Sensörleri buradan besleyin |
| GND | Toprak. Kartta birden fazla var, hepsi ortak |
| EN | Reset. LOW çekilirse çip durur |
Üç sınırı bilin:
- 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.
- 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.
- 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.
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:
| Belirti | Muhtemel neden | Çözüm |
|---|---|---|
| Kart hiç açılmıyor, seri portta çıktı yok | GPIO12’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ıyor | Besleme yetersiz | Kısa ve kaliteli USB kablo, harici 5 V adaptör, 3V3-GND arasına kondansatör |
Kod yüklenmiyor, Failed to connect | Otomatik yükleme devresi çalışmıyor | BOOT’u basılı tutup yükleyin |
| Bilgisayar kartı hiç görmüyor | USB sürücüsü eksik ya da kablo veri taşımıyor | CP2102/CH340 sürücüsünü kurun, kabloyu değiştirin |
analogRead sürekli 0 ya da saçma değer | Sensör ADC2 pininde, Wi-Fi açık | Sensörü GPIO32-39 arasına taşıyın |
Butonun INPUT_PULLUP ayarı çalışmıyor | Buton GPIO34-39 arasında | Harici 10 kΩ direnç ekleyin ya da başka pine taşıyın |
| LED bağladım hiç yanmıyor | Pin yalnızca giriş | GPIO34, 35, 36, 39 çıkış veremez |
| Kart açılırken röle bir kere tıklıyor | Röle GPIO5, 14 ya da 15’te | Açılışta sinyal basmayan bir pine taşıyın |
| Yükleme sonrası kart programa geçmiyor | GPIO0 LOW’da kalmış | GPIO0’a bağlı devreyi ayırın, EN’e basın |
| I2C cihazı bulunamıyor | Yanlış pin ya da besleme | SDA 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 gerekiyor | Klasik ESP32, S3’te yok |
| Çok pin, kamera, renkli ekran | ESP32-S3 |
| Küçük, ucuz, pil dostu | ESP32-C3 SuperMini |
| Matter, Thread, Zigbee | ESP32-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:
- GPIO6-11 flash belleğin, 38 pinli kartta bile bunlara dokunmayın.
- GPIO34, 35, 36, 39 sadece giriş, dahili pull-up’ları da yok.
- GPIO0, 2, 5, 12, 15 strapping pini, açılışta sabit seviye dayatmayın. Özellikle GPIO12.
- 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.
