NodeMCU ESP8266 Hava İstasyonu Uygulaması

NodeMCU ESP8266 Hava İstasyonu Uygulaması

NodeMCU ESP8266 Hava İstasyonu Uygulaması; sıcaklık, bağıl nem, atmosferik basınç ve yağmur yağış durumunu donanımsal sensörler yardımıyla anlık ölçen ve bu verileri yerel Wi-Fi ağı üzerinden modern bir web arayüzünde (dashboard) yayınlayan gelişmiş bir IoT projesidir.

Nesnelerin İnterneti (IoT) teknolojilerinin gelişmesiyle birlikte, kendi çevresel verilerimizi toplayıp analiz edebileceğimiz kişisel istasyonlar kurmak son derece popüler ve öğretici bir hale gelmiştir.

Bu rehberimizde, DHT11 sıcaklık-nem, BMP180 barometrik basınç ve FC-37 yağmur algılama sensörlerinin elektriksel çalışma prensiplerini, donanımsal devre şeması kurulumunu, web sunucu mimarisini ve AJAX (Asynchronous JavaScript and XML) tabanlı anlık veri güncelleme tekniklerini tüm teknik ayrıntılarıyla ele alacağız.

Proje kapsamında NodeMCU ESP8266-12E Wi-Fi geliştirme kartını kullanacağız. Eğer ESP8266 veya ESP32 kartlarının Arduino IDE entegrasyonunu tamamlamadıysanız, güncel board manager ayarları için kapsamlı Arduino IDE’ye ESP32 Desteği Kurmak rehberimizi inceleyebilirsiniz.

Yazı İçeriği

Kişisel Hava Durumu İstasyonu Mantığı

IoT tabanlı hava durumu istasyonları iki ana tasarım modeline ayrılır. Birincisi, harici açık hava durumu servislerinin (OpenWeatherMap, Weather Underground vb.) API sunucularına internet üzerinden bağlanarak bölgenizdeki tahmin verilerini çeken modeldir. İkincisi ise, dış dünyaya kurulan yerel fiziksel sensörler yardımıyla mikro-iklim verilerini anlık ölçen ve kendi bağımsız veri sunucusunu barındıran modeldir. Bu projemizde, dışa bağımlılığı sıfıra indiren ve tamamen kendi ölçtüğümüz verileri yayınlayan kişisel fiziksel istasyon modelini hayata geçireceğiz.

Hava İstasyonu Donanımsal Sensörleri ve Çalışma Fiziği

Kararlı ve doğru ölçümler elde edebilmek için, kullandığımız sensörlerin fiziksel ve elektriksel çalışma prensiplerini anlamak mühendislik açısından büyük önem taşır. Çeşitli sensörlerin detaylı karşılaştırmaları için hazırladığımız kapsamlı Arduino Sensör Rehberimize göz atabilirsiniz.

1. DHT11 Sıcaklık ve Nem Sensörü

DHT11, ortamın bağıl nem oranını ölçmek için kapasitif bir nem algılama bileşeni ve sıcaklığı ölçmek için negatif sıcaklık katsayılı bir NTC termistör kullanan entegre bir sensördür. Çip içerisinde yer alan dahili 8-bitlik mikrodenetleyici, bu analog algılamaları dijital verilere dönüştürerek tek hatlı (single-wire) tescilli bir seri protokol üzerinden mikrodenetleyiciye aktarır. Protokol, 40-bit uzunluğunda veri paketleri (sıcaklık, nem ve checksum doğrulaması) yayınlar.

DHT11 Sıcaklık ve Nem Sensörü
DHT11 Sensör

DHT11 sensörünü farklı platformlarda kodlamayı öğrenmek ve grafik arayüzlü termometre uygulaması gerçekleştirmek için DHT11 ve mBlock ile LCD Termometre Yapımı içeriğimizi inceleyebilirsiniz.

2. BMP180 Barometrik Basınç ve Yükseklik Sensörü

BMP180, Bosch Sensortec tarafından geliştirilen, piezo-rezistif silikon basınç sensörü teknolojisine sahip yüksek hassasiyetli dijital barometrik basınç sensörüdür. Atmosferik basıncı ölçerek I2C (Inter-Integrated Circuit) haberleşme veri yolu üzerinden 300\text{ hPa} ile 1100\text{ hPa} aralığında dijital veriler sunar. Çip içerisinde fabrikada kalibre edilmiş 11 adet kalibrasyon katsayısı bulunur, bu katsayılar sıcaklık kompanzasyonlu hassas basınç ölçümleri hesaplamada kullanılır.

BMP180 Barometrik Basınç Sensörü
BMP180 Barometrik Sensör

3. FC-37 Yağmur / Sıvı Algılama Sensörü

FC-37 yağmur sensörü, geniş bir algılama yüzeyine sahip nikel kaplı bir PCB plaka ve elektriksel karşılaştırıcı kartından (LM393) oluşur. Yağmur damlaları algılama plakasının üzerine düştüğünde, su iletken yollar arasında elektriksel bir köprü kurarak plakanın toplam empedansını (direncini) düşürür. Plaka kuruyken yaklaşık 2\text{ M}\Omega direnç sunarken, tamamen ıslandığında direnç 100\text{ k}\Omega seviyesinin altına iner. LM393 karşılaştırıcı kartı, bu direnç değişimini analog çıkış (A0) veya dijital eşik çıkışı (D0) olarak mikrodenetleyiciye iletir.

