#include "thingProperties.h"
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
//LCD ayarlarını yapar.
LiquidCrystal_I2C lcd(0x27, 16, 2);
//DHT sensörünün hangi pinden çıkış vereceğini ayarlar.
DHT dht(0, DHT22);
//Okunan değerler için değişken.
float readdata;
//Sonraki üç satır delay kullanmadan araya bekleme koymayı sağlar.
unsigned long previousMillis = 0;
unsigned long currentMillis;
int currentTask = 1;
//Yüksek sıcaklık koşulu
bool isTemphigh = false;
//Cloud'dan mesaj gelip gelmediğini kontrol eder.
bool cloudMesajArrive = true;
//Cloud'a bağlantı durumu. 0 bağlı değil, 1 bağlı.
int connectionstate = 0;
void setup() {
//Seri iletişimi başlatır.
Serial.begin(9600);
//sonraki 2 satır LCD ayarlarını yapar
lcd.init();
lcd.backlight();
//Led'in hangi pinde çıkış vereceğini ayarlar.
pinMode(12, OUTPUT);
//Cloud ayarlarını yapar.
initProperties();
ArduinoCloud.begin(ArduinoIoTPreferredConnection);
setDebugMessageLevel(2);
ArduinoCloud.printDebugInfo();
}
void loop() {
//Cloud'dan alınan ve bilgileri günceller.
ArduinoCloud.update();
currentMillis = millis();
if (currentMillis - previousMillis >= 2000) {
//Cloud'a gönderilecek bilgilerin güncellenmesi.
sicaklik = dht.readTemperature();
nem = dht.readHumidity();
connectionstate = ArduinoCloud.connected();
//Seri iletişim ile nem ve sıcaklık değerlerini yazdırır.
Serial.print("Humidity: "+ String(dht.readHumidity())+"% ||");
Serial.println("Temperature: "+ String(dht.readTemperature())+"°C");
//Aşağıdaki bütün if-else blokları da mesaj geldiyse ve bağlantı durumu 1
//ise mesajı yazdırır ve araya 2 saniye ekler, değilse nem ve sıcaklık
//arasında döngü ile lcd üzerinde gösterir.
if(cloudMesajArrive == true && connectionstate == 1){
WriteMesaj();
}
else{
if (currentTask == 1)
Temperature();
else
Humidity();
currentTask = (currentTask == 1) ? 2 : 1;
}
previousMillis = currentMillis;
cloudMesajArrive = false;
}
}
// DHT22'den sıcaklık değerlerini çekerek ekrana gerekli şekilde
//Yazdırır.
void Temperature(){
readdata = dht.readTemperature();
lcd.clear();
lcd.setCursor(2, 0);
lcd.print("Temperature");
if(readdata<=-10){
lcd.setCursor(0, 1);
lcd.print(readdata);
lcd.setCursor(6,1);
lcd.print("-VERY LOW");
digitalWrite(12, LOW);
isTemphigh = false;
}
else if(readdata>-10 && readdata <=0){
lcd.setCursor(1, 1);
lcd.print(readdata);
lcd.setCursor(6,1);
lcd.print("-VERY LOW");
digitalWrite(12, LOW);
isTemphigh = false;
}
else if(readdata>=0 && readdata <10){
lcd.setCursor(3, 1);
lcd.print(readdata);
lcd.setCursor(7,1);
lcd.print("-Normal");
digitalWrite(12, LOW);
isTemphigh = false;
}
else if(readdata>=10 && readdata <=25){
lcd.setCursor(3, 1);
lcd.print(readdata);
lcd.setCursor(8,1);
lcd.print("-Normal");
digitalWrite(12, LOW);
isTemphigh = false;
}
else{
lcd.setCursor(3, 1);
lcd.print(readdata);
lcd.setCursor(8,1);
lcd.print("-HIGH");
digitalWrite(12, HIGH);
isTemphigh = true;
}
}
// DHT22'den Nem değerlerini çekerek ekrana gerekli şekilde
//Yazdırır.
void Humidity(){
readdata = dht.readHumidity();
lcd.clear();
lcd.setCursor(4, 0);
lcd.print("Humidity");
lcd.setCursor(3, 1);
lcd.print(readdata);
lcd.setCursor(8,1);
if(readdata<=50)
lcd.print("-LOW");
else
lcd.print("-HIGH");
}
//Cloud'dan çekilen mesajı yazdırır.
void WriteMesaj(){
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(mesaj);
}
//Cloud üzerinden mesaj geldiğinde mesajın geldiği bilgisini true yapar
void onMesajChange() {
cloudMesajArrive = true;
}
//Cloud üzerinden led yakılmaya çalışıldığında sıcaklık koşulunu kontrol edip
//Aksiyon alır.
void onLedChange() {
if(isTemphigh == false){
if (led == 0)
{
digitalWrite(12, LOW);
}
else
{
digitalWrite(12, HIGH);
}
}
}
Loading
esp32-devkit-c-v4
esp32-devkit-c-v4