#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, ajustado para o Brasil
// Configurações do DHT
#define DHTPIN 22 // Pino onde o DHT está conectado
#define DHTTYPE DHT22 // ou DHT22, dependendo do seu sensor
DHT dht(DHTPIN, DHTTYPE);
// Variáveis para a temperatura e média
float temperatures[5] = {0}; // Array para armazenar as últimas 5 leituras
int tempIndex = 0; // Índice para o array
int readingsCount = 0; // Contador de leituras
void setup() {
Serial.begin(115200);
// Inicializa o display ILI9341
tft.begin();
tft.setRotation(1); // Ajusta a orientação da tela
tft.fillScreen(ILI9341_BLACK); // Limpa a tela
// 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!");
// Conecta ao servidor NTP
timeClient.begin();
timeClient.update();
// Inicializa o DHT
dht.begin();
}
void loop() {
timeClient.update();
// Obtém a hora formatada
String currentTime = timeClient.getFormattedTime();
// Obtém a temperatura atual
float currentTemp = dht.readTemperature(); // Temperatura em Celsius
// Verifica se a leitura da temperatura foi bem-sucedida
if (isnan(currentTemp)) {
Serial.println("Falha ao ler o DHT");
return;
}
// Adiciona a temperatura ao array e calcula a média
temperatures[tempIndex] = currentTemp;
tempIndex = (tempIndex + 1) % 5; // Atualiza o índice
readingsCount = min(readingsCount + 1, 5); // Limita o número de leituras a 5
// Limpa a área onde será exibida a hora e temperatura
tft.fillRect(10, 50, 220, 60, ILI9341_BLACK);
// Exibe a hora atual no display TFT
tft.setTextColor(ILI9341_GREEN);
tft.setTextSize(3);
tft.setCursor(10, 50);
tft.print("Hora: ");
tft.println(currentTime);
// Exibe a temperatura atual no display TFT
tft.setTextColor(ILI9341_WHITE);
tft.setCursor(10, 100);
tft.print("Temp: ");
tft.print(currentTemp);
tft.println(" C");
// Verifica se é hora de calcular e exibir a média
if (timeClient.getMinutes() % 5 == 0 && readingsCount == 5) {
// Calcula a média
float averageTemp = 0;
for (int i = 0; i < 5; i++) {
averageTemp += temperatures[i];
}
averageTemp /= 5;
// Exibe a média no display TFT
tft.fillRect(10, 150, 220, 30, ILI9341_BLACK);
tft.setTextColor(ILI9341_YELLOW);
tft.setCursor(10, 150);
tft.print("Media: ");
tft.print(averageTemp);
tft.println(" C");
}
delay(1000); // Atualiza a cada segundo
}