Cara Menggunakan RTCDS3231 Dengan ESP32

Cara Menggunakan RTCDS3231 Dengan ESP32

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 class RTC_DS3231 dari RTClib.
  • 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 format yang 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 :