FC-37 Yağmur Sensörü Modülü
FC37 Yağmur Sensörü

Donanımsal Devre Şeması Kurulumu

Sensörleri NodeMCU ESP8266 kartına bağlarken dikkat edilmesi gereken en önemli nokta, I2C veri yolu (BMP180 için) pinlerinin doğru seçilmesidir. NodeMCU üzerinde varsayılan donanımsal I2C hatları D2 (SDA) ve D1 (SCL) pinleridir. FC-37 yağmur sensörünün analog çıkışı ise ESP8266’nın tek analog giriş kanalı olan A0 (ADC0) pinine bağlanmalıdır. Devre kurulumunu aşağıdaki şemayı takip ederek gerçekleştirebilirsiniz:

NodeMCU ESP8266 Hava İstasyonu Devre Şeması
ESP8266 Hava İstasyonu

İlk Kurulumda Donanımsal Doğrulama ve Kontrol

Büyük IoT projelerinde tüm sistemi bir anda çalıştırıp test etmek, hata ayıklamayı zorlaştırır. Bu yüzden şu doğrulamaları sırasıyla yapmanız önerilir:

  • DHT11, BMP180 ve FC-37 sensörlerinin besleme voltajlarını (VCC) ve toprak (GND) hatlarını ortaklaştırın. BMP180 3.3\text{ V} hattından, DHT11 ve FC-37 ise kararlı çalışabilmeleri için 5\text{ V} (Vin) hattından beslenmelidir.
  • Devreyi kurduktan sonra öncelikle bir I2C tarayıcı kod çalıştırarak BMP180 sensörünün 0\times77 veya 0\times75 adresinde görünür olduğunu doğrulayın.
  • Kod yükleme aşamasında Wi-Fi SSID ve parolanızın yerel yönlendiricinizle (router) birebir eşleştiğinden emin olun.
  • Seri haberleşme ekranında sensörlerden doğru verilerin geldiğini gördükten sonra web arayüzüne bağlanmayı deneyin.

Yazılımsal Mimari ve Proje Kodları

Projenin yazılımsal kararlılığını artırmak amacıyla web arayüz kodunu (HTML/CSS) ve ana program kodunu (C++) ayrı dosyalar halinde yapılandıracağız. Projeyi derlemeden önce şu kütüphaneleri Arduino IDE Kitaplık Yöneticisi üzerinden veya GitHub depolarından indirdiğinizden emin olun: SparkFun BMP180 Library ve DHTesp Library by Beegee-tokyo.

1. Web Arayüz Tasarım Kodu (index.h)

Bu dosya, ESP8266 web sunucusu tarafından tarayıcıya gönderilecek olan dinamik HTML ve CSS kodlarını barındırır. Sayfa, tarayıcıda widget benzeri premium bir görünüm sunar. Arayüzün görüntüsü şu şekildedir:

Hava İstasyonu Web Arayüzü Widget Tasarımı
Web Arayüzü

Aşağıdaki kodu kopyalayıp index.h adıyla kaydedin ve ana Arduino (.ino) projenizin yer aldığı klasörün içerisine yerleştirin:

2. Ana Program Kodu (Arduino .ino)

Bu dosya, sensörleri okuyan, Wi-Fi ağ bağlantısını yöneten ve gelen HTTP isteklerine yanıt dönen ana kontrol yazılımıdır. Kod içerisindeki ssid ve password alanlarını kendi Wi-Fi ağ bilgilerinizle değiştirmelisiniz:

Sistem Bağlantı ve Test Aşaması

Yazılımı NodeMCU geliştirme kartınıza yükledikten sonra, USB kablosu bilgisayara bağlı durumdayken Seri Monitörü açın. Kart ağa bağlandığında yerel yönlendiriciden aldığı IP adresini (örn: 192.168.1.100) ekrana yazdıracaktır. Aynı yerel ağa (Wi-Fi) bağlı olan bilgisayarınızdan veya akıllı telefonunuzdan bu IP adresini tarayıcınıza yazarak web arayüzünü açabilirsiniz.

Kurulu ESP8266 Hava İstasyonu Fiziksel Bağlantısı

AJAX Tabanlı Veri Güncelleme Mantığı: Tasarladığımız web arayüzünün en önemli mühendislik ayrıntısı, sayfayı yeniden yüklemeye (refresh) gerek duymadan verileri güncelleyebilmesidir. Arayüzün arka planında çalışan JavaScript kodu, her 2 saniyede bir ESP8266 sunucusunun /readSensors veya /readADC gibi uç noktalarına (endpoints) asenkron HTTP GET istekleri gönderir. Sunucudan dönen ham veriler sadece ilgili widget değerlerini dinamik olarak günceller. Bu sayede veri akışı pürüzsüzleşir ve ağ yükü minimize edilir.

Özetle; NodeMCU ESP8266’nın kablosuz ağ yetenekleri, zengin sensör entegrasyonu (I2C ve Analog) ve AJAX tabanlı web sunucusu birleştiğinde son derece kararlı ve başarılı bir kişisel hava istasyonu projesi ortaya çıkmaktadır. Çevresel verileri anlık takip ederek akıllı ev otomasyon sistemlerinize entegre edebilir, IoT alanındaki donanım ve yazılım birleştirme yeteneklerinizi üst seviyeye taşıyabilirsiniz.

Yorum yapma özelliği, forum tarafından gelen istek sebebiyle kapatılmıştır. Lütfen tartışmalar ve sorularınız için topluluk forumumuza katılın.