Kerem Öz

ESP32 mi Arduino mu? Projene Göre Doğru Kartı Seçme Rehberi

ESP32 ve Arduino karşılaştırması: işlemci gücü, pin sayısı, ADC kalitesi, Wi-Fi ve Bluetooth, güç tüketimi, 3,3 V–5 V uyumu ve hangi projede hangisinin doğru seçim olduğu.

ESP32 mi Arduino mu? Projene Göre Doğru Kartı Seçme Rehberi
Şek. 1 ESP32 mi Arduino mu? Projene Göre Doğru Kartı Seçme Rehberi

“ESP32 mi alsam Arduino mu?” sorusunun tek bir doğru cevabı yok, çünkü ikisi farklı sorunları çözüyor. ESP32 kâğıt üzerinde her açıdan üstün görünüyor — daha hızlı, daha ucuz, Wi-Fi dahili — ama pratikte Arduino’nun hâlâ daha iyi olduğu durumlar var.

Bu yazıda iki kartı gerçek kullanım açısından karşılaştırıyorum: hangi projede hangisi daha az sorun çıkarır, hangi tuzaklar var ve geçiş yaparken nelere dikkat etmek gerekir.

Teknik karşılaştırma

Önce sayılara bakalım. Karşılaştırma Arduino Uno R3 (ATmega328P) ile yaygın ESP32-WROOM-32 modülü arasında:

ÖzellikArduino UnoESP32-WROOM
İşlemci8-bit AVR, 16 MHz32-bit çift çekirdek, 240 MHz
SRAM2 KB520 KB
Flash32 KB4 MB (tipik)
Mantık seviyesi5 V3,3 V
Dijital G/Ç14~34 (bazıları kısıtlı)
ADC6 kanal, 10 bit, doğrusal18 kanal, 12 bit, doğrusal değil
DACYok2 kanal, 8 bit
PWM6 pin16 kanal, her pine atanabilir
Wi-Fi / BluetoothYokVar (802.11 b/g/n + BLE)
Aktif tüketim~45 mA~80–260 mA (Wi-Fi ile)
Derin uyku~35 µA~10 µA

Ham güç farkı çarpıcı: ESP32 yaklaşık 15 kat hızlı ve 260 kat daha fazla RAM’e sahip. Peki bu neden her projede otomatik tercih anlamına gelmiyor?

“ESP32” artık tek bir çip değil, bir aile

Yukarıdaki karşılaştırma klasik ESP32-WROOM-32 modülünü esas alıyor. Ama 2016’dan bu yana Espressif ailesini genişletti ve bugün “ESP32 aldım” cümlesi tek başına pek bir şey ifade etmiyor. Hangi çip olduğu, projenizi doğrudan etkiliyor.

En önemli kırılma noktası mimari: klasik ESP32 ve S serisi Xtensa çekirdek kullanırken, C serisi RISC-V’ye geçti. Kullanıcı açısından bu fark çoğu zaman görünmez (Arduino kodunuz ikisinde de derlenir) ama fiyat ve güç tüketimini değiştirdi.

ÇipMimariÖne çıkanNe zaman seçilir
ESP32 (klasik)Xtensa, çift çekirdekWi-Fi + BLE, bol analog girişVarsayılan tercih; en çok örnek ve kütüphane
ESP32-S2Xtensa, tek çekirdekUSB OTG, gelişmiş dokunmatikBluetooth yok — dar bir niş
ESP32-S3Xtensa, çift çekirdekVektör komutları (AI/ML), USB OTG, PSRAMKamera, ses, kenar yapay zeka
ESP32-C3RISC-V, tek çekirdekUcuz, düşük güç, Wi-Fi + BLE 5ESP8266’ın modern yerini alan seçenek
ESP32-C6RISC-VWi-Fi 6, BLE 5, Zigbee / ThreadAkıllı ev, Matter uyumlu cihazlar
ESP32-H2RISC-VZigbee / Thread, Wi-Fi yokSadece mesh ağ düğümü olacaksa

