#include <WiFi.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Inicializa o objeto do display LCD
LiquidCrystal_I2C LCD = LiquidCrystal_I2C(0x27, 16, 2);
// Define o deslocamento de tempo para o fuso horário de Brasília
#define UTC_OFFSET -3 * 3600
// Função para imprimir a hora local no display LCD
void printLocalTime() {
struct tm timeinfo;
// Obtém a hora local do dispositivo
if (!getLocalTime(&timeinfo)) {
// Se não for possível obter a hora, exibe uma mensagem de erro no display
LCD.setCursor(0, 1);
LCD.println("Erro de conexão");
return;
}
// Exibe a hora formatada (HH:MM:SS) no display
LCD.setCursor(8, 0);
LCD.println(&timeinfo, "%H:%M:%S");
// Exibe a data (DD/MM/AAAA) no display
LCD.setCursor(0, 1);
LCD.println(&timeinfo, "%d/%m/%Y %Z");
}
void setup() {
// Inicializa a comunicação serial com uma taxa de 115200 bits por segundo
Serial.begin(115200);
// Inicializa o display LCD
LCD.init();
// Liga a luz de fundo do LCD
LCD.backlight();
// Define a posição do cursor e exibe uma mensagem de conexão à rede Wi-Fi no LCD
LCD.setCursor(0, 0);
LCD.print("Conectando a ");
LCD.setCursor(0, 1);
LCD.print("WiFi ");
// Inicia a conexão Wi-Fi com as credenciais fornecidas
WiFi.begin("Wokwi-GUEST", "", 6);
// Aguarda até que a conexão Wi-Fi seja estabelecida
while (WiFi.status() != WL_CONNECTED) {
delay(250);
}
// Quando a conexão Wi-Fi for estabelecida, exibe informações sobre a conexão via Serial
Serial.println("\nWiFi conectado");
Serial.print("Endereço IP: ");
Serial.println(WiFi.localIP());
// Limpa o display LCD e exibe mensagens indicando que o dispositivo está online e atualizando a hora
LCD.clear();
LCD.setCursor(0, 0);
LCD.println("Online");
LCD.setCursor(0, 1);
LCD.println("Atualizando hora...");
// Configura o tempo usando um servidor de tempo da Internet e desativa o horário de verão
configTime(UTC_OFFSET, 0, "pool.ntp.org");
}
void loop() {
// Chama a função para imprimir a hora local no display LCD
printLocalTime();
// Aguarda 1 segundo antes de atualizar a hora novamente
delay(1000);
}