// Formação em ESP32 · LASER · Módulo 2 // Estação de temperatura e umidade: DHT22 + LCD 16x2 I2C + ESP32-S3 #include #include #include #define PINO_DHT 12 // fio amarelo #define TIPO_DHT DHT22 #define PINO_SDA 8 // I2C padrão do ESP32-S3 #define PINO_SCL 9 DHT dht(PINO_DHT, TIPO_DHT); LiquidCrystal_I2C lcd(0x27, 16, 2); // endereço, colunas, linhas // Símbolo de grau: 8 linhas de 5 pixels byte grau[8] = { 0b01100, 0b10010, 0b10010, 0b01100, 0, 0, 0, 0 }; void setup() { Serial.begin(115200); Wire.begin(PINO_SDA, PINO_SCL); dht.begin(); lcd.init(); lcd.backlight(); lcd.createChar(0, grau); lcd.setCursor(0, 0); lcd.print("LASER ESP32-S3"); lcd.setCursor(0, 1); lcd.print("Iniciando..."); delay(2000); // o DHT22 precisa de ~2 s para a primeira leitura lcd.clear(); } void loop() { float umidade = dht.readHumidity(); float temperatura = dht.readTemperature(); if (isnan(umidade) || isnan(temperatura)) { lcd.setCursor(0, 0); lcd.print("Falha no sensor "); Serial.println("Falha na leitura do DHT22"); } else { lcd.setCursor(0, 0); lcd.print("Temp: "); lcd.print(temperatura, 1); lcd.write(0); // o caractere de grau criado acima lcd.print("C "); lcd.setCursor(0, 1); lcd.print("Umid: "); lcd.print(umidade, 1); lcd.print(" % "); Serial.printf("Temperatura: %.1f C | Umidade: %.1f %%\n", temperatura, umidade); } delay(2000); // o DHT22 aceita no máximo uma leitura a cada 2 s }