//#include <ESP8266WiFi.h> para o esp8266
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <TimeLib.h>
#include <WiFiUdp.h>
#include <NTPClient.h>
#include <DHT.h>
#include <WiFiClient.h>
#include <WebServer.h>
#include <WiFi.h>
// Definições do sensor DHT22
#define DHTPIN 15 //D3 Pino de dados do sensor DHT22 esp8266
#define DHTTYPE DHT22 // Tipo do sensor DHT (DHT22)
DHT dht(DHTPIN, DHTTYPE);
// Definições do display OLED
#define SCREEN_WIDTH 128 // Largura do display em pixels
#define SCREEN_HEIGHT 64 // Altura do display em pixels
#define OLED_RESET -1 // Pino de reset do display (usado se estiver conectado)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// Definições para o cliente NTP
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org", -3 * 3600, 60000); // Fuso horário do Brasil (-3 horas)
void setup() {
Serial.begin(115200);
delay(100);
WiFi.begin();
WiFi.begin("Wokwi-GUEST", "", 6);
//WiFi.begin("Elias Borges", "Fam.borges@8796!", 6);
while (WiFi.status() != WL_CONNECTED) {
delay(6000);
//spinner();
}
// Inicializa o sensor DHT22
dht.begin();
// Inicializa a comunicação I2C e o display OLED
//Wire.begin(D1, D2); // Define os pinos SDA e SCL esp8266
Wire.begin(21, 22); // Define os pinos SDA e SCL esp32
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // Endereço I2C 0x3C (para o display OLED 128x64)
// Limpa o display
//display.clearDisplay();
// Inicializa o cliente NTP
timeClient.begin();
timeClient.update(); // Obtém a hora do servidor NTP
// Exibe uma mensagem de inicialização
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setTextSize(2);
display.setCursor(0, 1);
display.println("Inicializando...");
display.display();
delay(3000);
display.clearDisplay();
display.setTextSize(1);
display.setCursor(0, 3);
display.println("Online");
// Exibe a data e hora atual
displayDateTime();
// Exibe a temperatura e umidade inicialmente
displayTempHumidity();
// Atualiza o display
display.display();
// Conecta-se à rede Wi-Fi
connectToWiFi();
}
void loop() {
// Atualiza a hora a cada minuto
if (timeClient.update()) {
// Limpa o display
display.clearDisplay();
// Exibe a data e hora atual
displayDateTime();
// Exibe a temperatura e umidade
displayTempHumidity();
// Atualiza o display
display.display();
}
delay(1000); // Aguarda 1 segundo
}
void connectToWiFi() {
// Conecta-se à rede Wi-Fi
//WiFi.begin("Elias Borges", "Fam.borges@8796!", 6);
WiFi.begin("Wokwi-GUEST", "", 6);
// Aguarda a conexão
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Conectando à rede Wi-Fi...");
}
Serial.println("Conectado à rede Wi-Fi!");
}
void displayDateTime() {
// Obtém a hora atual do RTC
time_t now = timeClient.getEpochTime();
struct tm * timeinfo;
timeinfo = localtime(&now);
// Formata a data e hora
char dateStr[20];
strftime(dateStr, sizeof(dateStr), "%d/%m/%Y", timeinfo);
char timeStr[20];
strftime(timeStr, sizeof(timeStr), "%H:%M:%S", timeinfo);
// Exibe a data e hora no display OLED
//display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(68, 10);
display.println(dateStr); //exibe a data
/*display.setCursor(0, 10);
display.println("Data: ");
*/
display.setCursor(75, 0);
display.println(timeStr); //Exibe a horas
/*display.setCursor(0, 20);
display.println("Hora: ");
*/
}
void displayTempHumidity() {
// Obtém a temperatura e umidade do sensor DHT22
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
// Verifica se a leitura foi bem-sucedida
if (!isnan(humidity) && !isnan(temperature)) {
// Exibe a temperatura no display OLED
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(50, 30);
display.print(int(round(temperature))); //Gera numeros inteiros
display.setCursor(70, 25);
display.write(248); // Esse é o símbolo de graus Celsius
//display.println("Tp:" + String(temperature) + " C"); //escreve a temperatura (Tp:) e mostra o graus, com numeros depois da virgula ex: 21,3°C
//display.println("" + String(temperature) + " C"); //sem a escrita temperatura e mostra o graus, com numeros depois da virgula ex: 21,3°C
//display.println("Temp: ");
//display.println(" C");
// Exibe a umidade no display OLED
display.setCursor(50, 50);
display.print(int(round(humidity))); //Gera numeros inteiros
display.println("%");
//display.println("Ud:" + String(humidity) + " %"); //escreve a umidade (Ud:) e mostra a porcentagem, com numeros depois da virgula ex: 52,1%
// display.println("" + String(humidity) + " %"); //sem a escrita umidade (Ud:) e mostra a porcentagem, com numeros depois da virgula ex: 52,1%
//display.println("Umidade: ");
} else {
// Exibe uma mensagem de erro se a leitura falhar
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 40);
display.println("Erro ao ler o sensor DHT22");
}
}