IoT Projeleri

MicroControlPanel ile NodeMCU ESP8266 ile Oda Sensörlü WiFi Kombi Kontrol Ünitesi Yapımı

NodeMCU ESP8266, DHT22 sıcaklık sensörü ve röle modülü kullanarak WiFi üzerinden kontrol edilebilen akıllı kombi termostat sistemi yapımını adım adım öğrenin. MicroControlPanel platformu ile telefonunuzdan evinizin sıcaklığını izleyin ve kombiyi yönetin.

admin@microcontrolpanel.com 15 Haziran 2025 4 görüntülenme

🏠 Proje Tanıtımı

Kış aylarında evinizin sıcaklığını uzaktan kontrol etmek, enerji tasarrufu sağlamak ve konfor seviyenizi artırmak ister misiniz? Bu projede NodeMCU ESP8266 mikrodenetleyici kartı, DHT22 sıcaklık/nem sensörü ve bir röle modülü kullanarak WiFi üzerinden kontrol edilebilen akıllı bir kombi termostat sistemi yapacağız.

MicroControlPanel platformu sayesinde telefonunuzdan veya bilgisayarınızdan:

  • Anlık oda sıcaklığını ve nem oranını izleyebilir,
  • Kombiyi açıp kapatabilir,
  • Hedef sıcaklık belirleyerek otomatik kontrol sağlayabilir,
  • Sıcaklık geçmişini grafik olarak görüntüleyebilirsiniz.
Zorluk Seviyesi: Başlangıç-Orta  |  Tahmini Süre: 2-3 saat  |  Maliyet: ~150-200 TL

🛒 Gerekli Malzemeler

MalzemeAdetAçıklama
NodeMCU ESP8266 (v3 / Lolin)1WiFi özellikli mikrodenetleyici
DHT22 (AM2302)1Sıcaklık & nem sensörü (±0.5°C hassasiyet)
5V Tek Kanal Röle Modülü1Kombi on/off kontrol (optokuplörlü)
10kΩ Direnç1DHT22 pull-up direnci
Breadboard1Prototipleme için
Jumper Kablolar10+M-M ve M-F
Micro USB Kablo1NodeMCU besleme
5V USB Adaptör1Kalıcı besleme için (en az 1A)

⚠️ Uyarı: Kombinin 220V kontaklarıyla çalışacaksanız mutlaka bir elektrik teknisyeninden destek alın. Bu projede kombi, röle üzerinden kuru kontak (oda termostatı girişi) ile kontrol edilmektedir.

🔌 Devre Bağlantıları

DHT22 Sensör Bağlantısı

DHT22 PinNodeMCU PinAçıklama
VCC (+)3V33.3V besleme
DATAD4 (GPIO2)Veri hattı
GND (−)GNDToprak

📌 DATA pini ile 3V3 arasına 10kΩ pull-up direnci bağlayın.

Röle Modülü Bağlantısı

