Skip to Content
ESP ve IoTESP32 Nedir?

ESP32 Nedir?

ESP32, ESP8266’nın halefidir ve hobi elektroniğinde bulabileceğiniz en güçlü mikrodenetleyicilerden biridir. Wi-Fi’ye ek olarak Bluetooth taşır, çift çekirdeklidir ve çok daha fazla çevre birimi sunar.

Arduino IDE ile programlanır; Arduino kodlarının çoğu küçük değişikliklerle çalışır.

Teknik Özellikler

ÖzellikDeğer
İşlemciXtensa LX6 çift çekirdek, 240 MHz
Flash bellek4 MB (tipik)
SRAM520 KB
Wi-Fi802.11 b/g/n, 2,4 GHz
BluetoothClassic + BLE 4.2
Lojik seviye3,3 V
GPIO~34 (hepsi kullanılabilir değil)
ADC18 kanal, 12 bit (0–4095)
DAC2 kanal (GPIO25, GPIO26)
Dokunmatik sensör10 kanal
PWM (LEDC)16 kanal
Donanımsal seri port3
Hall sensörüDahili

Arduino Uno ve ESP8266 ile Karşılaştırma

UnoESP8266ESP32
Hız16 MHz80–160 MHz240 MHz
Çekirdek112
RAM2 KB80 KB520 KB
Wi-Fi
Bluetooth
Analog giriş6118
DAC2
Lojik5 V3,3 V3,3 V

ESP8266’ya göre en belirgin kazanımlar: Bluetooth, 18 analog giriş ve çift çekirdek.

Pin Haritası ve Tuzaklar

ESP32’de pin isimleri doğrudan GPIO numaralarıdır — NodeMCU’daki D1/D2 karışıklığı yoktur. Ancak bazı pinlerin özel kısıtları vardır.

Kullanılamayan pinler

GPIOSorun
6, 7, 8, 9, 10, 11Dahili SPI flash belleğe bağlı — kesinlikle kullanmayın

Sadece giriş olan pinler

GPIONot
34, 35, 36 (VP), 39 (VN)Yalnızca giriş; çıkış veremez, dahili pull-up/pull-down yok

Bu dört pin analog sensörler için idealdir ama buraya LED bağlayamazsınız.

Boot (strapping) pinleri

GPIOKısıt
0Açılışta LOW olursa flash moduna girer (BOOT butonu)
2Açılışta LOW olmalı (bazı kartlarda dahili LED)
12Açılışta HIGH olursa kart başlamayabilir
15Açılışta LOW olmalı

Röle veya pull-up dirençli bir modül bağlayacaksanız bu pinlerden kaçının.

Güvenli genel amaçlı pinler

GPIO 4, 5, 13, 14, 16, 17, 18, 19, 21, 22, 23, 25, 26, 27, 32, 33

Bu pinler hem giriş hem çıkış olarak sorunsuz kullanılabilir.

Varsayılan protokol pinleri

ProtokolPinler
I2CSDA = GPIO21, SCL = GPIO22
SPI (VSPI)MOSI 23, MISO 19, SCK 18, SS 5
UART0TX 1, RX 3 (USB’ye bağlı)
UART2TX 17, RX 16

I2C pinleri değiştirilebilir:

Wire.begin(SDA_PIN, SCL_PIN);

ADC Kısıtları — Bilinmesi Şart

ESP32’nin 18 analog girişi vardır ama iki önemli sorunu vardır.

1. ADC2, Wi-Fi ile çakışır

ADC kanalları ikiye ayrılır:

  • ADC1: GPIO 32–39 → her zaman çalışır
  • ADC2: GPIO 0, 2, 4, 12–15, 25–27 → Wi-Fi açıkken kullanılamaz

Wi-Fi kullanan bir projede analog okuma yapacaksanız mutlaka ADC1 pinlerini (32–39) kullanın. ADC2’den okumaya çalışırsanız fonksiyon hata döndürür veya rastgele değer verir.

2. Doğrusal değildir

ESP32’nin ADC’si özellikle uçlarda doğrusal değildir. 0,1 V’un altında ve 3,1 V’un üzerinde okuma sıkışır.

Hassas ölçüm gerekiyorsa:

  • Ölçüm aralığını 0,15 – 2,45 V arasında tutun
  • Kalibrasyon tablosu kullanın
  • Veya harici bir ADC (ADS1115) tercih edin
const int SENSOR_PIN = 34; // ADC1, sadece giris void setup() { Serial.begin(115200); analogReadResolution(12); // 0 - 4095 analogSetAttenuation(ADC_11db); // 0 - ~3.3 V araligi } void loop() { int ham = analogRead(SENSOR_PIN); float volt = ham * (3.3 / 4095.0); Serial.print(ham); Serial.print(" "); Serial.print(volt, 3); Serial.println(" V"); delay(500); }

PWM (LEDC)

ESP32’de analogWrite() yerine LEDC birimi kullanılır. Frekans ve çözünürlük ayarlanabilir olduğu için Arduino’dan daha esnektir.

const int LED_PIN = 5; const int KANAL = 0; const int FREKANS = 5000; const int COZUNURLUK = 12; // 12 bit -> 0-4095 void setup() { ledcSetup(KANAL, FREKANS, COZUNURLUK); ledcAttachPin(LED_PIN, KANAL); } void loop() { for (int i = 0; i <= 4095; i += 16) { ledcWrite(KANAL, i); delay(5); } }

