ESP32 Modülü Programlama: Başlangıçtan İleri Projeye Rehber
ESP32, Espressif tarafından geliştirilen çift çekirdekli 240 MHz işlemcisi, dahili WiFi ve Bluetooth desteğiyle gömülü sistem ve IoT (Nesnelerin İnterneti) dünyasının en çok tercih edilen mikrodenetleyicilerinden biridir. Antalya ve Türkiye genelinde akıllı ev, tarım otomasyonu, endüstriyel izleme ve özel donanım projeleri geliştiren ekibimiz için ESP32, maliyet etkin ve güçlü bir platformdur.
Bu yazıda ESP32 modülü programlamaya sıfırdan başlamak isteyenler için kurulum, pin yapısı, temel kod örnekleri, ağ bağlantısı ve ileri düzey proje ipuçlarını adım adım ele alıyoruz.
ESP32 Nedir ve Neden Tercih Edilir?
ESP32; düşük güç tüketimi, yüksek işlem gücü ve zengin bağlantı seçenekleriyle öne çıkar. Temel özellikleri şunlardır:
- Çift çekirdekli 32-bit LX6 işlemci (240 MHz'e kadar)
- Dahili WiFi (802.11 b/g/n) ve Bluetooth 4.2 / BLE
- 520 KB SRAM ve harici 4 MB+ Flash bellek desteği
- Zengin I/O: ADC, DAC, PWM, I2C, SPI, UART, touch pinleri
- Düşük güç modları: Deep sleep ve light sleep ile pil ömrü optimizasyonu
Bu özellikler; akıllı termostatlar, uzaktan kumanda sistemleri, hava istasyonları, akıllı tarım sensör ağları ve endüstriyel veri toplama uygulamaları için ideal bir altyapı sunar.
1. Gerekli Donanım ve Yazılım
Donanım: - ESP32 geliştirme kartı (DevKit, NodeMCU-32S, ESP32-WROOM tabanlı) - Micro-USB kablo - Bilgisayar - İsteğe bağlı: breadboard, LED, direnç, sensör (ör. DHT22, BMP280)
Yazılım: - Arduino IDE (en kolay başlangıç) - Alternatif: PlatformIO, ESP-IDF (ileri düzey)
2. Arduino IDE'de ESP32 Desteğini Ekleme
ESP32 kartlarını Arduino IDE ile programlamak için board manager desteğini eklemeniz gerekir:
1. Arduino IDE'yi açın: Dosya → Tercihler
2. Ek Yönetici URL'leri alanına şu adresi yapıştırın:
https://raw.githubusercontent.com/espressif/arduino-esp32/arduino-esp32/package_esp32_index.json
3. Araçlar → Kart → Kart Yöneticisi menüsünü açın
4. "esp32" aratın ve Install deyin
5. Araçlar → Kart menüsünden kartınızı seçin (ör. *ESP32 Dev Module*)
6. Doğru Port'u seçin
> İpucu: Windows'ta sürücü sorunu yaşarsanız CP210x veya CH340 USB-UART sürücüsünü kurmanız gerekebilir.
3. Pin Yapısını Anlamak
ESP32'de pin isimleri Arduino Uno'dan farklıdır. Programlamada kullanacağınız temel pin grupları:
| Pin Grubu | Kullanım | Not |
|---|---|---|
| GPIO 0-19 | Dijital I/O, PWM | Bazı pinler boot/strapping |
| GPIO 34-39 | Sadece giriş (input only) | Pull-up yok |
| ADC1/ADC2 | Analog okuma | WiFi açıkken ADC2 kullanılamaz |
| Touch pins | Kapasitif dokunma | GPIO 4, 0, 2, 15, 13, 12, 14, 27 |
Önemli: GPIO 0 boot moduna, GPIO 2 dahili LED'e, GPIO 34-39 ise yalnızca giriş olarak çalışır. Proje tasarımında bu kısıtları hesaba katın.
4. İlk Program: Blink (Yanıp Sönen LED)
Klasik "Merhaba Dünya" ile başlayalım:
#define LED_PIN 2 // Dahili LED (bazı kartlarda GPIO 2)void setup() { pinMode(LED_PIN, OUTPUT); }
void loop() { digitalWrite(LED_PIN, HIGH); delay(1000); digitalWrite(LED_PIN, LOW); delay(1000); } ```
Kodu yüklemek için Upload düğmesine basın. ESP32 yüklemeye başlarken bazı kartlarda BOOT tuşuna basılı tutmanız, yükleme başlayınca bırakmanız gerekir.
5. Sensör Okuma: DHT22 ile Sıcaklık ve Nem
Önce DHT sensor library kütüphanesini Arduino IDE'den yükleyin (*Araçlar → Kütüphane Yöneticisi*).
#include "DHT.h"
#define DHTPIN 4
#define DHTTYPE DHT22DHT dht(DHTPIN, DHTTYPE);
void setup() { Serial.begin(115200); dht.begin(); }
void loop() { delay(2000); float t = dht.readTemperature(); float h = dht.readHumidity();
if (isnan(t) || isnan(h)) { Serial.println("Sensör okunamadı!"); return; }
Serial.print("Sicaklik: "); Serial.print(t); Serial.println(" C"); Serial.print("Nem: "); Serial.print(h); Serial.println(" %"); } ```
Seri ekranı (115200 baud) üzerinden sıcaklık ve nem değerlerini görebilirsiniz.
6. WiFi Bağlantısı ve Web Sunucu
ESP32'nin asıl gücü ağ bağlantısında ortaya çıkar. Aşağıdaki kod, WiFi'ye bağlanır ve tarayıcıdan LED kontrol etmenizi sağlayan basit bir web sunucusu çalıştırır:
#include <WiFi.h>
#include <WebServer.h>const char* ssid = "WIFI_ADI"; const char* password = "WIFI_SIFRE";
WebServer server(80); #define LED_PIN 2
void handleRoot() { String html = "<h1>ESP32 Kontrol</h1>" "<p><a href='/on'>LED Yak</a></p>" "<p><a href='/off'>LED Sondur</a></p>"; server.send(200, "text/html", html); }
void setup() { Serial.begin(115200); pinMode(LED_PIN, OUTPUT); WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.print("IP: "); Serial.println(WiFi.localIP());
server.on("/", handleRoot); server.on("/on", []() { digitalWrite(LED_PIN, HIGH); server.send(200, "text/plain", "LED yandi"); }); server.on("/off", []() { digitalWrite(LED_PIN, LOW); server.send(200, "text/plain", "LED sonduruldu"); }); server.begin(); }
void loop() { server.handleClient(); } ```
Seri ekranda görünen IP adresini tarayıcıya yazdığınızda, telefonunuzdan veya bilgisayarınızdan LED'i uzaktan kontrol edebilirsiniz.
7. Bluetooth Low Energy (BLE)
ESP32, BLE ile mobil uygulama üzerinden veri alışverişi yapmanıza da imkân tanır. BLEDevice, BLEServer ve BLECharacteristic sınıflarıyla bir GATT sunucusu kurabilir; mobil uygulamanızdan sensör verilerini okuyabilirsiniz. Bu yapı, mobil uygulama geliştirme hizmetimizle entegre çalışan özel donanım projelerinde sıkça kullanılır.
8. Güç Yönetimi: Deep Sleep
Pille çalışan IoT projelerinde güç tüketimini minimize etmek kritiktir. Deep sleep modu ESP32'yi mikroamper düzeyine çeker:
#define uS_TO_S_FACTOR 1000000ULL
#define TIME_TO_SLEEP 30 // saniyevoid setup() { esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR); esp_deep_sleep_start(); }
void loop() {} ```
Her 30 saniyede bir uyanıp sensör okuyup veriyi buluta gönderen bir istasyon, tek bir LiPo pil ile aylarca çalışabilir.
9. Bulut ve IoT Platform Entegrasyonu
ESP32 verilerini uzaktan izlemek için yaygın seçenekler:
- MQTT: Hafif pub/sub protokolü; MQTT broker (Mosquitto, HiveMQ) üzerinden veri yayını
- HTTP REST: Sunucuya POST isteğiyle veri gönderme
- Firebase / InfluxDB / ThingSpeak: Hazır veri saklama ve görselleştirme
- Özel backend: Kendi API'nizi yazarak tam kontrol
Karaçayır Teknoloji olarak ESP32 tabanlı donanımı, özel mobil uygulama ve backend ile uçtan uca entegre edebiliyoruz.
10. Yaygın Hatalar ve Çözümleri
| Sorun | Olası Neden | Çözüm |
|---|---|---|
| Yükleme başlamıyor | Boot moduna geçilmedi | Upload sırasında BOOT tuşuna bas |
| WiFi bağlanmıyor | Yanlış SSID/şifre | 2.4 GHz ağ kullandığınızdan emin ol (5 GHz desteklenmez) |
| ADC2 yanlış okuyor | WiFi ADC2'yi kullanır | ADC1 pinlerini tercih et |
| Seri ekran boş | Yanlış baud rate | 115200 değerini kontrol et |
| Kart görünmüyor | Sürücü eksik | CP210x / CH340 sürücüsünü kur |
Sonuç: ESP32 ile Fikirlerinizi Donanıma Taşıyın
ESP32; güçlü işlemcisi, dahili kablosuz bağlantısı ve zengin I/O seçenekleriyle IoT ve gömülü sistem projeleri için mükemmel bir başlangıç noktasıdır. Bu rehberdeki adımları izleyerek ilk blink uygulamanızdan WiFi kontrollü cihazlara, sensör ağlarından bulut entegrasyonlu akıllı sistemlere kadar geniş bir yelpazede proje geliştirebilirsiniz.
ESP32 tabanlı özel donanım, mobil uygulama ve bulut entegrasyonu gerektiren bir projeniz varsa iletişim sayfamızdan bize ulaşabilir veya mobil uygulama geliştirme hizmetlerimizi inceleyebilirsiniz. Antalya'dan Türkiye geneline donanım + yazılım entegrasyonu sunan ekibimizle projenizi birlikte hayata geçirelim.