Pratikte bu ne anlama geliyor

  • S3, vektör komutları sayesinde görüntü ve ses işlemede klasik ESP32’den belirgin şekilde hızlı. Küçük bir kamerayla nesne tanıma yapacaksanız aradığınız çip bu. Yine de Raspberry Pi seviyesinde bir görüntü işleme beklemeyin.
  • C3, robot projelerinde “bu işi yapacak en ucuz Wi-Fi’lı kart” olarak çok mantıklı. Tek çekirdek olduğu için ağ trafiği ile kontrol döngüsünü ayıramazsınız — kritik zamanlama varsa klasik ESP32’de kalın.
  • C6’daki Zigbee/Thread desteği robotikten çok akıllı ev tarafına bakıyor. Matter uyumlu bir cihaz yapacaksanız doğru adres.
  • S2’de Bluetooth olmaması sık yaşanan bir sürpriz. “ESP32 aldım ama BLE çalışmıyor” şikâyetlerinin çoğu S2 kartından çıkıyor.
Etkileşimli kart seçici — bu bölüm JavaScript ile çalışır.
Dikkat

Kart satın alırken ürün adındaki son eki okuyun. “ESP32 DevKit” yazan bir ilan klasik ESP32, S3 veya C3 olabilir ve üçü de farklı pin dizilimine sahiptir. Projenizin şemasını bir çipe göre çizdikten sonra başka bir çip gelirse, pin numaralarının hepsi değişir.

Programlama dili: Arduino’dan geniş bir ekosistem

Arduino Uno pratikte tek bir yolla programlanır: Arduino IDE ve C/C++. ESP32’nin donanım gücü ise birden fazla ortamı mümkün kılıyor ve bu, projeye göre ciddi zaman kazandırabiliyor.

1. Arduino çekirdeği (C/C++)

En bilinen yol. setup() / loop() yapısı aynen çalışır, Arduino kütüphanelerinin büyük kısmı uyumludur. Öğrenme maliyeti sıfır. Karşılığında, çipin bazı düşük seviyeli yeteneklerine (özel uyku modları, hassas zamanlayıcılar, RMT çevre birimi) erişemezsiniz.

2. MicroPython / CircuitPython

ESP32 üzerinde doğrudan Python çalıştırabilirsiniz. Kartı bir kez bellenim ile hazırlarsınız, sonrasında .py dosyasını kopyalamanız yeterli — derleme yok, yükleme beklemesi yok.

# MicroPython — Wi-Fi'a bağlan ve sensör oku
import network, machine, time

wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect('AgAdi', 'sifre')

while not wlan.isconnected():
    time.sleep(0.2)
print('IP:', wlan.ifconfig()[0])

adc = machine.ADC(machine.Pin(34))
adc.atten(machine.ADC.ATTN_11DB)

while True:
    print(adc.read())
    time.sleep(1)

Ne zaman mantıklı: IoT prototipleri, sensör okuyup veri gönderen projeler, hızlı deneme. Kod yazıp saniyeler içinde sonucu görmek, C++ derleme döngüsüne göre çok daha akıcı.

Ne zaman kaçının: Yorumlanan bir dil olduğu için C++’tan belirgin şekilde yavaştır ve zamanlaması öngörülemez. Motor kontrol döngüsü veya PID gibi sabit periyot isteyen işleri MicroPython’a bırakmayın.

3. ESP-IDF (resmî SDK)

Espressif’in kendi C tabanlı geliştirme çatısı. Arduino katmanını aradan çıkarır ve çipin tamamına erişim verir: FreeRTOS görev yönetimi, ayrıntılı güç profilleri, donanım hızlandırmalı şifreleme, kablosuz güncelleme altyapısı, bölümlendirilmiş flash.

