Tarayıcı simülasyonu + gerçek donanım seçeneğiBitirme
Akıllı sera (ya da akıllı ev) sistemi
İki ESP32 düğümü, bir MQTT broker'ı, kural motoru ve canlı pano: sıcaklık, nem, ışık ve toprak nemine göre pencere, fan, ısıtıcı ve sulamayı yöneten, bağlantı koptuğunda güvenli kalan bir sistem.
Senaryo
Bir okul serası hafta sonları kimsesiz kalıyor. Sıcak günlerde bitkiler yanıyor, soğuk gecelerde donuyor. Senden sensör düğümü ve eyleyici düğümünden oluşan, MQTT ile haberleşen, kurallarla kendini yöneten ve öğretmene telefondan canlı durum ve uyarı gösteren bir sistem isteniyor. Aynı tasarım bir evin ısıtma ve aydınlatmasına da uyarlanabilir.
Gereksinimler (test edilebilir)
- G1: Sensör düğümü sıcaklık, nem, basınç ve ışığı en çok 60 s aralıkla, ölü bantla (değişince bildir) ve en az 15 dakikada bir kalp atışıyla yayımlar.
- G2: Konu ağacı belgelenmiştir (sera/<düğüm>/<ölçüm>, sera/<düğüm>/komut/<eyleyici>, sera/<düğüm>/durum); durum konusu kalıcıdır ve son vasiyetle "offline" olur.
- G3: Eyleyici komutları idempotenttir (mutlak değer + komut kimliği); aynı komutun iki kez gelmesi durumu bozmaz.
- G4: Kurallar cihaz üstünde çalışır; Wi-Fi ya da broker 5 dakikadan uzun koparsa ısıtıcı kapanır, pencere yarı açık kalır (güvenli varsayılan).
- G5: Sıcaklık 36 °C'yi aşınca 30 s içinde uyarı yayımlanır; histerezisle aynı olay için tekrar eden uyarı gönderilmez.
- G6: Pano son 24 saati gösterir, çizimde min/max seyreltme kullanır ve tüm düğümlerin çevrim içi durumunu gösterir.
- G7: Bağlantı TLS'lidir, her düğümün kendi kimliği ve ACL kaydı vardır; parolalar depoda yoktur.
- G8: Pille çalışan sensör düğümünün hesaplanan pil ömrü en az 30 gündür (derin uyku ile).
Mimari
- Sensör düğümü (ESP32 + DHT22 + BME280 + LDR): uyan, oku, bağlan, yayımla, derin uyku; okuma sayacı RTC belleğinde.
- Eyleyici düğümü (ESP32 + röle/MOSFET + servo + OLED): komut konularına abone, kural motoru ve güvenli varsayılan burada; durumu kalıcı mesajla bildirir.
- Broker (Mosquitto, TLS 8883, parola dosyası + ACL); bulutta ya da okul sunucusunda.
- Pano (Node-RED, Grafana ya da bu dersteki pano yapısı): telemetri konularına abone, halka tampon ve uyarı listesi.
- Yazılım katmanları: sürücü (sensör okuma) / alan mantığı (kurallar, histerezis, saf fonksiyon) / iletişim (MQTT, Wi-Fi yeniden bağlanma). Alan mantığı donanımsız test edilir.
Testler
- Birim: kural motoru ve histerezis için en az 10 test (eşik altı, eşik üstü, BEKLE süresi, güvenli varsayılan).
- Birim: konu ve yük biçimi için ayrıştırma testleri (bozuk JSON, eksik alan, yanlış tip).
- Tümleşik: broker'ı durdur, 6 dakika bekle: eyleyici güvenli varsayılana geçiyor ve vasiyet "offline" yayımlanıyor mu?
- Tümleşik: aynı komutu üç kez gönder: röle durumu ve komut sayacı doğru mu?
- Kabul: tarayıcıdaki kural motoru simülasyonunda üç hava senaryosunda (sıcak, soğuk, bulutlu) konfor en az %85, aşırı sıcak 0 dakika.
- Güvenlik: anonim istemci bağlanamıyor; bir düğüm başka düğümün komut konusuna yazamıyor.
Demo
- 5 dakikalık canlı gösterim: pano, sıcaklığı elle artırınca (saç kurutma makinesi ya da simülasyon) pencere ve fanın açılması, uyarının gelmesi.
- Kabloyu çek: panoda düğümün "offline" olduğunu ve eyleyicinin güvenli varsayılana geçtiğini göster.
- Mimari çizimi, konu ağacı ve test raporunu (geçen/kalan) sun; pil ömrü hesabını göster.
Simülasyonda çalış
3B akıllı sera: cihazlar, broker ve MQTT paketleri
Seranın 24 saatini kural motoruyla oynat. Sensör düğümü her 10 dakikada sıcaklık yayımlar, eyleyici düğümü durum değiştirince kalıcı durum mesajı yollar; her paket broker'dan geçerek abonelerine uçar. Panodan elle komut gönder, pencere, fan, ısıtıcı ve sulamanın sahnede değiştiğini izle.
3B sahne yükleniyor…
Sürükle: döndür · iki parmak / tekerlek: yakınlaş · sağ tuş: kaydır
- telemetri
- komut
- durum (retained)
- 11:00
sera/01/sicaklik26.8 sensor → broker → actuator, dashboard - 10:50
sera/01/sicaklik26.2 sensor → broker → actuator, dashboard - 10:40
sera/01/sicaklik25.7 sensor → broker → actuator, dashboard - 10:30
sera/01/sicaklik25.1 sensor → broker → actuator, dashboard
Akıllı sera: kural motoru
EĞER … İSE … kurallarıyla pencere, fan, ısıtıcı, sulama ve alarmı yönet. 24 saatlik sera gününü dış hava ve bulutlulukla benzet; konfor yüzdesi, aşırı sıcak/soğuk dakika, röle anahtarlama sayısı ve enerjiyle kurallarını puanla.
Başlangıç kodu
#include <WiFi.h>
#include <PubSubClient.h>
#include "secrets.h" // WIFI_SSID, WIFI_PASS, MQTT_USER, MQTT_PASS (git'e girmez)
struct Env { float temp; float hum; float soil; };
struct Acts { bool window; bool fan; bool heater; bool pump; };
// Alan mantığı: saf fonksiyon, donanımsız test edilir
Acts decide(const Env& e, const Acts& now) {
Acts a = now;
if (e.temp > 30) a.window = true; else if (e.temp < 26) a.window = false; // histerezis
if (e.temp > 33) a.fan = true; else if (e.temp < 29) a.fan = false;
if (e.temp < 14) a.heater = true; else if (e.temp > 17) a.heater = false;
if (e.soil < 35) a.pump = true; else if (e.soil > 60) a.pump = false;
return a;
}
// Bağlantı 5 dakikadan uzun koparsa güvenli varsayılan
Acts failsafe(const Acts& now) { Acts a = now; a.heater = false; a.window = true; a.pump = false; return a; }
WiFiClient net; // teslimde WiFiClientSecure + CA sertifikası
PubSubClient mqtt(net);
Env env{20, 60, 50};
Acts acts{};
unsigned long lastSeen = 0;
void setup() { /* Wi-Fi, MQTT, son vasiyet, abonelikler (ünite 2, 4, 5) */ }
void loop() {
if (mqtt.connected()) { mqtt.loop(); lastSeen = millis(); }
acts = (millis() - lastSeen > 5UL * 60 * 1000) ? failsafe(acts) : decide(env, acts);
// eyleyicilere yaz, durum değiştiyse kalıcı durum mesajı yayımla
}Teslimler
- 3. üniteden sonraGereksinim ve pin planı
G1–G8'i kendi serana uyarla, her biri için ölçülebilir kabul ölçütü yaz; iki düğümün pin planını planlayıcıda hatasız çıkar ve REST ile yerel durum sayfası tasarla.
HTTP, REST ve JSON: ESP32 bir web sunucusu - 5. üniteden sonraKonu ağacı ve MQTT sözleşmesi
Konu ağacını, yük biçimlerini, QoS ve retain kararlarını ve son vasiyeti bir sayfalık sözleşme olarak yaz; broker simülasyonunda dene.
MQTT güvenilirliği: QoS, kalıcı mesaj, son vasiyet - 7. üniteden sonraUçtan uca ilk sürüm
Sensör düğümü yayımlıyor, eyleyici düğümü idempotent komutla röle ve servoyu sürüyor, pano canlı çiziyor (Wokwi ya da gerçek kart).
Uzaktan eyleyiciler ve canlı pano - 9. üniteden sonraGüç ve güvenlik
Derin uyku ile pil ömrü hesabı (en az 30 gün), TLS, cihaz başına kimlik ve ACL; güvenlik denetiminde risk puanı 20'nin altında.
IoT güvenliği ve Bluetooth Low Energy - 10. üniteden sonraKural motoru, testler ve demo
Cihaz üstü kurallar ve güvenli varsayılan; test raporu; 5 dakikalık demo videosu ve mimari çizimi.
Akıllı ev ve akıllı sera: kural motoru ve sistem mimarisi