/*
3B inf 16/11/2022
Buttazzo Gabriele
ESP32 + DHT22 Example for Wokwi
https://wokwi.com/arduino/projects/322410731508073042
*/
#include <DHTesp.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
int contatemp=0;
int contahum=0;
int bottone;
int tempo_reset=0;
int tempo;
int rele;
const int DHT_PIN = 15;
DHTesp dhtSensor;
//costanti
#define tempmax 25 //valore a cui si deve attivare l'alert della temperatura
#define umidmax 60 //valore a cui si deve attivare l'alert dell'umidità
void setup() {
pinMode(26, OUTPUT); //led rosso (temperatura)
pinMode(33, OUTPUT); //led giallo (umidità)
pinMode(25, OUTPUT); //relè
pinMode(27, INPUT); //bottone
lcd.init();
lcd.backlight();
Serial.begin(115200);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
}
void loop() {
TempAndHumidity data = dhtSensor.getTempAndHumidity();
Serial.println("Temp: " + String(data.temperature, 2) + "°C");
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
Serial.println("---");
//avviso temperatura
if (data.temperature > tempmax) {
digitalWrite(26, HIGH);
contatemp++;
//relè
if (rele==0) {
rele=1;
digitalWrite(25, HIGH); //attivazione relè
}
}
else {
digitalWrite(26, LOW);
}
//avviso umidità
if (data.humidity > umidmax) {
digitalWrite(33, HIGH);
contahum++;
}
else {
digitalWrite(33, LOW);
}
//bottone reset
bottone=digitalRead(27);
if (bottone==HIGH) {
reset();
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(data.temperature);
lcd.print(" cont. ");
lcd.print(contatemp);
lcd.setCursor(0, 1);
lcd.print(data.humidity);
lcd.print(" cont. ");
lcd.print(contahum);
delay(1000);
}
//funzione reset
void reset() {
tempo=millis();
if (tempo_reset <= tempo) {
tempo_reset=millis()+3000;
contatemp=0;
contahum=0;
rele=0;
digitalWrite(25, LOW); //reset relè
}
}