#include #include #include #include #include #include #include const char* ssid = "CELIK"; //WIFI ADI const char* password = "10203040"; //WIFI SIFRESI #define DHTPIN 2 // DHT PIN int ROLEPIN = 13; // ROLE PIN #define DHTTYPE DHT11 //Kullanılan DHT Tipi (DHT 11) DHT dht(DHTPIN, DHTTYPE); float t = 0.0; // sıcaklık değişkeni atanıyor float h = 0.0; // nem değişkeni atanıyor int roleStatus = digitalRead(ROLEPIN); // role çalışıp çalışmadığı değişkende tutuluyor int forceRun = 0; // Web üzerinden röleyi zorla çalıştırmak için değişken atıyoruz. AsyncWebServer server(80); //80 portunu dinliyoruz. Web için 80 portu kullanılır. unsigned long previousMillis = 0; // Web sitesinde değişiklik için dht'nin son güncellendiği zamanı kaydediyoruz. // DHT değerleri 1sn de bir güncelleniyor const long interval = 1000; //Web görünümümüz HTML kodları const char index_html[] PROGMEM = R"rawliteral(

Hava Durum
Meteoroloji İstasyonu

Sıcaklık %TEMPERATURE% °C

Nem %HUMIDITY% %


Motor Durumu:

%STATUS%
%BUTTON%
)rawliteral"; // Röle kapatma açma butonumuz String outputButton(int output){ if(output){ return "
"; } return "
"; } // Rölenin anlık olarak çalışıp çalışmadığını gösteriyoruz String outputStatusRole(int output){ if(output){return "

Çalışıyor

";} return "

Kapalı

"; } // Değerleri web görünümümüze aktaran fonksiyon String processor(const String& var){ if(var == "TEMPERATURE"){ return String(t); } else if(var == "HUMIDITY"){ return String(h); } else if(var == "STATUS"){ return outputStatusRole(roleStatus); } else if(var == "BUTTON"){ return outputButton(forceRun); } return String(); } void setup(){ Serial.begin(115200); dht.begin(); pinMode(ROLEPIN, OUTPUT); // WIFI bağlantısı yapılıyor WiFi.begin(ssid, password); Serial.println("WiFi Baglaniyor..."); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("."); } // ESP8266'nin local ip yazdırılıyor. Serial.println(WiFi.localIP()); // Web sayfalarımız server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){ request->send_P(200, "text/html", index_html, processor); }); server.on("/temperature", HTTP_GET, [](AsyncWebServerRequest *request){ request->send_P(200, "text/plain", String(t).c_str()); }); server.on("/humidity", HTTP_GET, [](AsyncWebServerRequest *request){ request->send_P(200, "text/plain", String(h).c_str()); }); server.on("/role", HTTP_GET, [](AsyncWebServerRequest *request){ request->send_P(200, "text/plain", String(outputStatusRole(roleStatus)).c_str()); }); server.on("/led", HTTP_GET, [](AsyncWebServerRequest *request){ String inputMessage1; inputMessage1 = request->getParam("state")->value(); roleStatus = inputMessage1.toInt(); Serial.print("LED: "); Serial.println(inputMessage1); digitalWrite(ROLEPIN, inputMessage1.toInt()); if (inputMessage1.toInt()){forceRun = 1;}else{forceRun = 0;} request->send_P(200, "text/plain", String(outputButton(forceRun)).c_str()); }); server.begin(); } void loop(){ unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= interval) { // DHT değerlerini son güncellediğiniz zamanı kaydediliyor previousMillis = currentMillis; // Sıcaklık okunuyor float newT = dht.readTemperature(); // Sıcaklık okuma değeri başarısız olursa değeri değiştirmiyor. if (isnan(newT)) { Serial.println("DHT Sensorunden Sicaklik degeri okunamadi!"); } else { t = newT; Serial.println(t); } // nem değeri okunuyor float newH = dht.readHumidity(); // Nem değeri okuma başarısız olursa değer değiştirilmiyor. if (isnan(newH)) { Serial.println("DHT Sensorunden NEM degeri okunamadi!"); } else { h = newH; //Nem max deger belirleniyor, bu deger gecilirse role çalıştırılacak. float maxH = 50.00; if (!forceRun){ if (h>maxH){ digitalWrite(ROLEPIN,1); Serial.println("ROLE Ac"); }else{ digitalWrite(ROLEPIN,0); Serial.println("ROLE Kapat"); } } Serial.println(h); } //role çalışıp çalışmadığı güncelleniyor, web üzerinden anlık olarak kontrolü için roleStatus = digitalRead(ROLEPIN); } }