Web sitemize hoşgeldiniz, 08 Ocak 2025
muratdonmez.com.tr
Anasayfa » IOT » ESP8266’nın Derin Uyku Modu Nasıl Kullanılır?

ESP8266’nın Derin Uyku Modu Nasıl Kullanılır?

muratdonmez.com.tr
ESP8266’nın Derin Uyku Modu Nasıl Kullanılır?

ESP8266’nın derin uyku modu neden kullanılır önce kısaca onu açıklayayım. Eğer ESP8266 kullanarak pille çalışan bir proje yaptıysanız veya ESP8266 NodeMCU kartınızı bir powerbank’a bağladıysanız ve WIFI bağlantısı da kullanıyorsanız bir süre sonra pilin fazla dayanmadığını göreceksiniz. ESP8266’yı boşta olduğu zamanlarda derin uyku moduna alırsanız, pil kullanımı azalacak ve pili daha uzun dayanacaktır. Derin uyku modu, ESP8266’nın işlemciyi uyandırmaya yetecek kadar arka planda çalışmasını sağlayarak, fazla enerji tüketen WIFI gibi faliyetleri kapatır.

ESP8266 Uyku Türleri

ESP8266 üç farklı uyku modunu desteklemektedir: modem uykusu, hafif uyku ve derin uyku. Aşağıdaki tablo, her mod arasındaki farkları göstermektedir. (Bilgiler ESP8266 veri sayfasından alınmıştır.)

Açıklama Modem Uykusu Hafif Uyku
Derin Uyku
Wi-Fi KAPALI KAPALI KAPALI
Sistem saati AÇIK KAPALI KAPALI
RTC AÇIK AÇIK AÇIK
CPU AÇIK BEKLEME KAPALI
Harcanan güç
15 mA 0.4 mA ~20 uA
Ortalama akım (DTIM = 1) 16.2 mA 1.8 mA
Ortalama akım (DTIM = 3) 15.4 mA 0.9 mA
Ortalama akım (DTIM = 10) 15.2 mA 0.55 mA

Hepsinin farklı amaçları vardır ve farklı uygulamalarda kullanılmaları gerekir. Bu makalede, derin uyku modunu ele alacağız. ESP8266 uyanma zamanını takip ettiği için Gerçek Zamanlı Saat (RTC) dışında her şey kapalıdır. Derin uyku modu, güç kullanımı açısından en verimli seçenektir ve ESP yongası yaklaşık 20uA akım çeker. Eğer, yerleşik programlayıcı, LED’ler vb. barındıran bir geliştirme kartı kullanırsanız, bu kadar düşük güç kullanım değerine ulaşamazsınız.

ESP8266 derin uyku modu

Derin Uyku Modu Çalışma Mantığı

Derin uyku modunu kullandığımızda ESP8266 kartımızın çalışma şekli aşağıdaki gibi olacaktır:

  • ESP8266 WIFI’ye bağlanır
  • ESP8266 bağlı sensörden bilgi okumak, MQTT mesajı yayınlamak gibi bir görevi yerine getirir.
  • Tanımlanan süre boyunca derin uyku moduna geçer.
  • Süre dolunca ESP8266 uyanır.
  • Bu süreç ESP8266 çalıştığı sürece sürekli tekrarlanır.

ESP8266’yı Derin Uykudan Uyandırma Yolları

ESP8266’yı derin uyku moduna geçirdikten sonra farklı uyandırma yolları vardır,

  • Zamanlayıcı kullanarak uyandırma: ESP8266, belirtmiş olduğunuz süre sonunda otomatik olarak kendisi uyanır.
  • Harici (Müdahale ederek) uyandırma: ESP8266’yı RST butonuna basarak uyandırabilirsiniz. Bu durumda ESP8266 yeniden başlatılacaktır.

Düşük güç gerektiren projeleriniz için, daha fazla derin uyku modu ve uyandırma kaynakları sunan ESP32 kartını kullanmayı tercih edebilirsiniz.

