Yazılardaki ürünleri komponentci.net'te inceleyebilir, hemen sipariş verebilirsiniz.komponentci.net →
KomponentciBlog Mağaza
Blog  ›  Projeler

ESP32 Hava İstasyonu Projesi: Sensörler, Kod ve Web Sayfası

ESP32 Hava İstasyonu Projesi: Sensörler, Kod ve Web Sayfası
Kısa cevap

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 sunucuUSB ile beslenirEvet
BME280Sıcaklık, nem, basınçI2C (SDA, SCL)Evet (ya da DHT22)
DHT22 (AM2302)Sıcaklık, nemTek 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 OLEDDeğerleri gösterirI2Cİ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.

  1. BME280 kartının VCC ucunu ESP32'nin 3V3 pinine, GND ucunu GND'ye bağlayın.
  2. SDA'yı GPIO21'e, SCL'yi GPIO22'ye bağlayın. OLED ekranı ve ışık sensörünü aynı hatlara paralel ekleyin.
  3. Yağmur sensörü modülünün AO çıkışını GPIO34'e, VCC'yi 3V3'e, GND'yi GND'ye bağlayın.
  4. DHT22 kullanıyorsanız veri ucunu GPIO4'e bağlayın.
  5. Kartı USB ile bilgisayara takın ve Arduino IDE'de "Adafruit BME280" ile "Adafruit SSD1306" kütüphanelerini kurun.
  6. Ö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.

Bu yazıdaki ürünler

Diğer yazılar

09 Kasım 20266 dk okuma

Arduino Park Sensörü Projesi: Adım Adım Yapılışı

Arduino park sensörü, HC-SR04 ultrasonik mesafe sensörü, bir buzzer ve LED'lerle yapılabilen basit bir projedir. Sensör engele olan mesafeyi...

Devamını oku →
09 Kasım 20266 dk okuma

Dimmer Nedir? Dimmer Modülü Nasıl Bağlanır?

Dimmer, bir yüke giden gücü azaltarak lambanın parlaklığını ya da motorun devrini ayarlayan bir devredir. 220V AC tarafında genellikle triya...

Devamını oku →
09 Kasım 20265 dk okuma

NFC Nedir? NFC Kart ve Etiket Çeşitleri

NFC, 13,56 MHz frekansında birkaç santimetre mesafede çalışan kısa menzilli bir kablosuz haberleşme teknolojisidir. Telefonla temassız ödeme...

Devamını oku →
09 Kasım 20265 dk okuma

Kablo Pabucu Çeşitleri: Seçim ve Doğru Sıkma

Kablo pabucu, kablonun ucuna sıkılarak onu bir vida, cıvata ya da bara bağlantısına güvenli şekilde bağlayan metal uçtur. Başlıca çeşitleri...

Devamını oku →
09 Kasım 20266 dk okuma

Kuluçka Makinesi Nasıl Yapılır? Adım Adım Rehber

Kuluçka makinesi; yalıtımlı bir kutu, ısıtıcı, sıcaklık ve nem kontrol eden bir termostat, hava dolaşımı için fan ve yumurtaları çeviren bir...

Devamını oku →
09 Kasım 20265 dk okuma

Akıllı Sera Projesi: Arduino ve ESP32 ile Otomatik Sera

Akıllı sera, toprak nem sensörü ile sıcaklık-nem sensörünün ölçümlerine göre pompayı, fanı ve aydınlatmayı röleler üzerinden kendiliğinden a...

Devamını oku →