ESP32 hava istasyonu, bir ESP32 kartına BME280 gibi bir sıcaklık-nem-basınç sensörü, isteğe bağlı yağmur ve ışık sensörü ile OLED ekran bağlanarak kurulur. Ölçümler ekranda gösterilir ve ESP32 kendi Wi-Fi web sayfasında yayınlar. Temel sürüm birkaç saatte, lehim gerektirmeden breadboard üzerinde çalışır.
Evinizin balkonunda ya da bahçede sıcaklığı, nemi ve hava basıncını ölçen, sonuçları telefonunuzdan görebileceğiniz bir istasyon kurmak için pahalı bir hazır cihaza gerek yoktur. Bu rehberde ESP32 hava istasyonu projesini sensör seçiminden bağlantıya, örnek koddan dış ortam montajına kadar anlatıyoruz. Arduino IDE ile en az bir proje yüklemiş olmanız yeterli.
ESP32 hava istasyonu nedir?
ESP32 hava istasyonu, ESP32 mikrodenetleyicisine bağlı sensörlerle sıcaklık, bağıl nem, hava basıncı ve isteğe bağlı olarak yağmur ile ışık şiddetini ölçen, verileri ekranda ve Wi-Fi üzerinden gösteren bir ölçüm sistemidir. ESP32'nin Wi-Fi'si yerleşik olduğu için ayrı bir ağ modülü gerekmez. Kartı hiç kullanmadıysanız önce ESP32 başlangıç rehberi yazımıza göz atabilirsiniz.
Hangi parçalara ihtiyacınız var?
Temel bir istasyon için bir ESP32 kartı, bir ortam sensörü ve bir ekran yeterlidir; yağmur ve ışık sensörleri isteğe bağlıdır. Beyin olarak ESP32 30 pin Wi-Fi ve Bluetooth geliştirme kartı kullanabilirsiniz. Sıcaklık, nem ve basıncı tek çipte ölçen BME280 I2C/SPI sensör kartı projenin merkezidir.
| Parça | Ölçtüğü / yaptığı iş | Bağlantı | Gerekli mi? |
|---|---|---|---|
| ESP32 geliştirme kartı | Okuma, ekran, web sunucu | USB ile beslenir | Evet |
| BME280 | Sıcaklık, nem, basınç | I2C (SDA, SCL) | Evet (ya da DHT22) |
| DHT22 (AM2302) | Sıcaklık, nem | Tek veri hattı | BME280 yoksa |
| Yağmur sensörü | Plaka üzerinde su var mı | Analog + dijital çıkış | İsteğe bağlı |
| VEML7700 ışık sensörü | Ortam ışığı (lux) | I2C | İsteğe bağlı |
| 0,96" 128x64 OLED | Değerleri gösterir | I2C | İsteğe bağlı |
BME280 mi, DHT22 mi kullanmalıyım?
Basınç da ölçmek istiyorsanız BME280 kullanın; yalnızca sıcaklık ve nem yetiyorsa DHT22 de iş görür. BME280 I2C hattına bağlanır ve ekranla aynı iki kabloyu paylaşır. DHT22 sıcaklık ve nem sensörü kartı ise tek veri pini kullanır ve okumalar arasında en az 2 saniye beklemek ister. İki sensörün farklarını DHT11 ve DHT22 farkı yazısında ayrıntılı anlattık.
Dikkat edilecek bir nokta: BMP280 adlı benzer çip nem ölçmez. Kodda sensörü başlatırken çip kimliği BME280 için 0x60, BMP280 için 0x58 döner. Nem değeri hep sıfır geliyorsa elinizdeki çip BMP280 olabilir.
Parçalar nasıl bağlanır?
I2C cihazlar ESP32'de varsayılan olarak GPIO21 (SDA) ve GPIO22 (SCL) pinlerine, analog sensörler ise ADC1 pinlerine bağlanır. BME280, OLED ve VEML7700 aynı SDA ve SCL hatlarını paylaşabilir; her birinin I2C adresi farklıdır. Bu yüzden adresler çakışmadığı sürece aynı hatta birden fazla cihaz sorunsuz çalışır.
- BME280 kartının VCC ucunu ESP32'nin 3V3 pinine, GND ucunu GND'ye bağlayın.
- SDA'yı GPIO21'e, SCL'yi GPIO22'ye bağlayın. OLED ekranı ve ışık sensörünü aynı hatlara paralel ekleyin.
- Yağmur sensörü modülünün AO çıkışını GPIO34'e, VCC'yi 3V3'e, GND'yi GND'ye bağlayın.
- DHT22 kullanıyorsanız veri ucunu GPIO4'e bağlayın.
- Kartı USB ile bilgisayara takın ve Arduino IDE'de "Adafruit BME280" ile "Adafruit SSD1306" kütüphanelerini kurun.
- Önce yalnızca seri monitöre yazan kısa bir testle sensörü doğrulayın, sonra web sayfasını ekleyin.
Yağmur sensörünü ADC2 pinlerine bağlamayın. ESP32'de Wi-Fi açıkken ADC2 kanalları okunamaz; GPIO32-39 arasındaki ADC1 pinleri güvenlidir. GPIO34-39 yalnızca giriş pinidir, bu yüzden analog okuma için uygundur.
Örnek kod nasıl çalışır?
Aşağıdaki kod ESP32'yi Wi-Fi ağınıza bağlar, BME280'i okur ve tarayıcıda açılan basit bir sayfada değerleri gösterir. Kendi ağ adınızı ve şifrenizi yazmanız yeterlidir.
#include <WiFi.h>
#include <WebServer.h>
#include <Wire.h>
#include <Adafruit_BME280.h>
const char* AG = "AgAdiniz";
const char* SIFRE = "Sifreniz";
Adafruit_BME280 bme;
WebServer sunucu(80);
void anaSayfa() {
float t = bme.readTemperature();
float h = bme.readHumidity();
float p = bme.readPressure() / 100.0F; // hPa
int yagmur = analogRead(34); // 0-4095
String s = "<meta http-equiv='refresh' content='30'>";
s += "<h1>Hava istasyonu</h1>";
s += "Sicaklik: " + String(t, 1) + " C<br>";
s += "Nem: " + String(h, 0) + " %<br>";
s += "Basinc: " + String(p, 1) + " hPa<br>";
s += "Yagmur ham deger: " + String(yagmur);
sunucu.send(200, "text/html", s);
}
void setup() {
Serial.begin(115200);
if (!bme.begin(0x76)) bme.begin(0x77); // kart adresi 0x76 ya da 0x77
WiFi.begin(AG, SIFRE);
while (WiFi.status() != WL_CONNECTED) delay(500);
Serial.println(WiFi.localIP()); // tarayicida bu adresi acin
sunucu.on("/", anaSayfa);
sunucu.begin();
}
void loop() { sunucu.handleClient(); }
Seri monitörde görünen IP adresini aynı ağdaki telefonunuzun tarayıcısına yazdığınızda sayfa açılır ve 30 saniyede bir yenilenir. OLED ekran için ayrı bir fonksiyon yazıp her 5-10 saniyede bir değerleri ekrana basabilirsiniz. Ekran olarak 0,96 inç 128x64 OLED ekran kullanabilirsiniz; bu ekranın kütüphane ve bağlantı ayrıntıları ayrı bir konudur.
Yağmur ve ışık sensörü ne kadar işe yarar?
Yağmur sensörü "yağıyor mu, yağmıyor mu" bilgisini verir, yağış miktarını ölçmez. Kuru plakada analog okuma yüksek, ıslak plakada düşük olur; eşik değerini kendi plakanızla deneyerek belirlersiniz. Plakayı sürekli beslemek iletken izlerin aşınmasını hızlandırır, bu yüzden beslemeyi bir GPIO üzerinden yalnızca ölçüm anında açmak plakanın ömrünü uzatır.
Işık için VEML7700 ortam ışık sensörü lux cinsinden dijital değer verir ve I2C hattına eklenir. Gün doğumu, bulutluluk ya da güneş paneli verimi gibi bilgileri takip etmek için kullanılabilir.
Sensörler dış ortama nasıl yerleştirilir?
Sıcaklık ve nem sensörü güneş almayan, hava alan bir koruma kutusuna konmalıdır. Doğrudan güneş altında kalan bir sensör hava sıcaklığını gerçekte olduğundan birkaç derece yüksek gösterebilir. Meteoroloji istasyonlarında kullanılan beyaz, panjurlu kutuların amacı budur; benzerini üst üste dizilmiş beyaz plastik tabaklarla yapabilirsiniz.
ESP32 çalışırken ısınır, bu yüzden sensörü karttan birkaç santimetre uzağa, kablo ile ayırın. Yağmur plakası açıkta ve hafif eğik durmalıdır; elektronik kart ise su geçirmez bir kutuda kalmalıdır. Kablo girişlerini aşağıdan yapmak suyun kutuya akmasını önler.
Sık sorulan sorular
ESP32 hava istasyonu internet olmadan çalışır mı?
Evet, yerel ağda çalışır; internet bağlantısı gerekmez. ESP32 ev modeminize bağlanır ve aynı ağdaki telefon ya da bilgisayar sayfayı açar. Modem yoksa ESP32'yi erişim noktası (AP) modunda başlatıp telefonunuzu doğrudan ona bağlayabilirsiniz. Verileri dışarıdan görmek ya da bulutta saklamak isterseniz o zaman internet ve bir veri servisi gerekir.
BME280 sıcaklığı neden olduğundan yüksek gösteriyor?
Çoğunlukla sensör, ESP32'nin ya da regülatörün ısısından etkilenir. Sensörü karttan uzaklaştırın ve ölçümler arasında sensörü "forced mode" ile yalnızca okuma anında çalıştırın. Güneş alan bir kutuda olması da aynı etkiyi yapar. Birkaç saat boyunca güvendiğiniz bir termometreyle karşılaştırıp sabit bir sapma varsa kodda düzeltme ekleyebilirsiniz.
Basınç değeri neden hava durumu sitesindekinden farklı?
Hava durumu siteleri deniz seviyesine indirgenmiş basıncı verir, BME280 ise bulunduğunuz yükseklikteki gerçek basıncı ölçer. Yükseklik arttıkça ölçülen basınç düşer. Karşılaştırma yapmak için bulunduğunuz rakımı kullanarak deniz seviyesi basıncını hesaplayan bir formül ekleyin. Adafruit kütüphanesindeki seaLevelForAltitude fonksiyonu bu işi yapar.
Hava istasyonunu pille çalıştırabilir miyim?
Evet, ancak sürekli açık Wi-Fi pili hızlı tüketir. Pille çalışacak bir istasyonda ESP32 ölçüm yapıp veriyi gönderdikten sonra derin uykuya geçmelidir. Pil tarafında korumalı bir şarj devresi kullanın; temel bağlantıyı TP4056 ile 18650 şarj devresi yazımızda anlattık. Ölçüm aralığını uzatmak da tüketimi doğrudan azaltır.
Verileri nasıl kaydedebilirim?
En basit yol, ölçümleri belirli aralıklarla bir veri servisine ya da evdeki bir sunucuya göndermektir. ESP32, HTTP ya da MQTT ile Home Assistant, InfluxDB gibi sistemlere veri yollayabilir. İnternetsiz kayıt istiyorsanız bir microSD kart modülü ekleyip değerleri CSV dosyasına yazabilir, sonra Excel'de grafik çizebilirsiniz.
Özet
- ESP32 hava istasyonu için ESP32 kartı ve bir BME280 sensörü yeterlidir; OLED, yağmur ve ışık sensörü isteğe bağlıdır.
- BME280, OLED ve VEML7700 aynı I2C hattını (GPIO21/22) paylaşır.
- Wi-Fi açıkken analog sensörleri ADC1 pinlerine (GPIO32-39) bağlayın.
- Sensörü güneşten ve ESP32'nin ısısından koruyan, hava alan bir kutuya yerleştirin.
- Pille çalışacak istasyonda derin uyku kullanın.