ArduinoMicroPythonESP-IDF
Öğrenme eğrisiÇok kolayKolayDik
Çalışma hızıHızlıYavaşEn hızlı
Zamanlama kesinliğiİyiZayıfEn iyi
Deneme döngüsüDerleme + yüklemeDosya kopyalaDerleme + yükleme
Donanıma erişimKısıtlıKısıtlıTam
Robot kontrolü içinUygunÖnerilmezUygun (fazlası)

Pratik öneri: robot projelerinde Arduino çekirdeğinde kalın. IoT ve sensör projelerinde MicroPython’u deneyin. ESP-IDF’e ancak Arduino katmanı bir şeyi yapmanıza engel olduğunda geçin — o zaman da zaten neye ihtiyacınız olduğunu biliyor olursunuz.

Arduino’nun hâlâ kazandığı yerler

1. Beş volt dünyası

Piyasadaki sensörlerin, röle kartlarının ve LCD modüllerinin büyük kısmı 5 V mantık seviyesiyle çalışır. Arduino Uno bunları doğrudan sürer. ESP32’de her 5 V modül için seviye çevirici veya gerilim bölücü eklemeniz gerekir.

Bu, kağıt üzerinde küçük bir ayrıntı gibi görünür ama devre karmaşıklığını, lehim noktası sayısını ve hata olasılığını artırır. Beş sensörlü bir projede beş adet ek devre demek.

Dikkat

ESP32’nin GPIO pinleri 5 V toleranslı değildir. HC-SR04 gibi 5 V ile çalışan bir sensörün Echo çıkışını doğrudan ESP32’ye bağlamak yaygın bir hatadır; pin zamanla veya anında bozulur. Basit bir gerilim bölücü (1 kΩ + 2 kΩ) bu sorunu çözer.

2. Analog okuma kalitesi

ESP32’nin dahili ADC’si 12 bit çözünürlük sunar ama doğrusallığı zayıftır. Uçlarda ciddi sapma yapar ve Wi-Fi aktifken ADC2 kanalları kullanılamaz hale gelir.

Arduino’nun 10 bitlik ADC’si daha düşük çözünürlüklü ama öngörülebilir. Potansiyometre, sensör dizisi veya gerilim ölçümü gibi işlerde bu öngörülebilirlik çözünürlükten değerlidir.

Analog sensörlerle yoğun çalışan bir çizgi izleyen robotta bu fark doğrudan hissedilir; sekiz kanalı sürekli ve hızlı okumak gerekiyorsa Arduino tarafı daha az sürpriz üretir.

3. Dayanıklılık ve basitlik

Arduino Uno üzerindeki çip DIP soketli olabilir — yaktığınızda 30 TL’lik çipi değiştirirsiniz, kartı atmazsınız. ESP32 modülü lehimlidir; bozulduğunda kart gider.

Ayrıca Arduino’da bootloader, güç yönetimi ve pin kısıtlaması gibi konularla uğraşmazsınız. ESP32’de “bu pin neden çalışmıyor?” sorusu çok daha sık sorulur.

ESP32’nin açık ara kazandığı yerler

1. Kablosuz bağlantı

Wi-Fi ve Bluetooth’un dahili olması, harici modül eklemenin ötesinde bir kolaylık. ESP32 ile:

  • Robotunuzu telefondan kontrol edebilirsiniz.
  • Sensör verisini canlı olarak bir sunucuya gönderebilirsiniz.
  • Kartın kendisi bir web sunucusu olarak çalışıp ayar arayüzü sunabilir.
  • Kablosuz kod yükleme (OTA) yapabilirsiniz.

Robotik yarışmalarda PID katsayılarını telefondan canlı değiştirebilmek, saatlerce süren ayar sürecini dakikalara indirir. Bu tek başına ESP32’yi tercih etmek için yeterli bir sebep olabilir.

2. İşlem gücü ve bellek

2 KB RAM ile çalışmak, bir noktada duvara toslamak demektir. Bir dizi tanımlarsınız ve kart açıklanamayan şekilde yeniden başlar. ESP32’de bu sınırı zorlamak çok daha zordur.