16 bağımsız PWM kanalı vardır ve bunlar herhangi bir GPIO’ya atanabilir.

DAC — Gerçek Analog Çıkış

ESP32’nin GPIO25 ve GPIO26 pinlerinde gerçek 8 bit DAC bulunur. PWM’den farklı olarak bu pinler gerçekten ara gerilim değerleri üretir.

dacWrite(25, 128); // yaklasik 1.65 V dacWrite(25, 255); // yaklasik 3.3 V

Ses üretimi, referans gerilim ve analog kontrol sinyalleri için kullanılır.

Dokunmatik Pinler

10 GPIO pini kapasitif dokunma algılayabilir. Bir metal parçaya veya iletken banda bağlanan pin, parmak temasında değer düşüşü gösterir.

const int TOUCH_PIN = T0; // GPIO4 void setup() { Serial.begin(115200); } void loop() { int deger = touchRead(TOUCH_PIN); Serial.println(deger); if (deger < 30) { // esik deneyerek bulunur Serial.println("Dokunuldu!"); } delay(200); }

Fiziksel buton olmadan dokunmatik panel yapmanın en kolay yoludur.

Çift Çekirdek Kullanımı

ESP32’nin iki çekirdeği vardır ve FreeRTOS üzerinde çalışır. Varsayılan olarak setup() ve loop() Core 1’de çalışır; Core 0 Wi-Fi yığınıyla meşguldür.

Ağır bir işi ayrı çekirdeğe atayabilirsiniz:

TaskHandle_t gorev1; void agirIs(void *parametre) { for (;;) { // Bu kod Core 0'da calisir Serial.print("Core 0 calisiyor: "); Serial.println(xPortGetCoreID()); vTaskDelay(1000 / portTICK_PERIOD_MS); } } void setup() { Serial.begin(115200); xTaskCreatePinnedToCore( agirIs, // fonksiyon "AgirIs", // isim 10000, // yigin boyutu NULL, // parametre 1, // oncelik &gorev1, // gorev tanitici 0 // cekirdek numarasi (0) ); } void loop() { Serial.print("Core 1 calisiyor: "); Serial.println(xPortGetCoreID()); delay(1500); }

Sensör okuma ve ağ iletişimini ayrı çekirdeklere dağıtmak, ikisinin birbirini yavaşlatmasını önler.

Deep Sleep

ESP32’nin uyku modu ESP8266’dan daha esnektir; birden fazla uyandırma kaynağı destekler.

#define uS_TO_S 1000000ULL #define UYKU_SURESI 30 // saniye RTC_DATA_ATTR int uyanmaSayisi = 0; // uykuda korunur void setup() { Serial.begin(115200); delay(1000); uyanmaSayisi++; Serial.print("Uyanma sayisi: "); Serial.println(uyanmaSayisi); // Isinizi burada yapin esp_sleep_enable_timer_wakeup(UYKU_SURESI * uS_TO_S); Serial.println("Uykuya geciliyor..."); esp_deep_sleep_start(); } void loop() { }

RTC_DATA_ATTR ile işaretlenen değişkenler derin uyku boyunca korunur — bu, ESP8266’da olmayan kullanışlı bir özelliktir.

Uyandırma kaynakları: zamanlayıcı, GPIO (ext0/ext1), dokunmatik pin, ULP yardımcı işlemci.

Deep sleep tüketimi yaklaşık 10 µA’dir.

Kart Desteği Ekleme

  1. Dosya → Tercihler → Ek Kart Yöneticisi URL’leri: https://espressif.github.io/arduino-esp32/package_esp32_index.json
  2. Araçlar → Kart → Kart Yöneticisi’nden esp32 aratıp kurun.
  3. Araçlar → Kart → ESP32 Arduino → ESP32 Dev Module seçin.

Bazı kartlarda kod yüklerken BOOT butonuna basılı tutmak gerekir. “Connecting…” yazısı görününce butona basın ve yükleme başlayınca bırakın.

Besleme

DurumAkım
Deep sleep~10 µA
Boşta (Wi-Fi bağlı)~80 mA
Wi-Fi tepe~500 mA

ESP8266’dan daha çok akım çeker. En az 1 A verebilen bir kaynak kullanın ve besleme hattına 470–1000 µF kondansatör ekleyin.

Özet

ESP32, çift çekirdekli, Wi-Fi ve Bluetooth taşıyan güçlü bir mikrodenetleyicidir. 18 analog giriş, gerçek DAC, dokunmatik pinler ve esnek uyku modları sunar.

Bu derste şunları öğrendik:

  • ESP32’nin ESP8266 ve Uno’ya göre üstünlüklerini
  • GPIO 6–11’in kullanılamayacağını, 34–39’un sadece giriş olduğunu
  • Boot (strapping) pinlerini ve güvenli pin listesini
  • Wi-Fi açıkken ADC2 pinlerinin çalışmadığını
  • LEDC ile PWM ve dacWrite() ile gerçek analog çıkışı
  • Dokunmatik pin kullanımını
  • Çift çekirdeğe görev atamayı ve RTC_DATA_ATTR ile deep sleep’i