// Inclui a biblioteca Wire para comunicação I2C (usada pelo display LCD)
#include <Wire.h>
// Inclui a biblioteca LiquidCrystal_I2C para controlar o display LCD com I2C
#include <LiquidCrystal_I2C.h>
// Inclui a biblioteca DHT para trabalhar com o sensor DHT22
#include <DHT.h>
// Define o pino digital 4 como o pino onde o DHT22 está conectado (pino válido para ESP32)
#define DHTPIN 4
// Define o tipo de sensor como DHT22
#define DHTTYPE DHT22
// Cria um objeto DHT para ler os dados do sensor, usando o pino e tipo definidos
DHT dht(DHTPIN, DHTTYPE);
// Cria um objeto LCD com endereço I2C 0x27, para um display de 16 colunas e 2 linhas
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Função setup roda uma vez quando o ESP32 é ligado
void setup() {
// Inicia a comunicação com o sensor DHT22
dht.begin();
// Inicia a comunicação I2C nos pinos padrão do ESP32 (SDA = 21, SCL = 22)
Wire.begin(21, 22);
// Inicia o display LCD, especificando 16 colunas e 2 linhas
lcd.begin(16, 2);
// Liga a luz de fundo do LCD
lcd.backlight();
// Posiciona o cursor na linha 1, coluna 0 do LCD
lcd.setCursor(0, 0);
// Escreve "Temp: " na primeira linha do LCD
lcd.print("Temp: ");
// Posiciona o cursor na linha 2, coluna 0 do LCD
lcd.setCursor(0, 1);
// Escreve "Umidade: " na segunda linha do LCD
lcd.print("Umidade: ");
}
// Função loop roda repetidamente após o setup
void loop() {
// Lê a umidade do sensor DHT22 e armazena na variável h
float h = dht.readHumidity();
// Lê a temperatura do sensor DHT22 (em Celsius) e armazena na variável t
float t = dht.readTemperature();
// Verifica se a leitura falhou (isnan verifica se h ou t não são números válidos)
if (isnan(h) || isnan(t)) {
// Posiciona o cursor na linha 1, coluna 6
lcd.setCursor(6, 0);
// Mostra "Erro" na tela se a temperatura não for lida
lcd.print("Erro ");
// Posiciona o cursor na linha 2, coluna 9
lcd.setCursor(9, 1);
// Mostra "Erro" na tela se a umidade não for lida
lcd.print("Erro ");
} else {
// Posiciona o cursor na linha 1, coluna 6
lcd.setCursor(6, 0);
// Mostra a temperatura lida no LCD
lcd.print(t);
// Escreve " C" para indicar que é em Celsius
lcd.print(" C");
delay(3000);
// Posiciona o cursor na linha 2, coluna 9
lcd.setCursor(9, 1);
// Mostra a umidade lida no LCD
lcd.print(h);
// Escreve " %" para indicar que é percentual de umidade
lcd.print(" %");
t = t +273;
lcd.setCursor(6, 0);
// Mostra a temperatura lida no LCD
lcd.print(t);
// Escreve " C" para indicar que é em Celsius
lcd.print(" K");
delay (3000);
t * t 1,8 + 32;
lcd.setCursor(6, 0);
// Mostra a temperatura lida no LCD
lcd.print(t);
// Escreve " C" para indicar que é em Celsius
lcd.print(" f");
delay (3000);
}
// Espera 2 segundos antes de fazer uma nova leitura
delay(3000);
}