ESP8266’yı Zamanlayıcı ile Derin Uyku Modundan Çıkarma

ESP8266’yı zamanlayıcı ile uyandırmak için, NodeMCU kartında RST pinini D0 olarak adlandırılan GPIO 16’ya bağlamanız gerekmektedir. Bağlantının nasıl olacağını aşağıdaki resimde de görebilirsiniz.

ESP8266 derin uyku modu

RST pinini D0 pinine bağlamadan önce kodunuzu NodeMCU kartınıza yüklemiş olmanız gerekmektedir. Aşağıdaki NodeMCU pin şemasına bakacak olursanız D0 pininin yani GPIO 16’nın WAKE yani uyandırma özelliğine sahip olduğunu görebilirsiniz.

ESP8266 üzerindeki pinlerle ilgili detaylı yazımı buradan okuyabilirsiniz.

ESP8266’nın RST pini, ESP8266 çalışırken varsayılan olarak HIGH durumdadır, eğer RST pinine LOW sinyal gönderecek olursak mikro denetleyiciyi (microcontroller) yeniden başlatır. ESP8266’nın derin uyku zamanlayıcısını ayarlarsanız, uyku süresi dolduğunda GPIO 16 LOW sinyali gönderir. Bu, GPIO 16’yı RST pinine bağladığınız zaman, derin uyku süresi dolduğunda ESP8266’yı uyandırabileceği anlamına gelmektedir.

ESP8266 NodeMCU’yu Zamanlayıcı ile Derin Uyku Modundan Uyandırma

ESP8266’yı derin uyku modundan nasıl uyandıracağımızı öğrendiğimize göre şimdi gelelim NodeMCU’ya kodumuzu yüklemeye. Eğer NodeMCU’yu Arduino IDE’ye tanıtmadıysanız kodu yüklemeden önce NodeMCU’yu tanıtmanız gerekmektedir. Nasıl tanıtacağınızı bilmiyorsanız NodeMCU’yu tanıtma yazıma buradan ulaşabilirsiniz. Daha sonra Araçlar (Tools) menüsüne giderek NodeMCU (ESP-12E Module) seçtikten sonra aşağıdaki kodu yükleyiniz.

ESP8266’yı Zamanlayıcı ile Uyandırma Kodu

/*
 * ESP8266 Derin uyku modu örneği
 * Murat Donmez 
 * Proje detaylarına https://muratdonmez.com.tr den ulaşabilirsiniz.
 */
 
void setup() {
  Serial.begin(115200);
  Serial.setTimeout(2000);

  // Seri portun başlatılmasını bekle
  while(!Serial) { }
  
  // 30 saniye derin uyku modunda kalır, süre dolunca GPIO 16 
  // (NodeMCU üzerinde D0 pini) RESET pinine bağlınırsa ESP8266
  // otomatik uyanacaktır.

  Serial.println("ESP8266 çalışır durumda, 30 saniye için derin uyku moduna giriyor.");
  ESP.deepSleep(30e6); 
  
}

void loop() {
}

 

Yukarıdaki örnekte önce seri monitör üzerinden mesaj yazdırıyoruz:

Serial.println("ESP8266 çalışır durumda, 30 saniye için derin uyku moduna giriyor.");

Daha sonra ESP8266’yı 30 saniye süreyle derin uyku moduna sokuyoruz.

ESP.deepSleep(30e6);

ESP8266’yı derin uyku moduna sokmak için ESP.deepSleep(uS) fonksiyonunu kullanıyoruz ve süreyi mikro saniye olarak veriyoruz. Kodumuzda bulunan 30e6, 30 saniyeye eşit olan 30000000 mikro saniyeye karşılık gelmektedir.

Kodumuzu ESP8266’ya yükledikten sonra kodu çalıştırmak için RST butonuna basıyoruz ve GPIO 16 ile RST pinlerini birbirine bağlıyoruz. Bu işlemden sonra her 30 saniyede bir ESP8266 uyanmalı ve aşağıdaki mesajı Arduino IDE’nin seri monitörüne yazdırmalıdır.

