#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>
#include <WiFi.h>
#include <NTPClient.h>
#include <WiFiUdp.h>
// Define your Wi-Fi credentials
const char *ssid = "Wokwi-GUEST";
const char *password = "";
// Define the pins for MAX7219
#define HARDWARE_TYPE MD_MAX72XX::PAROLA_HW
#define MAX7219_DATA_PIN 23 // D23 on ESP32
#define MAX7219_CLK_PIN 18 // D18 on ESP32
#define MAX7219_CS_PIN 5 // D5 on ESP32
// Create an instance of MD_Parola for controlling the MAX7219 display
MD_Parola myDisplay = MD_Parola(HARDWARE_TYPE,MAX7219_DATA_PIN, MAX7219_CLK_PIN, MAX7219_CS_PIN, 8);
// Define NTP settings
const char *ntpServer = "pool.ntp.org";
const int utcOffsetInSeconds = 0; // Your UTC offset in seconds
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, ntpServer, utcOffsetInSeconds);
void setup() {
// Initialize Serial
Serial.begin(115200);
myDisplay.begin();
// Display loading message
myDisplay.displayText("Loading....", PA_LEFT,50,2000, PA_SCROLL_LEFT, PA_SCROLL_LEFT);
// Connect to Wi-Fi
connectToWiFi();
// Initialize timeClient
timeClient.begin();
// Display current time
displayTime();
// Pause for a moment
delay(3000);
// Display day
displayDay();
// Pause for a moment
delay(3000);
// Display date
displayDate();
}
void loop() {
// Update the time from NTP server
timeClient.update();
// Your main code can go here
}
void connectToWiFi() {
Serial.println("Connecting to WiFi...");
// Connect to Wi-Fi
WiFi.begin(ssid, password);
// Wait until connected
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
}
void displayTime() {
// Get the current time
unsigned long epochTime = timeClient.getEpochTime();
struct tm *timeinfo;
timeinfo = gmtime((const time_t *)&epochTime);
// Format time as HH:MM
char timeStr[6];
strftime(timeStr, sizeof(timeStr), "%H:%M", timeinfo);
// Display time
myDisplay.displayText(timeStr, PA_LEFT,50,2000, PA_SCROLL_LEFT, PA_SCROLL_LEFT);
}
void displayDay() {
// Get the current time
unsigned long epochTime = timeClient.getEpochTime();
struct tm *timeinfo;
timeinfo = gmtime((const time_t *)&epochTime);
// Format day
char dayStr[10];
strftime(dayStr, sizeof(dayStr), "%A", timeinfo);
// Display day
myDisplay.displayText(dayStr, PA_LEFT,50,2000, PA_SCROLL_LEFT, PA_SCROLL_LEFT);
}
void displayDate() {
// Get the current time
unsigned long epochTime = timeClient.getEpochTime();
struct tm *timeinfo;
timeinfo = gmtime((const time_t *)&epochTime);
// Format date as DD/MM/YYYY
char dateStr[11];
strftime(dateStr, sizeof(dateStr), "%d/%m/%Y", timeinfo);
// Display date
myDisplay.displayText(dateStr, PA_LEFT,50,2000, PA_SCROLL_LEFT, PA_SCROLL_LEFT);
}