“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:
| Özellik | Arduino Uno | ESP32-WROOM |
|---|---|---|
| İşlemci | 8-bit AVR, 16 MHz | 32-bit çift çekirdek, 240 MHz |
| SRAM | 2 KB | 520 KB |
| Flash | 32 KB | 4 MB (tipik) |
| Mantık seviyesi | 5 V | 3,3 V |
| Dijital G/Ç | 14 | ~34 (bazıları kısıtlı) |
| ADC | 6 kanal, 10 bit, doğrusal | 18 kanal, 12 bit, doğrusal değil |
| DAC | Yok | 2 kanal, 8 bit |
| PWM | 6 pin | 16 kanal, her pine atanabilir |
| Wi-Fi / Bluetooth | Yok | Var (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.
| Çip | Mimari | Öne çıkan | Ne zaman seçilir |
|---|---|---|---|
| ESP32 (klasik) | Xtensa, çift çekirdek | Wi-Fi + BLE, bol analog giriş | Varsayılan tercih; en çok örnek ve kütüphane |
| ESP32-S2 | Xtensa, tek çekirdek | USB OTG, gelişmiş dokunmatik | Bluetooth yok — dar bir niş |
| ESP32-S3 | Xtensa, çift çekirdek | Vektör komutları (AI/ML), USB OTG, PSRAM | Kamera, ses, kenar yapay zeka |
| ESP32-C3 | RISC-V, tek çekirdek | Ucuz, düşük güç, Wi-Fi + BLE 5 | ESP8266’ın modern yerini alan seçenek |
| ESP32-C6 | RISC-V | Wi-Fi 6, BLE 5, Zigbee / Thread | Akıllı ev, Matter uyumlu cihazlar |
| ESP32-H2 | RISC-V | Zigbee / Thread, Wi-Fi yok | Sadece 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.
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.
| Arduino | MicroPython | ESP-IDF | |
|---|---|---|---|
| Öğrenme eğrisi | Çok kolay | Kolay | Dik |
| Çalışma hızı | Hızlı | Yavaş | En hızlı |
| Zamanlama kesinliği | İyi | Zayıf | En iyi |
| Deneme döngüsü | Derleme + yükleme | Dosya kopyala | Derleme + yükleme |
| Donanıma erişim | Kısıtlı | Kısıtlı | Tam |
| Robot kontrolü için | Uygun | Önerilmez | Uygun (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.
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.
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 | Önerilen | Sebep |
|---|---|---|
| Öğrenme, ilk devreler | Arduino Uno | En çok örnek, en az sürpriz |
| Çizgi izleyen robot | Arduino Nano | Hızlı ve öngörülebilir analog okuma |
| Mini sumo robot | Her ikisi de | ESP32 canlı ayar avantajı sağlar |
| Uzaktan kontrollü araç | ESP32 | Wi-Fi/BLE dahili |
| Veri kaydedici (IoT) | ESP32 | Ağ + bellek + derin uyku |
| Röle ve 5 V modül ağırlıklı otomasyon | Arduino Uno | Seviye çevirici derdi yok |
| Pille çalışan uzun ömürlü sensör | ESP32 | 10 µA derin uyku |
| Görüntü işleme | Hiçbiri | Raspberry 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.
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.
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
0Henüz yorum yok. İlk yorumu sen yaz!