Çift çekirdek olması da önemli: bir çekirdeği kontrol döngüsüne, diğerini Wi-Fi ve iletişime ayırabilirsiniz. Böylece ağ trafiği motor kontrolünü aksatmaz.

ESP32 geliştirme kartı ve Arduino Uno kartı yan yana bir çalışma masasında
Şek. 2 — Aynı işi yapan iki kart, çok farklı iki tasarım felsefesi: biri sadelik, diğeri kapasite.

3. PWM esnekliği

Arduino’da PWM sadece belirli 6 pinde ve zamanlayıcılara bağlıdır; frekansı değiştirmek zamanlayıcı kayıtlarına dokunmayı gerektirir. ESP32’de 16 bağımsız PWM kanalı vardır, herhangi bir pine atanabilir ve frekans ile çözünürlük tek satırla ayarlanır:

// ESP32: 20 kHz frekans, 10 bit çözünürlük
ledcSetup(0, 20000, 10);
ledcAttachPin(MOTOR_PIN, 0);
ledcWrite(0, 512);        // %50 doluluk

Motor sürerken 20 kHz gibi duyulamayan bir frekans seçebilmek, motor uğultusunu tamamen ortadan kaldırır. Bu, motor sürücü seçiminde gözden kaçan ama fark yaratan bir ayrıntı.

Hangi projede hangisi

ProjeÖnerilenSebep
Öğrenme, ilk devrelerArduino UnoEn çok örnek, en az sürpriz
Çizgi izleyen robotArduino NanoHızlı ve öngörülebilir analog okuma
Mini sumo robotHer ikisi deESP32 canlı ayar avantajı sağlar
Uzaktan kontrollü araçESP32Wi-Fi/BLE dahili
Veri kaydedici (IoT)ESP32Ağ + bellek + derin uyku
Röle ve 5 V modül ağırlıklı otomasyonArduino UnoSeviye çevirici derdi yok
Pille çalışan uzun ömürlü sensörESP3210 µA derin uyku
Görüntü işlemeHiçbiriRaspberry Pi gerekir

ESP32’ye geçerken dikkat edilecekler

Arduino’dan ESP32’ye geçiyorsanız, kodunuzun aynen çalışmasını beklemeyin. Şu noktalar farklı:

Kısıtlı pinler

ESP32’de her pin serbestçe kullanılamaz:

  • GPIO 6–11: Dahili flash belleğe bağlı. Kullanmayın.
  • GPIO 34–39: Sadece giriş. Çıkış veremez, dahili pull-up yok.
  • GPIO 0, 2, 12, 15: Açılışta önyükleme modunu belirler. Bunlara bağlı devreler kartın açılmasını engelleyebilir.
  • ADC2 kanalları: Wi-Fi açıkken kullanılamaz.

Bu liste, ESP32’de “kod doğru ama çalışmıyor” vakalarının çoğunu açıklar.

analogWrite yok

ESP32 çekirdeğinin eski sürümlerinde analogWrite() bulunmaz; yerine ledcWrite() kullanılır. Yeni sürümlerde uyumluluk katmanı eklendi ama kontrol için doğrudan LEDC kullanmak daha sağlıklı.

Beslemeye dikkat

ESP32 Wi-Fi ile veri gönderirken anlık olarak 500 mA’e yakın akım çekebilir. USB portundan ya da zayıf bir regülatörden beslerseniz kart sürekli yeniden başlar — ve bunu genelde “kod hatası” sanırsınız.

Saha notu

ESP32 açıklanamayan şekilde yeniden başlıyorsa önce güç kaynağına bakın. Besleme pinleri arasına 470–1000 µF elektrolitik kondansatör koymak, Wi-Fi anındaki akım sıçramasını karşılayıp sorunu çoğu zaman tamamen çözer.

