ESP32 ve Preferences Kütüphanesi ile LED Durumunu Hafızada Tutma

👤 Yazar: ozcan 📅 Tarih: 04.06.2026 23:25 👁️ Görüntüleme: 33

ESP32 ve Preferences Kütüphanesi ile LED Durumunu Hafızada Tutma

Bu uygulamada, akıllı ev ve endüstriyel otomasyon sistemlerinin en kritik güvenlik çözümlerinden birini ele alacağız. ESP32'nin enerjisi kesildiğinde (elektrik kesintisi veya reset anında) LED'in en son hangi konumda (Açık veya Kapalı) olduğunu hatırlamasını sağlayacağız. Bu işlem için geleneksel EEPROM yerine, ESP32'nin güncel flaş bellek yönetim birimi olan Preferences kütüphanesini kullanacağız.

1. Gerekli Malzemeler

2. Donanım Bağlantıları

Sistemde hem manuel kontrol sağlamak hem de hafıza testini gerçekleştirebilmek için bir buton ve bir LED yer alacaktır. Buton için yine dahili pull-up direnci kullanılacaktır.

ESP32 Preferences Hafıza ve LED Bağlantı Şeması

Görsel 1: ESP32 Flaş Bellek ve LED Kontrolü Şeması

3. Preferences Kütüphanesi ile Kalıcı Hafıza Kod Bloğu

Aşağıdaki kod, butona her basıldığında LED'in durumunu değiştirir ve bu yeni durumu anlık olarak ESP32'nin flaş belleğindeki kalıcı bir alana kaydeder. Cihaz yeniden başladığında setup() fonksiyonu bu hafıza alanını okuyarak LED'i eski konumunda kaldığı yerden başlatır.

#include <Preferences.h>

#define BUTTON_PIN 4
#define LED_PIN 2

Preferences preferences; // Kütüphane nesnesini tanımlıyoruz

int ledDurumu = LOW;
int butonSonDurumu = HIGH;
unsigned long sonDebounceZamani = 0;
unsigned long debounceGecikmesi = 50;

void setup() {
  Serial.begin(115200);
  pinMode(LED_PIN, OUTPUT);
  pinMode(BUTTON_PIN, INPUT_PULLUP);

  // "hafiza" adında bir isim alanı (namespace) açıyoruz. false = Okuma/Yazma modu
  preferences.begin("hafiza", false);
  
  // Bellekten "led_konum" anahtarına ait veriyi okuyoruz. 
  // Eğer bellek daha önce boşsa varsayılan olarak 0 (LOW) döner.
  ledDurumu = preferences.getInt("led_konum", LOW);
  
  // LED'i hafızadan okunan son duruma getiriyoruz
  digitalWrite(LED_PIN, ledDurumu);
  
  Serial.print("Sistem Baslatildi. Hafizadan Okunan LED Durumu: ");
  Serial.println(ledDurumu == HIGH ? "ACIK" : "KAPALI");
}

void loop() {
  int okuma = digitalRead(BUTTON_PIN);

  if (okuma != butonSonDurumu) {
    sonDebounceZamani = millis();
  }

  if ((millis() - sonDebounceZamani) > debounceGecikmesi) {
    if (okuma == LOW) {
      // LED durumunu tersine çevir
      ledDurumu = !ledDurumu;
      digitalWrite(LED_PIN, ledDurumu);
      
      // Yeni durumu kalıcı hafızaya kaydet
      preferences.putInt("led_konum", ledDurumu);
      
      Serial.print("LED Durumu Degisti ve Hafizaya Kaydedildi: ");
      Serial.println(ledDurumu == HIGH ? "ACIK" : "KAPALI");
      
      while(digitalRead(BUTTON_PIN) == LOW); // Butondan el çekilene kadar bekle
    }
  }
  butonSonDurumu = okuma;
}
Kritik Teknik Not:
  • Neden EEPROM Değil?: Eski Arduino kartlarında kullanılan EEPROM yapısı tüm belleği tek bir blok halinde yönetirdi. ESP32 ile gelen Preferences kütüphanesi ise verileri "anahtar-değer" (Key-Value) çiftleri halinde tutar. Bu sayede flaş belleğin ömrünü uzatır ve sadece değişen verinin üzerine yazılmasını sağlayarak çok daha kararlı bir dosya sistemi sunar.
  • Flaş Bellek Yazma Ömrü: ESP32 flaş belleği yaklaşık 100.000 yazma döngüsüne sahiptir. Bu nedenle hafızaya yazma komutunu (putInt) loop() içerisinde sürekli çalıştırmak yerine, yukarıdaki kodda yapıldığı gibi sadece buton tetiklendiğinde (durum değiştiğinde) bir kez çalışacak şekilde kurgulamak donanım sağlığı açısından zorunludur.

💬 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