#include <LiquidCrystal_I2C.h>
#include <math.h>
#define I2C_ADDR 0x27
#define LCD_COLUMNS 16
#define LCD_LINES 2
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
#include "DHTesp.h"
const int DHT_PIN1 = 2;
const int DHT_PIN2 = 3;
const int DHT_PIN3 = 4;
DHTesp dhtSensor1;
DHTesp dhtSensor2;
DHTesp dhtSensor3;
void setup() {
Serial.begin(115200);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
dhtSensor1.setup(DHT_PIN1, DHTesp::DHT22);
dhtSensor2.setup(DHT_PIN2, DHTesp::DHT22);
dhtSensor3.setup(DHT_PIN3, DHTesp::DHT22);
lcd.init();
lcd.backlight();
String text = "-";
for(int i=0;i<16;i++){
lcd.setCursor(0, 0);
lcd.print("Please wait");
lcd.setCursor(0, 3);
lcd.print(text);
text = text + "-";
delay(200);
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("System is active");
delay(2000);
lcd.clear();
}
void loop() {
TempAndHumidity data1 = dhtSensor1.getTempAndHumidity();
TempAndHumidity data2 = dhtSensor2.getTempAndHumidity();
TempAndHumidity data3 = dhtSensor3.getTempAndHumidity();
float temp1 = (float)data1.temperature;
float temp2 = (float)data2.temperature;
float temp3 = (float)data3.temperature;
int humi1 = data1.humidity;
int humi2 = data2.humidity;
int humi3 = data3.humidity;
float avgTemp = (temp1 + temp2 + temp3) / (float)3;
int avgHumidity = (humi1 + humi2 + humi3) / 3;
String textTemp = String("Temp: " + String(avgTemp) + "C");
String textHumi = String("Humidity: " + String(avgHumidity) + "%");
if (isnan(temp1)) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Sensor #1 error");
delay(2000);
return;
}else if (isnan(temp2)){
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Sensor #2 error");
delay(2000);
return;
}else if (isnan(temp3)){
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Sensor #3 error");
delay(2000);
return;
}
lcd.setCursor(0, 0);
lcd.print(textTemp);
lcd.setCursor(0, 3);
lcd.print(textHumi);
if(avgTemp > 40){
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
}
if(avgTemp < 40){
digitalWrite(5, LOW);
digitalWrite(6, LOW);
}
delay(1000);
lcd.clear();
}