Evdeki nem ve sıcaklık sensörlerini sürekli pille çalıştırmakta zorlanıyorum. ESP32'nin uyku modlarını kullanarak gerçekten haftalarca dayanan bir sistem kurmak mümkün mü, yoksa belli başlı sensörler çok mu enerji harcar?
Merhaba sevgili akıllı ev meraklıları ve düşük güç tüketimi arayışında olan değerli okuyucular,
Bugün sizin de benim gibi sıkça karşılaştığınız, akıllı ev sensörlerinin en can sıkıcı sorunlarından birine, yani pil ömrüne odaklanacağız. Özellikle nem ve sıcaklık gibi sürekli izlenmesi gereken veriler söz konusu olduğunda, pillerin haftalar yerine günler içinde bitmesi, projenin tüm cazibesini kaybetmesine neden olabiliyor. Ama size harika bir haberim var: ESP32'nin gücünü ve özellikle uyku modlarını doğru kullanarak, haftalarca, hatta aylar boyunca pille çalışan sensörler inşa etmek hayal değil! Gelin, bu yolculuğa birlikte çıkalım.
Hepimiz evlerimizi daha akıllı, daha konforlu hale getirmek istiyoruz. Oda sıcaklığını, nem seviyesini, hava kalitesini anlık olarak bilmek ve buna göre otomasyonlar kurmak harika bir fikir. Ancak bu sensörleri her yere kablo çekmeden, pille çalıştırmak istediğimizde, pil değişim döngüsü kısa sürede bir kabusa dönüşebiliyor. İşte tam bu noktada ESP32, bize olağanüstü yetenekler sunuyor.
ESP32, güçlü Wi-Fi ve Bluetooth özellikleriyle, çift çekirdekli işlemcisiyle ve zengin çevresel birimleriyle (GPIO, ADC, I2C, SPI vb.) akıllı ev projeleri için biçilmiş kaftan. Ancak, bu kadar gücün bir bedeli var: Aktif durumda yüksek enerji tüketimi. Peki, bu güçlü işlemciyi nasıl düşük güç tüketimli bir canavara dönüştürebiliriz? İşte sır burada: Uyku Modları!
ESP32, teoride yüksek akım çeken bir mikrodenetleyici olabilir. Wi-Fi modülü devredeyken 200-300 mA'ya kadar çıkabilen anlık akım çekimleri görmek şaşırtıcı değil. Bu değerler, küçük bir pille birkaç saat içinde pilinizi bitirebilir. Ancak ESP32'nin tasarımında, bu sorunu çözmek için çeşitli güç yönetimi modları bulunmaktadır. Bu modları doğru anladığımızda ve uyguladığımızda, ESP32'nin gelişmiş uyku modları (özellikle Deep Sleep) sayesinde ortalama akım tüketimini mikroamper seviyelerine çekebiliriz. Bu da bize haftalarca, hatta aylarca süren pil ömrü kapılarını aralar.
ESP32'nin en önemli özelliği, farklı güç tasarrufu modlarına sahip olmasıdır. Bunlar arasında en çok öne çıkanlar Light Sleep ve Deep Sleep modlarıdır.
Deep Sleep modunda ESP32, "uyandırma" tetikleyicisi bekler. Bu tetikleyiciler şunlar olabilir:
Deep Sleep'e geçmek için Arduino IDE'de basitçe ESP.deepSleep(uyku_suresi_mikrosaniye); komutunu kullanırız. Uyanma zamanlayıcısını ayarlamak için ise esp_sleep_enable_timer_wakeup(uyku_suresi_mikrosaniye); fonksiyonunu çağırırız.
Burada pek çok kişinin gözden kaçırdığı, ancak pil ömrü için kritik öneme sahip bir noktaya değinmek istiyorum: Sensörün kendisinin güç tüketimi!
Tavsiye: Nem ve sıcaklık sensörü arıyorsanız, BME280 (sıcaklık, nem, basınç) veya sadece sıcaklık ve basınç okuyan BMP280'i tercih edin. Bunlar küçük, doğru ve en önemlisi güç kontrollü çalışmaya çok uygunlardır.
Şimdi gelelim işin pratiğine. Nasıl bir yol izlemeliyiz?
Sensör Güç Kontrolü: I2C sensörünüzü ESP32'nin bir GPIO pini üzerinden kontrol edilen bir MOSFET veya transistör aracılığıyla besleyin. Böylece ESP32 uykuya geçtiğinde sensöre giden elektriği tamamen kesebilirsiniz.
Basit Bağlantı Şeması (Sensör Güç Kontrolü İçin):
ESP32 GPIO (örn: D13) -> MOSFET Gate (Kapı)
LiPo Pozitif (+) -> MOSFET Source (Kaynak)
MOSFET Drain (Oluk) -> Sensör VCC
Sensör GND -> ESP32 GND
Sensör SDA -> ESP32 SDA
Sensör SCL -> ESP32 SCL
Düşük güç tüketimi için yazılım tarafında temel prensibimiz şudur: Minimum sürede maksimum işi yap ve tekrar uykuya geç.
setup() fonksiyonu her uyandığında çalışacaktır. Burada, uyanmanın nedenini kontrol edebilirsiniz (timer mı, external wakeup mı?).WiFi.begin(SSID, PASSWORD);WiFi.disconnect(true); WiFi.mode(WIFI_OFF); komutlarıyla Wi-Fi'yi tamamen kapatın. Bu, önemli bir güç tasarrufu sağlar.esp_sleep_enable_timer_wakeup() ve ESP.deepSleep() komutları ile uykuya geçin.`cpp
// WiFi Bilgileri
const char ssid = "WIFI_ADINIZ";
const char password = "WIFI_ŞİFRENİZ";
// Sensör Güç Kontrol Pini
const int SENSOR_POWER_PIN = 13; // Bir MOSFET'i kontrol eden GPIO pini
// BME280 Sensörü
Adafruit_BME280 bme; // I2C ile varsayılan adres 0x76
// Uyku Süresi (10 Dakika = 600 saniye = 600.000.000 mikrosaniye)
RTC_DATA_ATTR int bootCount = 0; // RTC belleğinde saklanır, Deep Sleep'ten sonra değerini korur
void setup() {
Serial.begin(115200);
delay(100);
// Uyanma sayacını artır
++bootCount;
Serial.printf("Uyandı #%d kez\n", bootCount);
// Sensöre güç ver
pinMode(SENSOR_POWER_PIN, OUTPUT);
digitalWrite(SENSOR_POWER_PIN, HIGH);
delay(100); // Sensörün stabilize olması için kısa bir bekleme
// BME280 başlat
if (!bme.begin(0x76)) {
Serial.println("BME280 bulunamadı! Bağlantıları kontrol edin.");
digitalWrite(SENSOR_POWER_PIN, LOW); // Hata durumunda sensör gücünü kes
// Hata durumunda yine de uykuya geç
Serial.printf("Deep Sleep'e geçiliyor %d saniye sonra.\n", DEEP_SLEEP_TIME_SEC);
esp_sleep_enable_timer_wakeup(DEEP_SLEEP_TIME_SEC * 1000000);
esp_deep_sleep_start();
}
Serial.println("BME280 başarıyla başlatıldı.");
// Sensörden veri oku
float sicaklik = bme.readTemperature();
float nem = bme.readHumidity();
float basinç = bme.readPressure() / 100.0F; // hPa cinsinden
Serial.printf("Sıcaklık: %.2f °C\n", sicaklik);
Serial.printf("Nem: %.2f %%\n", nem);
Serial.printf("Basınç: %.2f hPa\n", basinç);
// Sensörün gücünü kes - KRİTİK ADIM!
digitalWrite(SENSOR_POWER_PIN, LOW);
delay(50); // Sensörün tamamen kapanması için
// Wi-Fi Bağlantısı
Serial.print("Wi-Fi bağlanılıyor...");
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
int attempt = 0;
while (WiFi.status() != WL_CONNECTED && attempt < 20) {
delay(500);
Serial.print(".");
attempt++;
}
if (WiFi.status() == WL_CONNECTED) {
Serial.println("\nWi-Fi Bağlandı.");
Serial.print("IP Adresi: ");
Serial.println(WiFi.localIP());
// Burada verilerinizi bir sunucuya (MQTT/HTTP) gönderebilirsiniz
// Örnek olarak sadece seri portta gösteriyoruz.
Serial.println("Veriler başarıyla gönderildi (simülasyon).");
// Wi-Fi'yi kapat - KRİTİK ADIM!
WiFi.disconnect(true);
WiFi.mode(WIFI_OFF);
Serial.println("Wi-Fi kapatıldı.");
} else {
Serial.println("\nWi-Fi Bağlantı Hatası!");
}
// Deep Sleep'e geç
Serial.printf("Deep Sleep'e geçiliyor %d saniye sonra.\n", DEEP_SLEEP_TIME_SEC);
esp_sleep_enable_timer_wakeup(DEEP_SLEEP_TIME_SEC * 1000000); // mikrosaniye cinsinden
esp_deep_sleep_start();
}
void loop() {
// Bu kısım Deep Sleep kullandığımızda çalışmaz
}
`
Projeyi kurduktan sonra multimetre ile akım ölçümü yapmak hayatidir! Seri olarak devreye bağlayacağınız bir multimetre ile:
Bu ölçümler size darboğazı gösterecektir.
Eğer aktif akım çok yüksekse, Wi-Fi bağlantı süresini kısaltabilir veya daha az veri gönderebilirsiniz.
Eğer uyku akımı yüksekse, kart üzerindeki gereksiz LED'leri, USB-UART çipini kontrol edin. Çoğu geliştirme kartında USB-UART çipi Deep Sleep'teyken bile bir miktar akım çeker. Nihai üründe bu çipi ve onunla ilgili devreleri kaldırarak daha düşük bir uyku akımı elde edebilirsiniz.
Kendi deneyimlerimden yola çıkarak şunu rahatlıkla söyleyebilirim: Benim evimde 15 dakikada bir veri gönderen bir BME280 sensörü, bir ESP32 devkit kartı (üzerindeki güç LED'i devre dışı bırakılmış şekilde) ve 1200 mAh'lik standart bir LiPo pil ile 2 aydan daha uzun süre sorunsuz bir şekilde çalışabiliyor. Eğer kart üzerindeki gereksiz bileşenleri daha da optimize edebilirseniz (USB-UART çipi gibi), bu süreyi 3-4 aya kadar çıkarmak bile mümkün.
Buradaki en büyük fark, Wi-Fi'nin sadece veri gönderme anında açılıp, işi bittiğinde derhal kapatılması ve sensörün gücünün tamamen kesilmesidir.
WiFi.begin() sonrası bir döngüde WiFi.status() kontrolü yaparak ve gerekirse belirli bir deneme sayısından sonra pes edip tekrar uykuya geçerek bu durumu yönetebilirsiniz.Gördüğünüz gibi, ESP32 ile düşük güç tüketimli, haftalarca, hatta aylarca pil ömrü sunan akıllı ev sensörleri yapmak kesinlikle mümkün! İşin sırrı, ESP32'nin Deep Sleep modunu ve I2C sensörlerin güç kontrol yeteneğini akıllıca birleştirmekte yatıyor.
Bu rehberle kendi düşük güç tüketimli sensörlerinizi tasarlarken, biraz deney ve hata yapmaktan çekinmeyin. Akım ölçümleri yapın, kodunuzu optimize edin ve donanım seçimlerinizi gözden geçirin. Unutmayın, her proje biraz farklıdır ve en iyi sonuçlar genellikle kişisel denemelerle elde edilir.
Başarılar dilerim, akıllı eviniz ışıl ışıl ve sensörleriniz hep çalışır durumda kalsın!