ESP32 ile SD Kart Kullanımı

👤 Yazar: ozcan 📅 Tarih: 07.06.2026 02:07 👁️ Görüntüleme: 32

ESP32 ile SD Kart Kullanımı

Projelerinizde büyük veri günlükleri (data logging), ses dosyaları, web sunucu bileşenleri (HTML, CSS, görsel) veya yapılandırma dosyaları saklamak istediğinizde ESP32'nin dahili hafızası yetersiz kalabilir. ESP32, harici bir SD kart modülü ile entegre edilerek depolama kapasitesi gigabaytlarca artırılabilir. Bu kılavuzda, ESP32 ile SD kart modülünün donanımsal bağlantısını, SPI haberleşme mimarisini ve Arduino IDE üzerinde temel dosya işlemlerini (okuma, yazma, silme) derinlemesine inceleyeceğiz.

---

1. Donanım Mimarisi ve Pin Bağlantıları

ESP32, harici cihazlarla haberleşmek için gelişmiş SPI (Serial Peripheral Interface) protokolünü kullanır. Piyasada yaygın olarak bulunan Micro SD Kart modülleri çoğunlukla SPI arayüzü ile çalışır. ESP32 üzerinde iki adet erişilebilir SPI birimi bulunur: HSPI ve VSPI. Standart Arduino kütüphaneleri varsayılan olarak VSPI birimini kullanır.

Aşağıdaki tabloda, standart bir ESP32 DevKit v1 (38 pinli) kartı ile 5V/3.3V Micro SD Kart modülü arasındaki pin eşleşmeleri gösterilmiştir:

SD Kart Modülü Pini ESP32 GPIO Karşılığı (VSPI) Görevi
GND GND Topraklama
VCC VIN (5V) veya 3.3V Besleme Voltajı (Modüle göre değişir)
MISO GPIO 19 Master In Slave Out (Veri Girişi)
MOSI GPIO 23 Master Out Slave In (Veri Çıkışı)
SCK / CLK GPIO 18 Serial Clock (Saat Sinyali)
CS / SS GPIO 5 (İsteğe bağlı değiştirilebilir) Chip Select (Hassas Cihaz Seçimi)

⚠️ Önemli Uyarı: Bazı SD kart modülleri doğrudan 3.3V ile çalışırken, bazıları üzerinde voltaj regülatörü barındırır ve 5V (VIN) beslemesine ihtiyaç duyar. Yanlış voltaj verilmesi SD kartın veya ESP32 pinlerinin zarar görmesine neden olabilir. Kartınızın üzerindeki regülatörü kontrol ediniz.

ESP32 SD kart bağlantı şeması

---

2. Dosya Formatı ve Hazırlık

ESP32'nin standart kütüphaneleri modern dosya sistemlerinin tamamını desteklemez. SD kartınızı ESP32'ye takmadan önce bilgisayarınızda mutlaka şu kurallara göre biçimlendirmeniz (format) gerekir:

---

3. Arduino IDE Uygulama Örneği

ESP32 çekirdeği, SD kart yönetimi için yerleşik SD.h ve FS.h (Dosya Sistemi) kütüphaneleriyle birlikte gelir. Harici bir kütüphane yüklemenize gerek yoktur.

Gelişmiş Veri Yazma, Okuma ve Ekleme Senaryosu

Aşağıdaki kod blokları, SD kartın başarıyla başlatılıp başlatılmadığını kontrol eder, ardından kök dizinde bir metin dosyası oluşturup içine veri yazar. Daha sonra mevcut veriyi bozmadan altına yeni satır ekler (append) ve son olarak dosyanın tüm içeriğini okuyarak Seri Port ekranına basar.

#include "FS.h"
#include "SD.h"
#include "SPI.h"

// CS (Chip Select) pini varsayılan olarak GPIO 5
const int chipSelectPin = 5;

// Fonksiyon Protokolleri
void dosyaYaz(fs::FS &fs, const char * path, const char * message);
void dosyaOku(fs::FS &fs, const char * path);
void dosyaEkle(fs::FS &fs, const char * path, const char * message);

void setup() {
  Serial.begin(115200);
  
  // SD Kartı Başlatma Kontrolü
  if(!SD.begin(chipSelectPin)) {
    Serial.println("HATA: SD Kart modülü başlatılamadı!");
    Serial.println("Lütfen bağlantılarınızı ve kart formatını (FAT32) kontrol edin.");
    return;
  }
  
  uint8_t kartTipi = SD.cardType();
  if(kartTipi == CARD_NONE) {
    Serial.println("HATA: Geçerli bir SD kart bulunamadı.");
    return;
  }

  Serial.println("SD Kart başarıyla doğrulandı.");
  
  // 1. Yeni bir dosya oluştur ve veri yaz (Mevcut dosya varsa üzerine yazar)
  dosyaYaz(SD, "/sensor_veri.txt", "Zaman damgası, Sicaklik, Nem\n");
  
  // 2. Mevcut dosyanın sonuna yeni veri ekle (Loglama simülasyonu)
  dosyaEkle(SD, "/sensor_veri.txt", "12:00 , 24.5 , 58%\n");
  dosyaEkle(SD, "/sensor_veri.txt", "12:05 , 24.8 , 57%\n");
  
  // 3. Dosya içeriğini okuyup seri monitöre yazdır
  Serial.println("\n--- Dosya İcerigi Okunuyor ---");
  dosyaOku(SD, "/sensor_veri.txt");
}

void loop() {
  // Ana döngü boş
}

// Dosyaya veri yazma fonksiyonu
void dosyaYaz(fs::FS &fs, const char * path, const char * message) {
  File file = fs.open(path, FILE_WRITE);
  if(!file) {
    Serial.println("Yazma islemi icin dosya acilamadi");
    return;
  }
  if(file.print(message)) {
    Serial.println("Dosya olusturuldu ve ilk veri yazildi.");
  } else {
    Serial.println("Yazma hatasi olustu.");
  }
  file.close();
}

// Dosyanın sonuna veri ekleme fonksiyonu (Append)
void dosyaEkle(fs::FS &fs, const char * path, const char * message) {
  File file = fs.open(path, FILE_APPEND);
  if(!file) {
    Serial.println("Ekleme islemi icin dosya acilamadi");
    return;
  }
  if(file.print(message)) {
    Serial.println("Yeni log verisi başarıyla eklendi.");
  } else {
    Serial.println("Ekleme hatasi olustu.");
  }
  file.close();
}

// Dosya içeriğini okuma fonksiyonu
void dosyaOku(fs::FS &fs, const char * path) {
  File file = fs.open(path);
  if(!file) {
    Serial.println("Okuma islemi icin dosya acilamadi");
    return;
  }
  while(file.available()) {
    Serial.write(file.read());
  }
  file.close();
}
---

4. Kararlılık ve Mühendislik Tavsiyeleri

ESP32 projelerinde SD kart bileşeni eklenirken sistemin kilitlenmesini veya verilerin bozulmasını önlemek adına şu kriterlere dikkat edilmelidir:

💬 Yorumlar

Henüz yorum yapılmamış. İlk yorumu siz yapın!

Bir Yorum Bırakın

Güvenlik Kontrolü:

Yenidir.com
Sayfa Başı
Yenidir CMS V0.1