Uygulama: telefondan canlı PID ayarı

ESP32’nin robotikteki en somut faydası bu. Kartı bir web sunucusuna dönüştürüp katsayıları telefondan değiştirebilirsiniz — her denemede USB kablosu takıp kod yüklemeye son.

#include <WiFi.h>
#include <WebServer.h>

WebServer sunucu(80);
float Kp = 0.08, Ki = 0.0, Kd = 1.2;

void ayarSayfasi() {
  String h = "<meta name=viewport content='width=device-width'>"
             "<form action=/kaydet>"
             "Kp <input name=p value=" + String(Kp, 4) + "><br>"
             "Ki <input name=i value=" + String(Ki, 4) + "><br>"
             "Kd <input name=d value=" + String(Kd, 4) + "><br>"
             "<button>Kaydet</button></form>";
  sunucu.send(200, "text/html", h);
}

void kaydet() {
  if (sunucu.hasArg("p")) Kp = sunucu.arg("p").toFloat();
  if (sunucu.hasArg("i")) Ki = sunucu.arg("i").toFloat();
  if (sunucu.hasArg("d")) Kd = sunucu.arg("d").toFloat();
  sunucu.sendHeader("Location", "/");
  sunucu.send(303);
}

void setup() {
  WiFi.softAP("Robot-Ayar", "12345678");   // kendi ağını kurar, router gerekmez
  sunucu.on("/", ayarSayfasi);
  sunucu.on("/kaydet", kaydet);
  sunucu.begin();
}

softAP kullanmak önemli: robot kendi Wi-Fi ağını kurar, yarışma alanındaki kalabalık ağa bağlanmaya çalışmaz. Telefonunuzdan “Robot-Ayar” ağına bağlanıp tarayıcıda 192.168.4.1 adresine giderek katsayıları değiştirirsiniz.

Katsayıların ne anlama geldiği ve hangi sırayla ayarlanacağı için PID rehberine bakın.

Dikkat

Web sunucusunu kontrol döngüsüyle aynı çekirdekte çalıştırmayın. sunucu.handleClient() çağrısı bazen milisaniyelerce bloklar ve motor kontrolünüz aksar. ESP32’de kontrol döngüsünü ayrı bir göreve atayıp çekirdek 1’e sabitleyin.

Derin uyku ve pil ömrü

Pille çalışan sensör projelerinde ESP32’nin asıl kozu derin uyku modudur. Kart 10 µA seviyesine iner, belirlenen sürede uyanır, ölçüm yapar, veriyi gönderir ve tekrar uyur.

#define UYKU_SURESI 600        // saniye = 10 dakika

void setup() {
  olcumYapVeGonder();
  esp_sleep_enable_timer_wakeup(UYKU_SURESI * 1000000ULL);
  esp_deep_sleep_start();      // buradan sonrası çalışmaz, setup baştan başlar
}

void loop() { }                // derin uykuda loop kullanılmaz

Kaba bir hesap: 2000 mAh’lik bir pil, sürekli çalışan bir ESP32’yi yaklaşık 10 saat besler. Aynı pil, 10 dakikada bir 5 saniye uyanan bir düzende aylarca dayanır.

Derin uykuda RAM içeriği kaybolur; saklamanız gereken değerleri RTC_DATA_ATTR ile işaretleyin:

RTC_DATA_ATTR int uyanmaSayisi = 0;   // derin uykuyu atlatır

Peki hangisini almalı

Pratik cevap: ikisini de alın. Toplam maliyet bir akşam yemeği kadar ve elinizde iki farklı araç olur.

Ama tek kart alacaksanız:

  • Elektroniğe yeni başlıyorsanız: Arduino Uno. Öğrenme eğrisi yumuşak, hata toleransı yüksek, kaynak sonsuz. Arduino başlangıç rehberi ile 30 günde temeli kurabilirsiniz.
  • Temeliniz varsa ve proje kablosuz bağlantı içeriyorsa: ESP32. Geri dönmezsiniz.

