// ESP32 NTP OLED
// PP le 11 mars 2025
//https://randomnerdtutorials.com/esp32-date-time-ntp-client-server-arduino/
//
// Learn about the ESP32 WiFi simulation in
// https://docs.wokwi.com/guides/esp32-wifi
// simuler le wifi par : wokwigw.exe
#include <WiFi.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define NTP_SERVER "pool.ntp.org" //serveur de temps
#define UTC_OFFSET 3600 //fuseau horaire UTC+1 en secondes
#define UTC_OFFSET_DST 0 //heure d'été en secondes
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// *** fonction printLocalTime ****
void printLocalTime(){
struct tm timeinfo;
if(!getLocalTime(&timeinfo)){
Serial.println("Failed to obtain time"); // attente serveur temps
return;
}
Serial.println(&timeinfo, "%A %B %d %Y %H:%M:%S");
Serial.print("Day of week: ");
Serial.println(&timeinfo, "%A");
Serial.print("Month: ");
Serial.println(&timeinfo, "%B");
Serial.print("Day of Month: ");
Serial.println(&timeinfo, "%d");
Serial.print("Year: ");
Serial.println(&timeinfo, "%Y");
Serial.print("Hour: ");
Serial.println(&timeinfo, "%H");
Serial.print("Hour (12 hour format): ");
Serial.println(&timeinfo, "%I");
Serial.print("Minute: ");
Serial.println(&timeinfo, "%M");
Serial.print("Second: ");
Serial.println(&timeinfo, "%S");
Serial.println("Time variables");
char timeHour[3];
strftime(timeHour,3, "%H", &timeinfo);
Serial.println(timeHour);
char timeWeekDay[10];
strftime(timeWeekDay,10, "%A", &timeinfo);
Serial.println(timeWeekDay);
Serial.println();
//affichage sur OLED
display.setTextSize(2); // taille 2 pour date et heure
display.setCursor(5,0); // curseur a l'origine
display.print(&timeinfo, "%d/%m/%Y"); // jour/mois/annéee
display.setCursor(5,24); // curseur en ligne (2x12)
display.print(&timeinfo, " %H:%M:%S"); // heure:minute:seconde
display.display(); // met a jour l'affichage
}
// ***** fin fonction ****
void setup() {
Serial.begin(115200);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
delay(200);
display.clearDisplay(); // efface l'afficheur
display.setTextColor(WHITE); // texte en blanc sur fond noir
display.setTextWrap(false); // inhibe le retour a la ligne sur OLED
display.display(); // met a jour l'affichage
//****************************
// SIMULATION DU WIFI
//****************************
WiFi.begin("Wokwi-GUEST", "", 6); // simule le wifi
while (WiFi.status() != WL_CONNECTED) { // attente connexion wifi
delay(250);
Serial.println("WiFi non connecté");
}
Serial.println(""); // connexion réalisé
Serial.println("WiFi connecté");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
//****************************
configTime(UTC_OFFSET, UTC_OFFSET_DST, NTP_SERVER);
}
void loop() {
printLocalTime(); //appel fonction printLocalTime
delay(500);
display.clearDisplay(); // efface l'afficheur
}