// ===== GEREKLİ KÜTÜPHANELER =====
#include <WiFi.h> // ESP32 WiFi bağlantısı
#include <Wire.h> // I2C haberleşme
#include <LiquidCrystal_I2C.h> // I2C LCD kontrolü
// ===== LCD TANIMI =====
// 0x27 : LCD'nin I2C adresi
// 16,2 : 16 sütun, 2 satır LCD
LiquidCrystal_I2C LCD = LiquidCrystal_I2C(0x27, 16, 2);
// ===== NTP (İNTERNET SAATİ) AYARLARI =====
#define NTP_SERVER "pool.ntp.org" // Saat sunucusu
#define UTC_OFFSET 10800 // Türkiye saat farkı (UTC +3 = 3*3600)
#define UTC_OFFSET_DST 0 // Yaz saati farkı (kullanılmıyor)
// ===== YÜKLENİYOR ANİMASYONU =====
void spinner() {
static int8_t counter = 0; // Her çağrıda değerini korur
const char* glyphs = "\xa1\xa5\xdb"; // Dönen animasyon karakterleri
LCD.setCursor(15, 1); // LCD'nin sağ alt köşesi
LCD.print(glyphs[counter++]); // Bir sonraki karakteri yaz
// Karakterler bitince başa dön
if (counter == strlen(glyphs)) {
counter = 0;
}
}
// ===== SAAT VE TARİH YAZDIRMA FONKSİYONU =====
void printLocalTime() {
struct tm timeinfo; // Zaman bilgisini tutan yapı
// İnternetten saat alınamazsa
if (!getLocalTime(&timeinfo)) {
LCD.setCursor(0, 1);
LCD.println("Baglanti Hatasi");
return; // Fonksiyondan çık
}
// Saat bilgisini yaz (HH:MM:SS)
LCD.setCursor(8, 1);
LCD.println(&timeinfo, "%H:%M:%S");
// Tarih bilgisini yaz (Bugun GG/AA/YYYY)
LCD.setCursor(0, 0);
LCD.println(&timeinfo, "Bugun %d/%m/%Y");
}
// ===== SETUP (BİR KERE ÇALIŞIR) =====
void setup() {
Serial.begin(115200); // Seri haberleşme başlat
Wire.begin(16, 17);
LCD.init(); // LCD başlat
LCD.backlight(); // LCD arka ışık aç
LCD.setCursor(0, 0);
LCD.print("Baglaniyor ");
LCD.setCursor(0, 1);
LCD.print("WiFi ");
// WiFi bağlantısı başlat
WiFi.begin("Wokwi-GUEST", "", 6);
// WiFi adı, Şifre, Kanal
// WiFi bağlanana kadar bekle + animasyon göster
while (WiFi.status() != WL_CONNECTED) {
delay(250);
spinner();
}
// Seri monitöre bağlantı bilgisi yaz
Serial.println("");
Serial.println("WiFi Baglandi");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
// LCD ekranı temizle ve saat yazısını göster
LCD.clear();
LCD.setCursor(0, 1);
LCD.println("Saat:");
// NTP saat ayarını başlat
configTime(UTC_OFFSET, UTC_OFFSET_DST, NTP_SERVER);
}
// ===== LOOP (SÜREKLİ ÇALIŞIR) =====
void loop() {
printLocalTime(); // Saat ve tarihi LCD'ye yaz
delay(250); // 250 ms bekle (ekran güncelleme hızı)
}