#include <WiFi.h>
#include "time.h"
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
//dimensioni del display OLED
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
//indirizzo I2C del display OLED
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
const char* ssid = "Wokwi-GUEST"; // Cambia con il tuo SSID
const char* password = ""; // Cambia con la tua password Wi-Fi
const char* ntpServer = "pool.ntp.org";
const long gmtOffset_sec = 3600; // Modifica a seconda del tuo fuso orario (3600 per UTC+1)
const int daylightOffset_sec = 3600; // Ora legale
void printLocalTime()
{
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) {
Serial.println("Failed to obtain time");
return;
}
// Stampa l'ora nel monitor seriale
Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S");
// Mostra la data e l'ora sul display OLED
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
// Data
display.print(&timeinfo, "%d/%m/%Y");
// Ora
display.setCursor(0, 30);
display.print(&timeinfo, "%H:%M:%S");
display.display();
}
void setup()
{
Serial.begin(115200);
// Connessione Wi-Fi
Serial.printf("Connecting to %s ", ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println(" CONNECTED");
// Debug sulla connessione Wi-Fi
if (WiFi.status() == WL_CONNECTED) {
Serial.println("WiFi Connected");
} else {
Serial.println("WiFi Connection Failed");
}
// Inizializza il tempo
Serial.println("Configuring time...");
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
// Aggiungi un ritardo per dare tempo all'ESP32 di sincronizzarsi con il server NTP
delay(2000); // Attendi 2 secondi prima di ottenere l'ora
// Recupera l'ora locale
printLocalTime();
// Disconnetti il Wi-Fi, non serve più dopo aver ottenuto l'ora
WiFi.disconnect(true);
WiFi.mode(WIFI_OFF);
// Inizializzazione del display OLED
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("Errore nell'avvio del display OLED"));
for (;;);
}
display.clearDisplay();
}
void loop() {
// Aggiorna ogni secondo l'orario sul display
delay(1000);
printLocalTime();
}
GND-5V-22-21