Kart seçimi, projenin en az önemli kararlarından biridir aslında. Sensör seçiminiz, güç sisteminiz ve kontrol algoritmanız sonucu çok daha fazla belirler. Sensör rehberi ve LiPo pil rehberi, bu iki tarafı derinlemesine ele alıyor.

Sıkça Sorulan Sorular

ESP32 Arduino’nun yerini alır mı?

Çoğu projede evet — daha hızlı, daha çok belleği var ve Wi-Fi/Bluetooth dahili. Ancak 5 V mantık seviyesi gerektiren devrelerde, çok sayıda analog giriş gerektiren hassas ölçümlerde ve gerçekten basit projelerde Arduino Uno hâlâ daha pratik ve daha dayanıklıdır.

ESP32 Arduino IDE ile programlanabilir mi?

Evet. Arduino IDE’ye Kart Yöneticisi’nden ESP32 desteğini ekledikten sonra aynı setup()/loop() yapısıyla programlarsınız. Arduino kütüphanelerinin büyük kısmı doğrudan çalışır; donanıma özel olanlar (ör. AVR zamanlayıcı kütüphaneleri) çalışmaz.

ESP32 5 volt ile çalışır mı?

Kartın VIN pini 5 V kabul eder ama GPIO pinleri sadece 3,3 V toleranslıdır. 5 V çıkışlı bir sensörü doğrudan bir GPIO’ya bağlarsanız pini kalıcı olarak bozabilirsiniz. Gerilim bölücü veya seviye çevirici (level shifter) kullanın.

ESP32’nin ADC’si neden kötü?

ESP32’nin dahili ADC’si doğrusal değildir ve özellikle 0,1 V altı ile 3,1 V üstü bölgelerde belirgin sapma gösterir. Ayrıca Wi-Fi aktifken ADC2 kanalları kullanılamaz. Hassas analog ölçüm için harici bir ADC (ADS1115 gibi) kullanmak en sağlam çözümdür.

Robot projeleri için hangisi daha uygun?

Kablosuz kontrol, telemetri veya birden fazla işi aynı anda yapmak gerekiyorsa ESP32. Saf çizgi izleyen veya mini sumo gibi tek görevli, yüksek hızlı analog okuma yapan robotlarda Arduino Nano/Uno hâlâ çok sağlam bir seçim.

ESP32-S3 ile ESP32-C3 arasındaki fark nedir?

S3 Xtensa mimarili, çift çekirdekli ve vektör komutları sayesinde kamera/ses gibi yapay zeka işlerinde güçlüdür. C3 ise RISC-V mimarili, tek çekirdekli, çok daha ucuz ve düşük güç tüketimlidir; ESP8266’ın modern yerini alır. Kısaca: ağır işlem için S3, ucuz ve basit Wi-Fi bağlantısı için C3.

ESP32 ile Python kullanabilir miyim?

Evet. MicroPython veya CircuitPython bellenimini yükledikten sonra karta doğrudan .py dosyası kopyalayarak çalıştırırsınız — derleme beklemesi olmaz. IoT ve sensör projeleri için çok hızlı bir yol. Ancak yorumlanan bir dil olduğu için motor kontrolü ve PID gibi sabit zamanlama isteyen işlerde C/C++ tercih edin.

ESP-IDF kullanmak zorunda mıyım?

Hayır. Robot ve hobi projelerinin neredeyse tamamı Arduino çekirdeğiyle yazılabilir. ESP-IDF’e ancak özel uyku modları, hassas donanım zamanlayıcıları, FreeRTOS görev yönetimi veya kablosuz güncelleme altyapısı gibi Arduino katmanının açmadığı yetenekler gerektiğinde geçin.

Yorumlar

0

Henüz yorum yok. İlk yorumu sen yaz!

Yorum Yaz

E-posta adresiniz yayınlanmaz, sadece site sahibi görebilir.