Berikut adalah kode dasar khusus untuk setting jam RTC DS1307.
Kode ini cukup di-upload sekali saja ke ESP32 untuk mengisi waktu ke modul RTC. Setelah itu, RTC akan tetap berjalan sendiri selama baterai RTC terpasang.
#include#include "RTClib.h" // Pin I2C ESP32 #define I2C_SDA_PIN 21 #define I2C_SCL_PIN 22 RTC_DS1307 rtc; void setup() { Serial.begin(115200); delay(1000); Wire.begin(I2C_SDA_PIN, I2C_SCL_PIN); Serial.println("Inisialisasi RTC DS1307..."); if (!rtc.begin()) { Serial.println("RTC DS1307 tidak terdeteksi!"); Serial.println("Periksa kabel SDA, SCL, VCC, dan GND."); while (1); } Serial.println("RTC DS1307 terdeteksi."); /* PILIH SALAH SATU CARA SETTING WAKTU */ // ===================================================== // CARA 1: Set otomatis berdasarkan waktu compile/upload // ===================================================== rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // ===================================================== // CARA 2: Set manual // Aktifkan baris di bawah ini jika ingin set waktu manual // Format: DateTime(tahun, bulan, tanggal, jam, menit, detik) // ===================================================== // rtc.adjust(DateTime(2026, 5, 10, 14, 30, 0)); Serial.println("Waktu RTC berhasil disetting."); DateTime now = rtc.now(); Serial.print("Tanggal: "); Serial.print(now.day()); Serial.print("/"); Serial.print(now.month()); Serial.print("/"); Serial.println(now.year()); Serial.print("Jam: "); Serial.print(now.hour()); Serial.print(":"); Serial.print(now.minute()); Serial.print(":"); Serial.println(now.second()); Serial.println("Selesai. RTC sekarang sudah berjalan."); } void loop() { DateTime now = rtc.now(); Serial.print("RTC: "); Serial.print(now.day()); Serial.print("/"); Serial.print(now.month()); Serial.print("/"); Serial.print(now.year()); Serial.print(" "); Serial.print(now.hour()); Serial.print(":"); Serial.print(now.minute()); Serial.print(":"); Serial.println(now.second()); delay(1000); }
Upload kode di atas sekali saja ke ESP32. Setelah waktu RTC sudah benar, jangan gunakan kode rtc.adjust() lagi di aplikasi utama, karena baris itu akan mengatur ulang jam setiap ESP32 restart.
Di aplikasi lain nanti, cukup gunakan bagian seperti ini:
#include#include "RTClib.h" #define I2C_SDA_PIN 21 #define I2C_SCL_PIN 22 RTC_DS1307 rtc; void setup() { Serial.begin(115200); Wire.begin(I2C_SDA_PIN, I2C_SCL_PIN); if (!rtc.begin()) { Serial.println("RTC tidak terdeteksi!"); while (1); } if (!rtc.isrunning()) { Serial.println("RTC belum berjalan atau baterai lemah."); } else { Serial.println("RTC sudah berjalan."); } } void loop() { DateTime now = rtc.now(); Serial.print("Jam sekarang: "); Serial.print(now.hour()); Serial.print(":"); Serial.print(now.minute()); Serial.print(":"); Serial.println(now.second()); delay(1000); }
Intinya:
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
dipakai hanya saat setting awal RTC.
Sedangkan pada aplikasi utama, cukup pakai:
DateTime now = rtc.now();
Juga Pastikan baterai kecil pada modul DS1307 terpasang, biasanya tipe CR2032, supaya waktu tetap berjalan meskipun ESP32 dimatikan.







