ESP32'yi pil ile uzun süre çalıştırmak: deep sleep ve güç tüketimi
Sensör verisini birkaç dakikada bir gönderen bir ESP32 projesi prizden çalışırken sorunsuzdur, ama pile geçince birkaç günde biter. Sebep: Wi-Fi açıkken ESP32 yüzlerce miliamper çekebilir. Çözüm, zamanın büyük kısmında cihazı derin uykuda tutmaktır.
Deep sleep nedir?
Derin uykuda işlemci çekirdekleri, Wi-Fi ve Bluetooth kapanır. Sadece RTC (gerçek zaman saati) bölümü ve uyandırma kaynakları çalışır. Çipin kendi tüketimi mikroamper seviyesine düşer.
Uyandığında program baştan başlar (setup() yeniden çalışır). Uykular arasında saklaman gereken küçük değerler için RTC_DATA_ATTR kullanılır:
#include <WiFi.h>
RTC_DATA_ATTR int uyanmaSayisi = 0;
const uint64_t UYKU_SANIYE = 300; // 5 dakika
void setup() {
uyanmaSayisi++;
float sicaklik = sensoruOku(); // kendi sensör fonksiyonun
if (wifiBaglan(8000)) { // en fazla 8 sn dene
veriyiGonder(sicaklik, uyanmaSayisi);
}
WiFi.disconnect(true);
WiFi.mode(WIFI_OFF);
esp_sleep_enable_timer_wakeup(UYKU_SANIYE * 1000000ULL);
esp_deep_sleep_start();
}
void loop() {} // buraya hiç gelinmez
Uyanık kalma süresini kısalt
Pil ömrünü belirleyen asıl şey, cihazın her döngüde ne kadar süre uyanık kaldığıdır.
- Wi-Fi bağlantısı için zaman sınırı koy. Ağ yoksa sonsuza kadar denemesin.
- Sabit IP kullan: DHCP beklemesi bağlantıyı uzatabilir.
- Hafif protokol seç: MQTT ya da tek bir HTTP isteği. Büyük kütüphaneler ve TLS el sıkışması süreyi uzatır.
- Veriyi biriktir: Her 5 dakikada bir ölçüp RTC belleğinde biriktir, saatte bir toplu gönder. Wi-Fi'yi 12 kez yerine bir kez açarsın.
Geliştirme kartı tuzağı
Hazır geliştirme kartlarının (DevKit) çoğunda USB-seri çevirici, güç LED'i ve verimsiz bir voltaj regülatörü vardır. ESP32 derin uykudayken bile kart toplamda miliamper seviyesinde çekebilir. Ciddi pil projeleri için:
- Düşük sükunet akımlı (low quiescent current) regülatörü olan kartlar seç,
- Güç LED'ini sök veya devreden çıkar,
- Ya da doğrudan ESP32 modülüyle kendi kartını tasarla.
Ölçmeden tahmin etme: multimetreyi akım modunda pil hattına seri bağla (uyku akımı için mikroamper kademesi). Uyanma anındaki kısa akım tepeleri multimetreyle iyi görünmez. Bunun için akım ölçüm modülü veya güç profilleyici gerekir.
Sensörleri de uyut
Sensör ve modüller ESP32 uyurken de akım çekmeye devam eder. Sensörün beslemesini bir GPIO veya MOSFET üzerinden verip ölçüm bitince kesebilirsin. Sensörün uyanınca kararlı ölçüme geçmesi için gereken süreyi veri sayfasından kontrol et.
Kaba hesap
Ortalama akım ≈ (uyanık akım × uyanık süre + uyku akımı × uyku süresi) / toplam süre. Pil kapasitesini (mAh) bu ortalamaya bölersen yaklaşık çalışma süresini (saat) bulursun. Gerçekte pilin kendi kendine boşalması ve soğukta kapasite düşüşü nedeniyle sonuç daha kısa olur, bu yüzden pay bırak.