ESP32 Nedir? Özellikleri, Arduino IDE Kurulumu ve İlk Wi-Fi Projesi
ESP32 nedir, Arduino'dan farkı ne? Wi-Fi ve Bluetooth, güvenli pinler, Arduino IDE kurulumu, ilk Blink kodu, Wi-Fi'ye bağlanma, telefondan LED kontrolü, ESP32 çeşitleri ve sık yapılan hatalar.
ESP32, Espressif firmasının ürettiği; Wi-Fi ve Bluetooth'u içinde barındıran, çift çekirdekli ve çok ucuz bir mikrodenetleyicidir. Arduino Uno'nun yapamadığı birçok şeyi tek başına yapar: ev ağına bağlanır, telefondan açılan bir web sayfası sunar, internetten saat ve hava durumu çeker, Bluetooth ile telefonla konuşur. Üstelik Arduino IDE ile, alıştığın Arduino komutlarıyla programlanır. Nesnelerin interneti (IoT) projelerine başlamak için bugün en popüler karttır.

ESP32 nedir, ne işe yarar?
Aslında "ESP32" metal kapağın altındaki yonganın adıdır. Elimize aldığımız kart ise bu yongayı taşıyan bir geliştirme kartıdır (ESP32 DevKit, NodeMCU-32S gibi): üzerinde bilgisayarla konuşmayı sağlayan USB-seri dönüştürücü, 5 V'u 3,3 V'a düşüren regülatör, yeniden başlatma (EN) ve programlama (BOOT) düğmeleri bulunur. ESP32 ile yapabileceklerinden bazıları:
- Wi-Fi'li hava istasyonu: Sıcaklık ve nemi telefondan açılan bir sayfada göstermek.
- Telefondan kontrol: Lamba, priz ya da kapıyı bir web sayfasındaki düğmeyle yönetmek.
- İnternetten veri çekmek: Gerçek saati (NTP), hava durumunu ya da döviz kurunu ekranda göstermek.
- Bildirim göndermek: Hareket algılanınca Telegram ya da e-posta ile haber vermek.
- Bluetooth cihazları: Telefona bağlanan bir kumanda ya da bilgisayara klavye gibi görünen bir cihaz yapmak.
- Pille aylarca çalışan sensörler: Derin uyku moduyla yalnızca ölçüm anında uyanmak.
ESP32 ile Arduino Uno karşılaştırması
| Özellik | Arduino Uno R3 | ESP32 (WROOM-32) |
|---|---|---|
| İşlemci | ATmega328P, 8 bit, 16 MHz | Xtensa LX6, çift çekirdek, 32 bit, 240 MHz |
| RAM | 2 KB | 520 KB |
| Program belleği (flash) | 32 KB | Genellikle 4 MB |
| Kablosuz bağlantı | Yok | Wi-Fi + Bluetooth (Classic ve BLE) |
| Çalışma gerilimi | 5 V | 3,3 V |
| Kullanılabilir GPIO | 20 | Yaklaşık 34 (bazıları yalnızca giriş) |
| Analog giriş (ADC) | 6 kanal, 10 bit | 18 kanal, 12 bit |
| Analog çıkış (DAC) | Yok | 2 kanal, 8 bit |
Bu tabloya bakınca ESP32 her açıdan üstün görünür, ama Uno'nun da avantajları vardır: 5 V ile çalıştığı için eski sensör ve modüllerin çoğuyla doğrudan uyumludur, pinleri daha dayanıklıdır ve yeni başlayanlar için daha az sürpriz içerir. Kablosuz bağlantı gerekmiyorsa Uno hâlâ harika bir başlangıçtır; hangisini seçeceğine karar vermek için Hangi Arduino'yu Almalıyım? yazısına göz at.
ESP32 pinleri: hangilerini güvenle kullanabilirsin?
ESP32'nin pinleri Arduino'daki kadar "her biri aynı" değildir. Bazıları flaş belleğe bağlıdır, bazıları yalnızca giriş olarak çalışır, bazılarının seviyesi ise kartın açılışını etkiler. Kartının tam pin haritasını Pinout aracında görebilirsin; özet tablo şöyle:
| Pinler | Durum | Not |
|---|---|---|
| GPIO 6–11 | Kullanma | Dahili flaş belleğe bağlıdır; kullanılırsa kart çöker |
| GPIO 34–39 | Yalnızca giriş | Çıkış veremez, dahili pull-up direnci yoktur |
| GPIO 0, 2, 12, 15 | Dikkatli kullan | Açılış (boot) sırasındaki seviyeleri önemlidir |
| GPIO 1 ve 3 | Dikkatli kullan | USB seri haberleşmenin TX ve RX pinleridir |
| ADC2 pinleri (0, 2, 4, 12–15, 25–27) | Wi-Fi açıkken analog okumaz | Analog okuma için ADC1 (GPIO 32–39) kullan |
| GPIO 4, 5, 13, 14, 16–19, 21–23, 25–27, 32, 33 | Güvenli | Genel amaçlı giriş ve çıkış |
Arduino IDE'ye ESP32 kurulumu
- Arduino IDE'de Dosya > Tercihler menüsünü aç ve "Ek kart yöneticisi URL'leri" alanına https://espressif.github.io/arduino-esp32/package_esp32_index.json adresini ekle.
- Kart Yöneticisi'nde esp32 ara ve Espressif Systems'in paketini kur.
- Araçlar > Kart menüsünden ESP32 Dev Module seç.
- ESP32'yi USB kablosuyla bağla ve Araçlar > Port menüsünden doğru portu seç. Port görünmüyorsa kartındaki USB-seri yonganın (CP2102 ya da CH340) sürücüsünü kur.
- Yükleme sırasında ekranda "Connecting..." yazısı uzun süre kalırsa kartın üzerindeki BOOT düğmesine basılı tut, yükleme başlayınca bırak.
İlk program: dahili LED'i yakıp söndürmek
Çoğu ESP32 DevKit kartında GPIO 2'ye bağlı mavi bir LED vardır. Aşağıdaki kod onu yarım saniyede bir yakıp söndürür; gördüğün gibi Arduino'daki komutların aynısıdır:
1const int LED_PIN = 2; // çoğu DevKit'te dahili mavi LED / onboard blue LED on most DevKits
2
3void setup() {
4 pinMode(LED_PIN, OUTPUT);
5}
6
7void loop() {
8 digitalWrite(LED_PIN, HIGH);
9 delay(500);
10 digitalWrite(LED_PIN, LOW);
11 delay(500);
12}Wi-Fi'ye bağlanmak
ESP32'nin asıl gücü Wi-Fi'dır. Aşağıdaki kod ev ağına bağlanır ve modeminin ESP32'ye verdiği IP adresini Seri Monitör'e yazar. Ağ adını ve şifreni kendi bilgilerinle değiştir, Seri Monitör'ü 115200 baud hızında aç:
1#include <WiFi.h>
2
3const char* ssid = "AgAdi"; // Wi-Fi adın / your Wi-Fi name
4const char* password = "Sifre123"; // Wi-Fi şifren / your Wi-Fi password
5
6void setup() {
7 Serial.begin(115200);
8 WiFi.begin(ssid, password);
9 Serial.print("Bağlanıyor / connecting");
10 while (WiFi.status() != WL_CONNECTED) {
11 delay(500);
12 Serial.print(".");
13 }
14 Serial.println();
15 Serial.print("IP adresi / IP address: ");
16 Serial.println(WiFi.localIP());
17}
18
19void loop() {
20}Telefondan LED kontrolü: basit web sunucu
Şimdi ESP32'yi küçük bir web sunucusuna çevirelim. Kod yüklendikten sonra Seri Monitör'de görünen IP adresini aynı Wi-Fi'ye bağlı telefonunun tarayıcısında aç; sayfadaki iki düğmeyle kartın LED'ini yakıp söndürebilirsin. LED yerine bir röle bağlarsan aynı yöntemle gerçek bir lambayı kontrol edersin; bunun için Röle Modülü Nedir? yazısına bak.
1#include <WiFi.h>
2#include <WebServer.h>
3
4const char* ssid = "AgAdi";
5const char* password = "Sifre123";
6const int LED_PIN = 2;
7
8WebServer server(80);
9
10void handleRoot() {
11 server.send(200, "text/html",
12 "<meta name='viewport' content='width=device-width'>"
13 "<h1>ESP32</h1>"
14 "<a href='/on'><button>LED AÇ / ON</button></a> "
15 "<a href='/off'><button>LED KAPAT / OFF</button></a>");
16}
17
18void setup() {
19 pinMode(LED_PIN, OUTPUT);
20 Serial.begin(115200);
21 WiFi.begin(ssid, password);
22 while (WiFi.status() != WL_CONNECTED) delay(500);
23 Serial.println(WiFi.localIP()); // bu adresi telefonda aç / open this address on your phone
24
25 server.on("/", handleRoot);
26 server.on("/on", []() { digitalWrite(LED_PIN, HIGH); handleRoot(); });
27 server.on("/off", []() { digitalWrite(LED_PIN, LOW); handleRoot(); });
28 server.begin();
29}
30
31void loop() {
32 server.handleClient();
33}ESP32 çeşitleri: hangisini almalısın?
| Model | Öne çıkan özelliği | Ne zaman seçilir? |
|---|---|---|
| ESP32 (WROOM-32 DevKit) | Wi-Fi, Bluetooth Classic ve BLE, çift çekirdek | Genel amaçlı ilk kart |
| ESP32-S3 | Doğrudan USB, daha fazla RAM, yapay zekâ komutları | Kamera, ses, USB klavye ve fare projeleri |
| ESP32-C3 | Tek çekirdek RISC-V, Wi-Fi ve BLE, küçük ve ucuz | Basit IoT sensörleri |
| ESP32-CAM | Kamera ve microSD yuvası | Görüntü aktarımı, güvenlik kamerası |
| ESP8266 (NodeMCU, Wemos D1) | Daha eski, tek çekirdek, yalnızca Wi-Fi | Çok basit Wi-Fi projeleri |
Güç beslemesi ve pil kullanımı
ESP32, Wi-Fi'yi açtığı anlarda kısa süreliğine 250 mA'e kadar akım çekebilir. Zayıf bir USB portu ya da ince bir kablo bu ani yükü karşılayamazsa kart "Brownout detector was triggered" mesajıyla yeniden başlar. Kaliteli bir kablo ve en az 1 A veren 5 V bir adaptör kullan; gerekirse 3V3 ile GND arasına 100–470 µF'lık bir kondansatör ekle. Pil ile çalışacak projelerde ESP32'nin derin uyku modu yonga tüketimini mikroamperlere indirir; ancak geliştirme kartlarındaki regülatör ve LED birkaç mA harcamaya devam eder, bu yüzden uzun pil ömrü için çıplak modül ya da düşük tüketimli kartlar tercih edilir.
MicroPython ile ESP32
ESP32 yalnızca Arduino diliyle değil MicroPython ile de programlanabilir. Thonny programıyla karta MicroPython yükledikten sonra Wi-Fi'ye bağlanmak birkaç satırdır:
1import network, time
2from machine import Pin
3
4led = Pin(2, Pin.OUT)
5wlan = network.WLAN(network.STA_IF)
6wlan.active(True)
7wlan.connect("AgAdi", "Sifre123") # Wi-Fi adı ve şifresi / Wi-Fi name and password
8
9while not wlan.isconnected():
10 time.sleep(0.5)
11print("IP:", wlan.ifconfig()[0])
12
13while True:
14 led.value(not led.value()) # LED'i yakıp söndür / toggle the LED
15 time.sleep(0.5)ESP32 ile proje fikirleri
- Wi-Fi hava istasyonu: DHT11 ile ölçülen sıcaklık ve nemi telefondan izle.
- Akıllı priz: Bir röleyle lambayı web sayfasından ya da sesli asistandan aç.
- Hareket alarmı: PIR sensörü birini algıladığında Telegram'dan bildirim gönder.
- İnternet saati: Saati NTP sunucusundan alıp bir LCD ya da 7 segment ekranda göster.
- Bluetooth kumanda: Telefondaki bir uygulamayla robot arabayı yönet.
- Pil dostu sensör: Her 10 dakikada bir uyanıp ölçüm gönderen, sonra yeniden uyuyan bir cihaz yap.
Sık yapılan hatalar ve çözümleri
- Port görünmüyor: Kablo yalnızca şarj kablosu olabilir ya da USB-seri sürücüsü kurulu değildir; veri kablosu kullan ve CP2102 ya da CH340 sürücüsünü kur.
- "Failed to connect... Timed out waiting for packet header": Yükleme başlarken BOOT düğmesine basılı tut.
- Kart sürekli yeniden başlıyor: Güç yetersiz (brownout); daha iyi kablo, adaptör ve kondansatör kullan.
- Wi-Fi'ye bağlanamıyor: Ağ 5 GHz olabilir ya da ad ve şifrede büyük-küçük harf hatası vardır.
- GPIO 6–11'i kullanmak: Bu pinler flaş belleğe bağlıdır; kullanıldığında kart çöker.
- Wi-Fi açılınca analog değerler bozuluyor: Sensör ADC2 pinine bağlı; GPIO 32–39 arasındaki ADC1 pinlerine taşı.
ESP32, Arduino'da öğrendiklerini internete taşımanın en kolay yoludur. Arduino'nun temellerini tazelemek için Arduino Nedir? yazısına bakabilirsin; BlueGrays uygulamasında ESP32 ile LED, web sunucu, WebSocket, NTP saat, hava durumu ve Telegram alarmı gibi onlarca projeyi devre şemaları ve kodlarıyla bulabilirsin.
Sıkça sorulan sorular
ESP32 bir Arduino mu?
Hayır. ESP32, Espressif'in ürettiği ayrı bir mikrodenetleyicidir; Arduino ise kart ve yazılım ekosisteminin adıdır. Ancak Espressif'in sağladığı paket sayesinde ESP32, Arduino IDE ile ve Arduino komutlarıyla programlanabilir; bu yüzden Arduino kodlarının çoğu küçük değişikliklerle ESP32'de çalışır.
ESP32 5 V ile çalışır mı?
Geliştirme kartı USB'den ya da VIN pininden 5 V ile beslenebilir; kart üzerindeki regülatör bunu 3,3 V'a düşürür. Ancak GPIO pinleri 3,3 V ile çalışır ve 5 V'a dayanıklı değildir; 5 V sinyalleri doğrudan pinlere bağlamamalısın.
ESP32 mi Arduino Uno mu almalıyım?
Wi-Fi, Bluetooth ya da internet gerektiren projeler için ESP32 al. Elektroniğe yeni başlıyorsan, 5 V'luk sensör ve modüllerle sorunsuz çalışmak ve kaynaklardaki örnekleri birebir takip etmek istiyorsan Arduino Uno daha az sürprizle başlamanı sağlar.
ESP32 5 GHz Wi-Fi'ye bağlanır mı?
Klasik ESP32, ESP32-S3 ve ESP32-C3 yalnızca 2,4 GHz Wi-Fi destekler ve 5 GHz ağlarını göremez. Modeminin 2,4 GHz bandının açık olduğundan emin ol.
ESP32 ile ESP8266 arasındaki fark nedir?
ESP8266 daha eski, tek çekirdekli ve yalnızca Wi-Fi destekleyen bir yongadır; tek analog girişi vardır. ESP32 ise çift çekirdekli, daha hızlıdır, Bluetooth'u da destekler ve çok daha fazla pine, ADC kanalına ve belleğe sahiptir. Yeni projelerde ESP32 tercih edilir.
ESP32 internet olmadan kullanılabilir mi?
Evet. ESP32 kendi Wi-Fi ağını kurabilir (erişim noktası modu), birden fazla ESP32 ESP-NOW ile modem olmadan haberleşebilir ve Bluetooth ile telefona bağlanabilir. Kablosuz özellikleri hiç kullanmadan güçlü bir Arduino gibi de çalıştırılabilir.
Bu yazıdan sonra yapabileceğin projeler
Tüm projeleri gör
ESP32 ile LED Yakma
ESP32 ile temel GPIO çıkışı kullanımını öğretir. Bir LED'i dijital pinden açıp kapatarak yanıp sönme efekti elde ederiz. Arduino UNO'daki klasik blink projesinin ESP32 versiyonu; pin haritası ve syntax aynı kalır, fark sadece pin numaralarında.

