| 3 dk okuma | 14 okunma

Bölüm 8: Pille Çalışan Projelerin Sırrı: "Deep Sleep" (Derin Uyku) Modu

ESP32'nin çok güç tükettiğini mi duydunuz? Haklı olabilirsiniz, sürekli Wi-Fi'a bağlı kalmak pili hızla bitirir. Peki ya cihazınızı bir pille aylarca çalıştırmak isterseniz? Bu final bölümünde, ESP32'nin hayat kurtaran "Deep Sleep" (Derin Uyku) modunu öğrenecek ve pille çalışan taşınabilir IoT projelerinin sırrını çözeceğiz.

Bölüm 8: Pille Çalışan Projelerin Sırrı: "Deep Sleep" (Derin Uyku) Modu

Yazı dizimiz boyunca harika işler başardık. ESP32'yi internete bağladık, sensör verilerini okuduk ve bunları dünyanın öbür ucundaki ThingSpeak bulutuna gönderdik. Ancak masada USB kablosuyla bilgisayara bağlıyken her şey çok kolaydır.

Eğer projenizi bir tarlaya, ormana veya elektrik prizi olmayan bir balkona yerleştirmek isterseniz ona bir pil takmanız gerekir. İşte sorun burada başlar: ESP32'nin çift çekirdekli işlemcisi ve Wi-Fi anteni gerçek bir enerji canavarıdır. Standart bir taşınabilir şarj cihazı (powerbank) veya Lityum pil, sürekli çalışan bir ESP32'yi en fazla birkaç gün hayatta tutabilir.

Peki piyasadaki pilli akıllı sensörler nasıl aylarca çalışıyor? Cevap: Derin Uyku (Deep Sleep).

Derin Uyku (Deep Sleep) Nedir?

Derin uyku, ESP32'nin beyninin büyük bir kısmının, Wi-Fi'ın ve Bluetooth'un tamamen kapatıldığı bir güç tasarrufu modudur. Cihaz bu moda geçtiğinde elektrik tüketimi miliamperlerden (mA), mikroamper (µA) seviyelerine, yani neredeyse sıfıra düşer!

Sadece içerideki RTC (Gerçek Zamanlı Saat) adı verilen çok düşük güç tüketen minik bir bekçi uyanık kalır. Bu bekçi, belirlediğiniz süre dolduğunda veya dışarıdan bir sensör tetiklendiğinde ana beyne "Uyan, işimiz var!" der.

Örnek Senaryo: Bir sera sıcaklık sensörü yaptınız. Sıcaklığı saniyede bir ölçmenize gerek yoktur. ESP32 uyanır -> Wi-Fi'a bağlanır -> Sıcaklığı ölçer -> Buluta gönderir (Bu işlem 3-4 saniye sürer) -> ESP32 30 dakika boyunca Derin Uykuya dalar. Bu sayede pil ömrünüz birkaç günden, aylarca sürecek bir zamana uzar!

Uyandırma Yöntemleri

ESP32'yi uykudan uyandırmanın birkaç yolu vardır:

  1. Zamanlayıcı (Timer): "Şu kadar dakika uyu ve uyan." (En çok kullanılanı budur).
  2. Harici Tetikleyici (External): ESP32 uyurken bir butona basılması veya hareket sensörünün (PIR) birini algılaması ile cihazın uyanması.

Biz bu yazımızda en temel olan Zamanlayıcı (Timer Wake-up) kullanacağız.

Derin Uyku Kodu Nasıl Çalışır?

Burada dikkat etmeniz gereken çok önemli bir kural var: ESP32 derin uykudan uyandığında, kaldığı yerden devam etmez. Sanki "Reset" (Yeniden Başlatma) tuşuna basılmış gibi hafızasını temizler ve koda en baştan, yani setup() kısmından başlar. Bu yüzden derin uyku projelerinde loop() kısmı genellikle boş bırakılır.

Arduino IDE'yi açın ve ESP32'nize şu kodu yükleyin:

C++


// ESP32 derin uykudayken zamanı mikro saniye (µs) cinsinden sayar.
// İşlemi kolaylaştırmak için saniyeye çeviren bir çarpan tanımlıyoruz.
#define uS_TO_S_FACTOR 1000000  

// ESP32'nin uyuyacağı süre (Saniye cinsinden)
#define TIME_TO_SLEEP  10       

void setup(){
  Serial.begin(115200);
  delay(1000); // Seri portun kendine gelmesi için kısa bir bekleme

  Serial.println("\n----------------------------------");
  Serial.println("ESP32 UYANDI! Gunaydin!");

  // 1. AŞAMA: İŞİNİ YAP
  // (Gerçek bir projede burada Wi-Fi'a bağlanır, sensörü okur ve veriyi ThingSpeak'e gönderirdik)
  Serial.println("Islemler yapiliyor... Sensör okundu.");
  delay(2000); // İşlem yapılıyormuş gibi 2 saniye bekletiyoruz
  Serial.println("Islem tamamlandi!");

  // 2. AŞAMA: UYKU SÜRESİNİ AYARLA
  // 10 saniye (10 * 1000000 mikro saniye) olarak ayarlıyoruz.
  esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
  Serial.println("ESP32 simdi " + String(TIME_TO_SLEEP) + " saniye boyunca uyuyacak.");

  // 3. AŞAMA: UYKUYA DAL
  Serial.println("Iyi geceler!");
  Serial.flush(); // Seri porttaki yazıların bitmesini garantiye alıyoruz
  
  // Uyku modunu başlatan sihirli komut:
  esp_deep_sleep_start();

  // DİKKAT: Bu satırdan sonraki hiçbir kod ÇALIŞMAZ! Çünkü cihaz tamamen uykuya daldı.
  Serial.println("Bunu asla ekranda goremeyeceksiniz.");
}

void loop(){
  // Derin uykudan uyanan ESP32, loop() kısmına geçmez, cihazı baştan başlatır.
  // Bu yüzden burası boş kalır.
}

Kodu Test Edelim

  1. Kodu yükleyin ve Seri Port Ekranı'nı açın (115200 baud).
  2. ESP32 uyanacak, "Günaydın" diyecek, 2 saniye iş yapacak ve "İyi geceler" diyerek uykuya dalacaktır.
  3. Tam 10 saniye boyunca ekranda hiçbir hareket olmayacak (işte bu sırada piliniz kurtuluyor!).
  4. 10 saniye dolduğunda cihaz otomatik uyanacak ve döngü baştan başlayacaktır.

Tebrikler! Artık pille yıllarca (doğru optimizasyonla) çalışabilecek profesyonel kalitede IoT cihazları tasarlamanın en büyük sırrını biliyorsunuz.

Serinin Sonu ve Yeni Başlangıçlar

Arduino'nun "kaslı abisi" ESP32 ile başladığımız bu yolculukta sıfırdan zirveye harika bir rota çizdik. Artık hayal gücünüzle sınırlı akıllı ev aletleri, tarım monitörleri, hava istasyonları ve çok daha fazlasını yapacak bilgi birikimine sahipsiniz. Sensörlerinizi alın, kodlarınızı yazın ve fiziksel dünyayı internetle buluşturmaya devam edin!

Eğer projelerinizde takıldığınız bir yer olursa yorumlarda buluşalım. Maker kalın!

Ertan Dağdelen

Yazan

Ertan Dağdelen

Brain & Youth Information Worker, Author, .Net, Flutter, AJAX, Arduino & Esp32, Pcb, 3D, Galatasaray, Gemini

Bu yazıyı paylaş

Diğer Yazılar