#include <WiFi.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>
#include <NTPClient.h>
#include <WiFiUdp.h>
#include <DHT.h>
// Configurações da rede WiFi
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// Definição dos pinos do ILI9341
#define TFT_CS 15
#define TFT_RST 4
#define TFT_DC 2
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);
// Configurações do NTP
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org", -3 * 3600, 60000); // UTC-3
// Configurações do DHT22
#define DHTPIN 5 // Pino onde o DHT22 está conectado
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// Variáveis para armazenar as leituras de temperatura
float temperatureReadings[5];
int readingIndex = 0;
float temperatureSum = 0;
int totalReadings = 0;
void setup() {
Serial.begin(115200);
// Inicializa o display ILI9341
tft.begin();
tft.setRotation(0);
tft.fillScreen(ILI9341_BLACK);
// Conecta ao WiFi
tft.setTextColor(ILI9341_WHITE);
tft.setTextSize(2);
tft.setCursor(10, 10);
tft.println("Conectando ao WiFi...");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("WiFi conectado!");
timeClient.begin();
timeClient.update();
dht.begin();
}
void loop() {
static unsigned long lastHumidityUpdate = 0;
static unsigned long lastTemperatureUpdate = 0;
timeClient.update();
if (millis() - lastHumidityUpdate >= 15000) {
lastHumidityUpdate = millis();
float humidity = dht.readHumidity();
tft.fillRect(10, 50, 220, 30, ILI9341_BLACK);
tft.setTextColor(ILI9341_GREEN);
tft.setTextSize(3);
tft.setCursor(10, 50);
tft.print("Umidade: ");
tft.print(humidity);
tft.println("%");
}
// Atualiza a temperatura e calcula a média de 5 minutos
if (millis() - lastTemperatureUpdate >= 75000) {
lastTemperatureUpdate = millis();
float temperature = dht.readTemperature();
if (totalReadings < 5) {
temperatureReadings[totalReadings++] = temperature;
temperatureSum += temperature;
} else {
temperatureSum -= temperatureReadings[readingIndex];
temperatureReadings[readingIndex] = temperature;
temperatureSum += temperature;
readingIndex = (readingIndex + 1) % 5;
}
float averageTemperature = temperatureSum / totalReadings;
tft.fillRect(10, 90, 220, 30, ILI9341_BLACK);
tft.setTextColor(ILI9341_YELLOW);
tft.setTextSize(3);
tft.setCursor(10, 100);
tft.print("Média Temp: ");
tft.print(averageTemperature);
tft.println(" C");
}
delay(1000);
}