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.
🏠 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
| Malzeme | Adet | Açıklama |
|---|---|---|
| NodeMCU ESP8266 (v3 / Lolin) | 1 | WiFi özellikli mikrodenetleyici |
| DHT22 (AM2302) | 1 | Sıcaklık & nem sensörü (±0.5°C hassasiyet) |
| 5V Tek Kanal Röle Modülü | 1 | Kombi on/off kontrol (optokuplörlü) |
| 10kΩ Direnç | 1 | DHT22 pull-up direnci |
| Breadboard | 1 | Prototipleme için |
| Jumper Kablolar | 10+ | M-M ve M-F |
| Micro USB Kablo | 1 | NodeMCU besleme |
| 5V USB Adaptör | 1 | Kalı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 Pin | NodeMCU Pin | Açıklama |
|---|---|---|
| VCC (+) | 3V3 | 3.3V besleme |
| DATA | D4 (GPIO2) | Veri hattı |
| GND (−) | GND | Toprak |
📌 DATA pini ile 3V3 arasına 10kΩ pull-up direnci bağlayın.
Röle Modülü Bağlantısı
| Röle Pin | NodeMCU Pin | Açıklama |
|---|---|---|
| VCC | VIN (5V) | 5V besleme (USB'den) |
| GND | GND | Toprak |
| IN | D1 (GPIO5) | Kontrol sinyali |
| COM | Kombi Termostat (+) | Ortak uç |
| NO | Kombi 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:
- microcontrolpanel.com adresine giriş yapın (veya yeni hesap oluşturun).
- Cihazlarım sayfasına gidin ve "+ Yeni Cihaz" butonuna tıklayın.
- Cihaz adı:
Salon Kombi Kontrol - Oluşturulan Device Token'ı not edin — firmware'de kullanacağız.
Virtual Pin Yapılandırması
Cihaz dashboard'ında şu widgetları ekleyin:
| Virtual Pin | Widget | Yön | Açıklama |
|---|---|---|---|
V0 | Gauge / Value | Okuma | Oda sıcaklığı (°C) |
V1 | Gauge / Value | Okuma | Nem oranı (%) |
V2 | Switch | Yazma | Kombi açma/kapama |
V3 | Slider | Yazma | Hedef sıcaklık (15-30°C) |
V4 | LED | Okuma | Kombi 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şlemeWebSockets(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ı
| Ayar | Değer |
|---|---|
| Board | NodeMCU 1.0 (ESP-12E Module) |
| CPU Frequency | 80 MHz |
| Flash Size | 4MB (FS:2MB OTA:~1019KB) |
| Upload Speed | 115200 |
💻 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°Caltı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
- NodeMCU'yu USB ile bilgisayara bağlayın.
- Arduino IDE'de doğru Port ve Board seçili olduğundan emin olun.
WIFI_SSID,WIFI_PASSveDEVICE_TOKENdeğerlerini güncelleyin.- Upload butonuna basın ve yüklemenin tamamlanmasını bekleyin.
- 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! 🎉