#include <WiFi.h>
#include <NTPClient.h>
#include <WiFiUdp.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <TimeLib.h>
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const long utcOffsetInSeconds = 25200; // Waktu Indonesia Barat (WIB), UTC+7
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org", utcOffsetInSeconds);
LiquidCrystal_I2C lcd(0x27, 20, 4); // Alamat I2C biasanya 0x27 atau 0x3F
void setup() {
Serial.begin(9600);
Serial.print("Connecting to WiFi");
// Menghubungkan ke WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println(" Connected!");
// Memulai NTPClient
timeClient.begin();
// Inisialisasi LCD
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print(" ONLINE ");
}
void loop() {
// Memperbarui waktu
timeClient.update();
// Mendapatkan waktu sekarang
unsigned long epochTime = timeClient.getEpochTime();
setTime(epochTime);
int currentYear = year();
int currentMonth = month();
int currentDay = day();
int currentHour = hour();
int currentMinute = minute();
int currentSecond = second();
// Menampilkan waktu sekarang ke Serial Monitor
Serial.print("Current date and time: ");
Serial.print(currentYear);
Serial.print("-");
if (currentMonth < 10) Serial.print("0");
Serial.print(currentMonth);
Serial.print("-");
if (currentDay < 10) Serial.print("0");
Serial.print(currentDay);
Serial.print(" ");
if (currentHour < 10) Serial.print("0");
Serial.print(currentHour);
Serial.print(":");
if (currentMinute < 10) Serial.print("0");
Serial.print(currentMinute);
Serial.print(":");
if (currentSecond < 10) Serial.print("0");
Serial.println(currentSecond);
// Menampilkan tanggal dan waktu sekarang ke LCD
lcd.setCursor(0, 1);
lcd.print("Date: ");
lcd.print(currentDay);
lcd.print("/");
lcd.print(currentMonth);
lcd.print("/");
lcd.print(currentYear);
lcd.setCursor(0, 2);
lcd.print("Time: ");
if (currentHour < 10) lcd.print("0");
lcd.print(currentHour);
lcd.print(":");
if (currentMinute < 10) lcd.print("0");
lcd.print(currentMinute);
lcd.print(":");
if (currentSecond < 10) lcd.print("0");
lcd.print(currentSecond);
delay(1000); // Update setiap 1 detik
}