Yukarıdaki örnekte ben derin uyku modunu anlatabilmek için basitçe seri monitöre mesaj yazdıran bir kod örneği verdim. Sizler derin uyku modu sonrası sensörden veri okuma, okunan verileri yayınlama gibi görevlerin yerine getirilmesini kodlayabilirsiniz.

ESP-01’i Zamanlayıcı ile Derin Uykudan Çıkarma

Benzer devreyi ESP-01 kartı ile yapmak isterseniz aşağıdaki gibi GPIO 16 ile RST pini arasına tel lehimlemeniz gerekecektir. Ancak ESP-01’in pinleri o kadar küçüktür ki, lehim yapmanız çok zor olacaktır. ESP-01 kartı yerine NodeMCU veya ESP12-E yongasını tercih etmeniz daha doğru olacaktır.

ESP8266’yı Harici Uyandırma ile Derin Uyku Modundan Çıkarma

ESP8266‘yı bir düğmeye basarak veya manyetik kontak ile derin uyku modundan çıkarabilirsiniz. Bunun için ESP8266’yı süresiz derin uyku moduna sokmanız ve uyandırmak istediğinizde RST pinine LOW sinyali göndermeniz yeterli olacaktır. Aşağıdaki şematik devrede gördüğünüz gibi ESP8266’ya bir düğme bağlayarak, düğmeye basıldığında RST pinine LOW sinyali gönderebilir ve ESP8266’yı uyandırabilirsiniz.

Eğer ESP-01 kullanıyorsanız aşağıdaki devreyi uygulayabilirsiniz.

Yukarıdaki devreyi yaptıktan sonra aşağıdaki kodu yükleyerek devreyi test edebilirsiniz.

ESP8266’yı Harici Uyandırma ile Derin Uykudan Çıkarma

/*
 * ESP8266 Derin uyku modu örneği
 * Murat Donmez 
 * Proje detaylarına https://muratdonmez.com.tr den ulaşabilirsiniz.
 */
 
void setup() {
  Serial.begin(115200);
  Serial.setTimeout(2000);

  // Seri portun başlatılmasını bekle
  while(!Serial) { }
  
  Serial.println("ESP8266 çalışır durumda, RESET pini LOW sinyali veren GPIO 16'ya bağlanana kadar derin uyku moduna giriyor.")
  ESP.deepSleep(0); 
}

void loop() {
}

ESP8266’yı süresiz derin uyku moduna geçirmek için ESP.deepSleep(0) fonksiyonunu kullanıyoruz. Süre olarak verdiğimiz 0 uyku modunun süresiz olduğunu belirtmektedir. Süresiz uyku modunda ESP sadece RST pinine LOW sinyali gönderildiğinde uyanacaktır. Bu da düğmeye basıldığında RST pinini GND’ye çekerek mümkün olacaktır. Devreye koyduğunuz düğmeye bastığınızda ESP8266 uyanarak tanımladığınız işlemleri yapacak ve tekrar derin uyku moduna geri dönecektir.

ESP8266’nın derin uyku modunda ne kadar güç tükettiğini görmek isterseniz devreye bir multimetre bağlayarak akım tüketimini ölçebilirsiniz. ESP-01 derin uyku modunda 0,3mA, normal çalışma modunda WIFI kullanarak 50mA ile 170mA arasında güç harcamaktadır.

Artık deepSleep() fonkiyonunu nasıl kullanacağınızı öğrendiğinize göre, yapacağınız projelerin pil ile daha uzun süreli çalışmasını sağlayabilirsiniz.

Etiketler:

muratdonmez.com.tr
BU KONUYU SOSYAL MEDYA HESAPLARINDA PAYLAŞ
Yorumlar

Henüz yorum yapılmamış.

Yorum Yaz