Röle PinNodeMCU PinAçıklama
VCCVIN (5V)5V besleme (USB'den)
GNDGNDToprak
IND1 (GPIO5)Kontrol sinyali
COMKombi Termostat (+)Ortak uç
NOKombi Termostat (−)Normalde açık kontak
Röle NO (Normally Open) kontağını kullanıyoruz: Röle aktif olduğunda kombi çalışır, pasif olduğunda durur. Bu, kombinin oda termostatı kuru kontak girişine bağlanır.

☁️ MicroControlPanel Platformunda Cihaz Kurulumu

Donanımı kodlamaya başlamadan önce MicroControlPanel'de cihazımızı oluşturalım:

  1. microcontrolpanel.com adresine giriş yapın (veya yeni hesap oluşturun).
  2. Cihazlarım sayfasına gidin ve "+ Yeni Cihaz" butonuna tıklayın.
  3. Cihaz adı: Salon Kombi Kontrol
  4. Oluşturulan Device Token'ı not edin — firmware'de kullanacağız.

Virtual Pin Yapılandırması

Cihaz dashboard'ında şu widgetları ekleyin:

Virtual PinWidgetYönAçıklama
V0Gauge / ValueOkumaOda sıcaklığı (°C)
V1Gauge / ValueOkumaNem oranı (%)
V2SwitchYazmaKombi açma/kapama
V3SliderYazmaHedef sıcaklık (15-30°C)
V4LEDOkumaKombi durumu (çalışıyor/durdu)

🔧 Arduino IDE Hazırlığı

1. ESP8266 Board Desteği

Arduino IDE'de File → Preferences → Additional Board Manager URLs alanına ekleyin:

http://arduino.esp8266.com/stable/package_esp8266com_index.json

Ardından Tools → Board → Boards Manager üzerinden ESP8266 paketini yükleyin.

2. Gerekli Kütüphaneler

Sketch → Include Library → Manage Libraries üzerinden şunları yükleyin:

  • DHT sensor library (Adafruit) — Sıcaklık sensörü
  • ArduinoJson (v7) — JSON işleme
  • WebSockets (by Markus Sattler) — Sunucuya bağlantı

Ayrıca projemizin MicroControlPanel kütüphanesi olan MCPSimpleEsp8266.h header dosyasını Yardım → Kütüphaneler sayfasından indirin ve sketch klasörüne kopyalayın.

3. Board Ayarları

AyarDeğer
BoardNodeMCU 1.0 (ESP-12E Module)
CPU Frequency80 MHz
Flash Size4MB (FS:2MB OTA:~1019KB)
Upload Speed115200

💻 Firmware Kaynak Kodu

Aşağıdaki kodu Arduino IDE'de yeni bir sketch olarak açın ve WiFi/token bilgilerinizi güncelleyin:

#define MCP_PRINT Serial
#include <MCPSimpleEsp8266.h>
#include <DHT.h>

// ── Ayarlar ──
char auth[] = "BURAYA_DEVICE_TOKEN";
char ssid[] = "EvinizinWiFi";
char pass[] = "WiFiSifreniz";
char server[] = "microcontrolpanel.com";

// ── Pin Tanımları ──
#define DHTPIN    D4      // GPIO2 — DHT22 data
#define DHTTYPE   DHT22
#define RELAY_PIN D1      // GPIO5 — Röle kontrol

DHT dht(DHTPIN, DHTTYPE);

float targetTemp   = 22.0;  // Varsayılan hedef
bool  manualSwitch = false;  // Manuel on/off
bool  boilerOn     = false;  // Kombi durumu

unsigned long lastSend = 0;
const unsigned long SEND_INTERVAL = 10000; // 10 saniye

// Termostat kontrol fonksiyonu
void kontrolFonksiyonu() {
    if (manualSwitch) {
        float temp = dht.readTemperature();
        if (!isnan(temp)) {
            if (temp < targetTemp - 0.5) boilerOn = true;
            else if (temp >= targetTemp + 0.5) boilerOn = false;
        }
    } else {
        boilerOn = false;
    }
    digitalWrite(RELAY_PIN, boilerOn ? LOW : HIGH);
}

// V2: Kombi switch (on/off) — platformdan gelir
MCP_WRITE(V2)
{
    int val = param.asInt();
    manualSwitch = (val == 1);
    Serial.printf("[MCP] Kombi switch: %s\n", manualSwitch ? "ON" : "OFF");
    kontrolFonksiyonu();
}

// V3: Hedef sıcaklık — slider'dan gelir
MCP_WRITE(V3)
{
    float val = param.asFloat();
    if (val >= 15.0 && val <= 30.0) {
        targetTemp = val;
        Serial.printf("[MCP] Hedef sıcaklık: %.1f °C\n", targetTemp);
        kontrolFonksiyonu();
    }
}

// Bağlantı kurulduğunda son pin değerlerini iste
MCP_CONNECTED()
{
    MCP.syncVirtual(V2, V3);
    Serial.println("[MCP] Bağlandı, pinler senkronize ediliyor");
}

void setup() {
    Serial.begin(115200);
    pinMode(RELAY_PIN, OUTPUT);
    digitalWrite(RELAY_PIN, HIGH); // Röle OFF (active-low)
    dht.begin();

    MCP.begin(auth, ssid, pass, server, 80);
}

void loop() {
    MCP.run();

    if (millis() - lastSend >= SEND_INTERVAL) {
        lastSend = millis();

        float temp = dht.readTemperature();
        float hum  = dht.readHumidity();

        if (isnan(temp) || isnan(hum)) {
            Serial.println("DHT okuma hatası!");
            return;
        }

        kontrolFonksiyonu();

        // Platforma sensör verilerini gönder
        MCP.virtualWrite(V0, temp);             // Sıcaklık
        MCP.virtualWrite(V1, hum);              // Nem
        MCP.virtualWrite(V4, boilerOn ? 1 : 0); // Kombi durum LED

        Serial.printf("T:%.1f°C H:%.1f%% Hedef:%.1f Kombi:%s\n",
                      temp, hum, targetTemp, boilerOn ? "ON" : "OFF");
    }
}

📖 Kod Açıklaması

Termostat Mantığı (Histerezis)

Kombinin sürekli açılıp kapanmasını önlemek için 0.5°C histerezis uygulanmıştır:

  • Sıcaklık hedef - 0.5°C altına düşerse → Kombi AÇILIR
  • Sıcaklık hedef + 0.5°C üzerine çıkarsa → Kombi KAPANIR
  • Arada kalan bölgede mevcut durum korunur (flip-flop)

Bu sayede kombi dakikada 10 kez açılıp kapanmaz, verimli çalışır.

Röle Kontrol Mantığı

Çoğu röle modülü active-low çalışır:

  • digitalWrite(RELAY_PIN, LOW) → Röle aktif (kombi çalışır)
  • digitalWrite(RELAY_PIN, HIGH) → Röle pasif (kombi durur)

MCP_WRITE Makro Sistemi

MCP_WRITE(Vx) makrosu ile sunucudan gelen komutları dinliyoruz. Platformdan bir pin değeri geldiğinde ilgili handler otomatik çağrılır. param nesnesi üzerinden gelen değeri okursunuz:

  • param.asInt() — Tam sayı (0/1 için switch)
  • param.asFloat() — Ondalıklı (sıcaklık, nem)
  • param.asStr() — Metin (string veri)

MCP_CONNECTED() callback'i ile bağlantı sağlandığında MCP.syncVirtual(V2, V3) çağrılarak sunucudaki son pin değerleri cihaza çekilir — böylece cihaz yeniden başlasa bile son durumu bilir.

🚀 Yükleme ve Test

  1. NodeMCU'yu USB ile bilgisayara bağlayın.
  2. Arduino IDE'de doğru Port ve Board seçili olduğundan emin olun.
  3. WIFI_SSID, WIFI_PASS ve DEVICE_TOKEN değerlerini güncelleyin.
  4. Upload butonuna basın ve yüklemenin tamamlanmasını bekleyin.
  5. Serial Monitor'ü açın (115200 baud).

Başarılı bağlantıda şu çıktıları görmelisiniz:

WiFi bağlanıyor... Bağlandı! IP: 192.168.1.42
MCP: Connected to microcontrolpanel.com
T:23.5°C H:45.2% Hedef:22.0 Kombi:OFF

Dashboard'da Kontrol

MicroControlPanel mobil uygulamasını veya web panelini açın:

  • Gauge widget'ında anlık sıcaklık ve nem değerlerini görün
  • Switch ile kombiyi manuel açıp kapatın
  • Slider ile hedef sıcaklığı 15-30°C arasında ayarlayın
  • LED widget'ında kombinin çalışıp çalışmadığını izleyin

⚡ MicroControlPanel Otomasyon Kuralları

Platformun otomasyon özelliğini kullanarak daha akıllı kontrol senaryoları oluşturabilirsiniz:

Örnek 1: Düşük Sıcaklık Uyarısı

Tetikleyici:V0 (Sıcaklık) < 16°C
Aksiyon:Push bildirim gönder: "Oda sıcaklığı çok düştü!"
Cooldown:30 dakika

Örnek 2: Gece Modu

Tetikleyici:Zamanlayıcı — Her gece 23:00
Aksiyon:V3'e (hedef sıcaklık) "19" yaz

Örnek 3: Sabah Isıtma

Tetikleyici:Zamanlayıcı — Her gün 06:30
Aksiyon:V3'e "23" yaz + V2'ye "1" yaz (kombiyi aç)

Bu otomasyonları Otomasyonlar menüsünden kolayca oluşturabilirsiniz.

✅ Sonuç ve İpuçları

Tebrikler! Artık WiFi üzerinden kontrol edilebilen akıllı bir kombi termostat sisteminiz var. Birkaç önemli ipucu:

🔒 Güvenlik

  • Kombi bağlantısını kuru kontak girişine yapın, asla 220V hatta dokunmayın
  • Röle modülünüzün optokuplörlü olduğundan emin olun
  • Device Token'ınızı kimseyle paylaşmayın

📦 Kalıcı Kurulum İçin

  • Breadboard yerine lehimli perfboard kullanın
  • 3D baskı veya uygun bir kutu içine yerleştirin
  • DHT22 sensörü kutunun dışına çıkarın (doğru okuma için)
  • 5V USB adaptör ile kalıcı besleme sağlayın

🚀 Geliştirme Fikirleri

  • Birden fazla oda sensörü ekleyip DeviceLink ile birbirine bağlayın
  • OLED ekran ekleyerek anlık sıcaklığı cihaz üzerinde gösterin
  • Pencere açık/kapalı sensörü (manyetik switch) ekleyerek kombiyi pencere açıldığında otomatik kapatın
  • Enerji tüketimini hesaplamak için kombi çalışma sürelerini loglayın
Bu projeyle ilgili sorunuz varsa Yardım sayfasından bize ulaşabilir veya REST API dokümantasyonunu inceleyerek kendi entegrasyonlarınızı geliştirebilirsiniz. İyi projeler! 🎉

#ESP8266 #NodeMCU #DHT22 #Kombi #Termostat #IoT #WiFi #Röle #MicroControlPanel