ESP32 Wi-Fi STA Bağlantısı (LCD Ekranlı)
Bu projede ESP32'yi Station (STA) modunda evdeki Wi-Fi ağına güvenli ve hata toleranslı şekilde bağlıyoruz. SSID/şifreyi `secrets.h` dosyasına ayırarak Git'e sızmasını önlüyor, otomatik yeniden bağlanma mekanizması kuruyor, RSSI sinyal seviyesini ve IP adresini I2C LCD ekranda gösteriyoruz. Dahili LED durum göstergesi olarak çalışır. Üretim seviyesi bir bağlantı yöneticisidir.

ESP32 Async Web Server (LCD'de IP Göstergeli)
Bu projede ESP32'yi aynı Wi-Fi ağındaki telefonunuzdan veya bilgisayarınızdan kontrol edebileceğiniz **asenkron bir web sunucusuna** dönüştürüyoruz. ESPAsyncWebServer kütüphanesi sayesinde sunucu birden fazla isteği aynı anda işleyebiliyor (klasik `WebServer.h` gibi tek istekte bloklamıyor). Tarayıcıdan ESP32'nin IP adresine `/control` ile bağlanıp butonlara basarak GPIO 5'e bağlı LED'i açıp kapatabileceksiniz. HTML arayüzü `PROGMEM` ile flash belleğe gömülü olduğundan ayrıca dosya sistemi gerek

ESP32 WebSocket Sayaç (2 Buton + LCD + Web Realtime)
Bu projede ESP32, ESPAsyncWebServer'ın WebSocket desteğini kullanarak DHT11 sensöründen okuduğu sıcaklık ve nem değerlerini bağlı tüm tarayıcılara gerçek zamanlı olarak push eder. Standart HTTP polling yerine tek bir kalıcı TCP bağlantısı üzerinden çift yönlü iletişim sağlanır, böylece gecikme milisaniyeler seviyesine iner. Tarayıcı tarafında saf JavaScript ile Chart.js kullanılarak canlı çizgi grafik çizilir; veri formatı JSON paketi olarak iletilir. LittleFS'e gömülü HTML/JS sayesinde aynı ESP

ESP32 HTTPClient + Hava Durumu API (LCD Ekranlı)
Bu projede ESP32 ile internet üzerinden hava durumu API'sine (wttr.in) `HTTPClient.h` kullanarak REST API çağrısı yapıyoruz. ArduinoJson v7 ile dönen JSON cevabını parse edip şehir, sıcaklık, nem, hava durumu ve rüzgar bilgilerini I2C LCD ekranda hem Türkçe hem İngilizce gösteriyoruz. wttr.in ücretsizdir, API key gerektirmez — herhangi bir şehir ismini yazarak o şehrin anlık hava durumunu çekebilirsiniz. 30 dakikada bir otomatik güncelleme, LED ile her ekran için farklı görsel feedback ve eksiks

ESP32 NTP ile İnternetten Gerçek Zaman
ESP32, Wi-Fi'a bağlanıp NTP (Network Time Protocol) sunucularından milisaniye hassasiyetiyle gerçek zamanı çeker. `configTzTime()` fonksiyonu sayesinde Türkiye saat dilimi (TRT, UTC+3) otomatik uygulanır ve yaz/kış saati uygulayan ülkelerde DST geçişi POSIX TZ string'i ile otomatik yönetilir. Saat hem Serial Monitor'e hem de opsiyonel I2C LCD'ye yazdırılır. Açılışta bir kere senkronize edilir, sonra dahili RTC saymaya devam eder.

ESP32 PIR Hareket Sensörü ile Otomatik Aydınlatma
Bu projede HC-SR501 PIR hareket sensörü ile odaya giren kişiyi algılayıp LED'i otomatik olarak yakacağız. Hareket algılandığında LED belirli bir süre yanacak ve `millis()` fonksiyonu ile sayaç sayesinde `delay()` kullanmadan zamanı yöneteceğiz. Bu sayede ESP32 bloklanmadan, başka işler de yapabilen bir hareket sensörlü aydınlatma sistemi elde edeceğiz. Gerçek hayatta merdiven, koridor, banyo veya dolap içi aydınlatmalarda kullanılabilir.

ESP32 Hareket Alarm Sistemi (PIR + Buzzer + LED + Telegram)
PIR sensörü hareket algıladığında buzzer ve LED'i aktif eden, aynı anda Telegram üzerinden sahibine anlık bildirim gönderen akıllı bir güvenlik alarm sistemidir. Yanlış alarmları önlemek için 30 saniyelik cooldown (bekleme süresi) mekanizması vardır. Ev güvenliği, garaj izleme, depo veya çalışma odası gibi alanlarda kullanılabilir. Telegram entegrasyonu sayesinde nerede olursanız olun anında haberdar olursunuz. ESP32-CAM kullanılırsa fotoğraflı bildirim eklenebilir, klasik ESP32 DevKit V1 ile me
Diğer yazılar
ESP32'nin Arduino'dan farklarını, hangi pinlerin güvenle kullanılabileceğini, Arduino IDE kurulumunu ve telefondan LED yakan ilk Wi-Fi projeni adım adım öğren.

