RTC DS3231 adalah modul Real Time Clock (jam waktu nyata) yang berfungsi untuk menyimpan dan menjaga waktu (jam, menit, detik, tanggal, hari, bulan, tahun) meskipun Arduino atau ESP32 dimatikan.
berikut ini adalah cara memprogram RTCDS3231 di esp32 dengan mudah:

untuk code bisa gunakan kode dibawah ini :
#include <Arduino.h>
#include <Wire.h>
#include <RTClib.h>
RTC_DS3231 rtc_ds3231;
int jam_rtc_ds3231;
int menit_rtc_ds3231;
int detik_rtc_ds3231;
int bulan_rtc_ds3231;
int tahun_rtc_ds3231;
int minggu_rtc_ds3231;
String baca_rtc_ds3231(String format) {
DateTime now = rtc_ds3231.now();
jam_rtc_ds3231 = now.hour();
menit_rtc_ds3231 = now.minute();
detik_rtc_ds3231 = now.second();
bulan_rtc_ds3231 = now.month();
tahun_rtc_ds3231 = now.year();
minggu_rtc_ds3231 = now.dayOfTheWeek();
String waktuFormatted = format;
waktuFormatted.replace("d", String(now.day(), DEC));
waktuFormatted.replace("m", String(now.month(), DEC));
waktuFormatted.replace("Y", String(now.year(), DEC));
waktuFormatted.replace("H", String(now.hour(), DEC));
waktuFormatted.replace("i", String(now.minute(), DEC));
waktuFormatted.replace("s", String(now.second(), DEC));
return waktuFormatted;
}
void setup()
{
Serial.begin(9600);
Wire.begin();
if (!rtc_ds3231.begin()) {
Serial.println("Modul RTC tidak terdeteksi!");
while (1);
}
if (!rtc_ds3231.lostPower()) {
Serial.println("RTC tidak berjalan, atur waktu awal...");
rtc_ds3231.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
//rtc_ds3231.adjust(DateTime(2025, 6, 25, 9, 37, 0));
}
void loop(){
Serial.println("Waktu : " + baca_rtc_ds3231("d-m-Y H:i:s"));
}
🧩 1. Library dan Inisialisasi
#include <Arduino.h>
#include <Wire.h>
#include <RTClib.h>
Arduino.h: Header utama untuk semua fungsi Arduino.Wire.h: Digunakan untuk komunikasi I2C, karena DS3231 berkomunikasi via I2C.RTClib.h: Library dari Adafruit untuk komunikasi dengan berbagai modul RTC seperti DS3231.
⏰ 2. Objek dan Variabel Waktu
RTC_DS3231 rtc_ds3231;
int jam_rtc_ds3231;
int menit_rtc_ds3231;
int detik_rtc_ds3231;
int bulan_rtc_ds3231;
int tahun_rtc_ds3231;
int minggu_rtc_ds3231;
rtc_ds3231: Objek RTC berdasarkan classRTC_DS3231dariRTClib.- Variabel-variabel seperti
jam_rtc_ds3231,menit_rtc_ds3231, dll digunakan untuk menyimpan komponen waktu hasil pembacaan RTC.
📖 3. Fungsi baca_rtc_ds3231(String format)
String baca_rtc_ds3231(String format) {
DateTime now = rtc_ds3231.now(); // Ambil waktu saat ini dari RTC
jam_rtc_ds3231 = now.hour();
menit_rtc_ds3231 = now.minute();
detik_rtc_ds3231 = now.second();
bulan_rtc_ds3231 = now.month();
tahun_rtc_ds3231 = now.year();
minggu_rtc_ds3231 = now.dayOfTheWeek();
String waktuFormatted = format;
waktuFormatted.replace("d", String(now.day(), DEC));
waktuFormatted.replace("m", String(now.month(), DEC));
waktuFormatted.replace("Y", String(now.year(), DEC));
waktuFormatted.replace("H", String(now.hour(), DEC));
waktuFormatted.replace("i", String(now.minute(), DEC));
waktuFormatted.replace("s", String(now.second(), DEC));
return waktuFormatted;
}
Fungsi ini:
- Membaca waktu sekarang dari RTC.
- Menyimpan nilai-nilai waktu ke dalam variabel global.
- Mengembalikan string waktu yang diformat, berdasarkan pola
formatyang diberikan (seperti"d-m-Y H:i:s").
Misalnya:
Jika sekarang tanggal 16 Juli 2025 pukul 08:15:07, maka:
baca_rtc_ds3231("d-m-Y H:i:s")
// akan menghasilkan: "16-7-2025 8:15:7"
🛠️ 4. Fungsi setup()
void setup()
{
Serial.begin(9600); // Mulai komunikasi serial
Wire.begin(); // Inisialisasi komunikasi I2C
if (!rtc_ds3231.begin()) {
Serial.println("Modul RTC tidak terdeteksi!");
while (1); // Hentikan program
}
if (!rtc_ds3231.lostPower()) {
Serial.println("RTC tidak berjalan, atur waktu awal...");
rtc_ds3231.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
// rtc_ds3231.adjust(DateTime(2025, 6, 25, 9, 37, 0)); <-- Baris ini dikomentari, bisa dipakai untuk mengatur waktu manual
}
Penjelasan:
- Mengecek apakah modul RTC tersedia.
- Jika RTC pernah kehilangan daya (baterai lepas), maka waktu di-set ke waktu kompilasi kode menggunakan
__DATE__dan__TIME__. - Kamu juga bisa atur waktu secara manual lewat baris
adjust(DateTime(...))yang dikomentari.
🔁 5. Fungsi loop()
void loop(){
Serial.println("Waktu : " + baca_rtc_ds3231("d-m-Y H:i:s"));
}
- Akan mencetak waktu sekarang ke Serial Monitor dalam format:
Waktu : 16-7-2025 8:15:7 - Karena tidak ada
delay(), waktu akan terus dicetak sangat cepat. Biasanya disarankan tambahkan:
delay(1000); // update setiap 1 detik
🧠 Kesimpulan
Kode ini:
- Menghubungkan Arduino ke modul RTC DS3231 via I2C,
- Membaca waktu saat ini dari RTC,
- Menampilkannya di Serial Monitor dengan format yang fleksibel (
d-m-Y H:i:s), - Mengatur waktu awal secara otomatis jika RTC kehilangan daya.
untuk diskusi bisa kontak dibawah ini :

Sosial media :




