Cara Menggunakan Modul Real-Time Clock (RTC) DS3231 dengan ESP32

Cara Menggunakan Modul Real Time Clock Rtc Ds3231 Dengan Esp32



ESP32 adalah papan mikrokontroler pintar dengan kemampuan Wi-Fi dan Bluetooth bawaan. ESP32 hadir dengan RTC internal, tetapi cara kerjanya bergantung pada daya. Jadi jika Anda ingin merancang proyek atau sirkuit yang ingin Anda jalankan meskipun tidak ada listrik, Anda harus menggunakan modul RTC eksternal seperti DS1307 atau DS3231.

Kami sudah melakukan tutorialnya DS1307 berinteraksi dengan modul ESP32 . Hari ini kita akan membahas dasar-dasar sensor DS3231 RTC dan memeriksa bagaimana seseorang dapat menghubungkannya dengan papan ESP32.

Daftar isi:







1. Apa itu Modul RTC DS3231



2. Cara Antarmuka DS3231 Dengan ESP32



3. Perangkat keras





4. Kode

5. Keluaran



6. Cara Menampilkan Waktu RTC DS3231 pada Layar OLED Menggunakan ESP32

Kesimpulan

1. Apa itu Modul RTC DS3231

Modul DS3231 memberikan ketepatan waktu yang sangat akurat. Ini mencakup osilator kristal kompensasi suhu (TCXO) terintegrasi untuk memberi kita waktu dengan sangat presisi. Modul ini beroperasi pada protokol I2C menggunakan konfigurasi Master-Slave. Ia dapat menyimpan waktu dan tanggal dengan baterai cadangan meskipun tidak ada daya input utama. Ini biasanya digunakan pada perangkat yang bergantung pada waktu dan tanggal.

DS3231 mengawasi detik, menit, dan jam. Itu juga dapat menyimpan catatan tanggal dan hari kerja. Ketika berhadapan dengan tahun kabisat, waktu secara otomatis disesuaikan. Selain itu dapat menampilkan waktu dalam format 12 jam atau 24 jam, lengkap dengan indikator AM/PM.

1.1. DS3231 Vs DS1307

Baik DS3231 dan DS1307 merupakan modul pengatur waktu dengan dukungan cadangan baterai. Namun, DS3231 lebih akurat dibandingkan DS1307. Alasan utamanya adalah DS1307 bergantung pada kristal 32kHz eksternal untuk ketepatan waktu.

Namun, RTC DS3231 dilengkapi dengan Temperature Compensated Crystal Oscillator (TCXO) internal. Hal ini membuatnya tidak terlalu terpengaruh oleh suhu eksternal dan sebagai hasilnya, DS1307 memiliki keunggulan akurasi beberapa menit per tahun dibandingkan DS1307.

1.2. Pinout DS3231

DS3231 bekerja menggunakan protokol I2C. Inti dari modul RTC ini adalah chip RTC akurat yang dirancang oleh Maxim. Chip ini menangani semua fungsi waktu dan berkomunikasi menggunakan I2C dengan papan ESP32 atau Arduino.

Pin utama modul RTC DS3231 adalah:

  • VCC: Hubungkan pin ini ke terminal positif sumber listrik Anda.
  • GND: Koneksi darat.
  • SDA: Pin Data Serial (digunakan untuk komunikasi I2C).
  • SCL: Pin Jam Serial (juga bagian dari antarmuka I2C).
  • QW: Pin keluaran Gelombang Persegi (dapat menghasilkan sinyal periodik, misalnya untuk alarm atau keperluan pengaturan waktu lainnya).
  • 32K: Output osilator 32KHz (berguna untuk aplikasi pengaturan waktu yang tepat).

Berikut ini adalah komponen utama pada modul RTC DS3231:

  • Tempat Baterai: Hal ini memungkinkan modul untuk tetap berjalan ketika daya eksternal tidak ada.
  • Chip RTC: Chip ini mempertahankan waktu dan tanggal.
  • EEPROM AT24C32: Ini menyediakan penyimpanan non-volatil untuk pencatatan data dan keperluan lainnya dengan 1.000.000 siklus tulis.
  • TCXO: Osilator kompensasi suhu untuk memberikan waktu yang tepat untuk rentang suhu yang bervariasi.
  • Sensor temperatur: Dibutuhkan pembacaan suhu dan menyediakannya sebagai bagian dari fitur modul.

2. Cara Antarmuka DS3231 dengan ESP32

Untuk menghubungkan DS3231 dengan ESP32, Anda perlu menginstal perpustakaan RTClib Pertama. Setelah menginstal perpustakaan Adafruit RTC ini, Anda dapat menghubungkan papan ESP32 Anda dengan DS3231 menggunakan protokol I2C. Untuk menghubungkan ESP32 I2C dengan modul RTC DS3231 dapat menggunakan pin ESP32 D21 dan D22.

2.1. Diagram Pengkabelan ESP32 dengan RTC DS3231

Pertama, Anda harus menyambungkan ESP32 dengan modul I2C RTC DS3231 Anda. Ikuti konfigurasi pin yang diberikan di bawah ini untuk pengkabelan:

Setelah menghubungkan ESP32 dengan RTC DS3231, diagram pengkabelan Anda akan terlihat seperti ini. Anda juga dapat memberi daya pada DS3231 dari pin VIN ESP32. Tegangan operasi DS3231 adalah 3,3 hingga 5,5 VDC.

2.2. Menginstal Perpustakaan yang Diperlukan

Setelah rangkaian siap, langkah selanjutnya adalah konfigurasikan papan ESP32 Anda dengan Arduino IDE . Untuk menghubungkan DS3231, Anda perlu menginstal perpustakaan RTClib . Anda dapat menginstalnya dengan menggunakan pengelola perpustakaan Arduino IDE.

3. Perangkat keras

Anda memerlukan perangkat keras berikut untuk mendesain jam RTC berbasis DS3231 dengan ESP32:

  • Papan pengembangan ESP32
  • Modul RTC DS3231
  • baterai CR2032
  • Kabel pelompat
  • Papan tempat memotong roti

4. Kode

Setelah menginstal perpustakaan RTC, bagian selanjutnya adalah menulis kode untuk DS3231 dan mengunggahnya ke papan ESP32. Pertama, Anda harus menulis kode untuk mengatur waktu Anda saat ini. Setelah Anda mengatur waktu di DS3231, ia akan mengingat waktu dan terus berjalan meskipun papan ESP32 Anda dimatikan.

Sekarang buka Arduino IDE, kompilasi, dan bakar kodenya ke papan ESP32.

#termasuk
#sertakan

RTC_DS3231 rtc ; // Inisialisasi instance kelas RTC_DS3231

ruang kosong mempersiapkan ( ) {
Serial. mulai ( 115200 ) ;
Kabel. mulai ( ) ;

jika ( ! rtc. mulai ( ) ) {
Serial. cetakln ( 'RTC tidak terdeteksi' ) ;
ketika ( 1 ) ; // Hang tanpa batas waktu jika RTC tidak ditemukan
}

//Batalkan komentar pada baris di bawah ini untuk menyetel tanggal dan waktu awal
//rtc.adjust(DateTime(__DATE__, __TIME__));
}

ruang kosong lingkaran ( ) {
// Membaca waktu saat ini dari sensor (DS3231)
TanggalWaktu sekarang = rtc. Sekarang ( ) ;

// Cetak tanggal dan waktu pada baris yang sama dengan dua digit jam, menit, dan detik
Serial. mencetak ( 'Tanggal sekarang: ' ) ;
Serial. mencetak ( Sekarang. tahun ( ) , Desember ) ;
Serial. mencetak ( '/' ) ;
cetakDuaDigit ( Sekarang. bulan ( ) ) ;
Serial. mencetak ( '/' ) ;
cetakDuaDigit ( Sekarang. hari ( ) ) ;
Serial. mencetak ( ' Waktu saat ini: ' ) ;
cetakDuaDigit ( Sekarang. jam ( ) ) ;
Serial. mencetak ( ':' ) ;
cetakDuaDigit ( Sekarang. menit ( ) ) ;
Serial. mencetak ( ':' ) ;
cetakDuaDigit ( Sekarang. Kedua ( ) ) ;
Serial. cetakln ( ) ;

menunda ( 1000 ) ; // Perbarui setiap 1 detik
}

ruang kosong cetakDuaDigit ( ke dalam nomor ) {
jika ( nomor < 10 ) {
Serial. mencetak ( '0' ) ; // Tambahkan angka nol di depan untuk angka satu digit
}
Serial. mencetak ( nomor ) ;
}

4.1. Penjelasan Kode

Kode dimulai dengan menginisialisasi komunikasi serial I2C dengan bantuan perpustakaan kawat. Setelah itu, kami menyertakan perpustakaan RTC oleh Adafruit untuk berinteraksi dengan modul DS3231. Library ini menyediakan fungsi untuk berinteraksi dengan modul RTC DS3231.

Dalam mempersiapkan bagian, bus I2C dimulai dan diperiksa untuk perangkat I2C yang tersedia. Jika tidak ditemukan, program akan hang tanpa batas waktu. Baud rate juga ditentukan sehingga Anda dapat memeriksa output pada monitor serial Arduino IDE.

Menyetel Jam untuk Pertama Kalinya

Saat memprogram DS3231, Anda harus melakukannya batalkan komentar pada baris ini . Ini akan mendapatkan waktu sistem Anda dan menyimpannya di dalam memori RTC. Dengan melakukan ini, jam modul RTC akan disinkronkan dengan jam sistem Anda.

//rtc.adjust(DateTime(__DATE__, __TIME__));

Setelah waktu yang ditentukan Anda harus mengunggah ulang kode di atas tetapi kali ini harus beri komentar pada baris fungsi rtc.adjust() . Jika tidak, ini akan menimpa waktu yang Anda tetapkan sebelumnya dan ketika ESP32 Anda dimatikan, RTC akan mulai lagi dari saat Anda mengunggah kode.

Dengan melakukan ini, waktu Anda akan tetap ada di latar belakang modul RTC selama modul RTC memiliki daya di sel CR2032-nya.

Dalam lingkaran bagiannya, tanggal dan waktu saat ini dibaca dari modul DS3231 menggunakan fungsi rtc.now(). Komponen tanggal dan waktu diekstraksi dan tanggal yang diformat dicetak pada monitor serial Arduino IDE setiap satu detik.

5. Keluaran

Setelah mengupload kode ke board ESP32, Anda akan melihat waktu mulai mencetak pada monitor serial Arduino IDE.

6. Cara Menampilkan Waktu RTC DS3231 di Layar OLED Menggunakan ESP32

Anda juga dapat melangkah lebih jauh dan menampilkan waktu di layar OLED Anda setelah membacanya dari DS3231. Untuk melakukan ini, Anda perlu menginstal Pustaka Adafruit GFX SSD1306 di Arduino IDE.

Setelah terinstal, sambungkan ESP32 dengan modul OLED dan RTC dengan konfigurasi berikut.

Setelah menghubungkan sensor Anda, Anda akan melihat rangkaian seperti diagram skematik di bawah ini.

Sekarang unggah kode DS3231 berikut ke papan ESP32.

#termasuk
#termasuk
#termasuk
#sertakan 'RTClib.h'

RTC_DS3231 rtc ;

arang hari [ 7 ] [ 12 ] = { 'Minggu' , 'Senin' , 'Selasa' , 'Rabu' , 'Kamis' , 'Jumat' , 'Sabtu' } ;

Tampilan Adafruit_SSD1306 = Adafruit_SSD1306 ( 128 , 64 , & Kabel , - 1 ) ;

ruang kosong mempersiapkan ( ) {
Serial. mulai ( 115200 ) ;

menampilkan. mulai ( SSD1306_SWITCHCAPVCC , 0x3C ) ;

jika ( ! rtc. mulai ( ) ) {
Serial. cetakln ( 'Tidak dapat menemukan RTC! Periksa sirkuit.' ) ;
ketika ( 1 ) ;
}
//hapus komentar pada baris di bawah ini saat mengatur waktu untuk pertama kalinya
//rtc.adjust(DateTime(__DATE__, __TIME__));
menampilkan. jelasTampilan ( ) ;
menampilkan. setTeksWarna ( PUTIH ) ;
menampilkan. setTeksUkuran ( 2 ) ;
menampilkan. set Kursor ( 0 , dua puluh ) ;
menampilkan. mencetak ( 'JAM RTC' ) ;
menampilkan. menampilkan ( ) ;
menunda ( 5000 ) ;
}

ruang kosong lingkaran ( ) {
TanggalWaktu sekarang = rtc. Sekarang ( ) ;

menampilkan. jelasTampilan ( ) ;
menampilkan. setTeksUkuran ( 2 ) ;
menampilkan. set Kursor ( 75 , 0 ) ;
menampilkan. cetakln ( Sekarang. Kedua ( ) , Desember ) ;
menampilkan. setTeksUkuran ( 2 ) ;
menampilkan. set Kursor ( 25 , 0 ) ;
menampilkan. cetakln ( ':' ) ;
menampilkan. setTeksUkuran ( 2 ) ;
menampilkan. set Kursor ( 65 , 0 ) ;
menampilkan. cetakln ( ':' ) ;
menampilkan. setTeksUkuran ( 2 ) ;
menampilkan. set Kursor ( 40 , 0 ) ;
menampilkan. cetakln ( Sekarang. menit ( ) , Desember ) ;
menampilkan. setTeksUkuran ( 2 ) ;
menampilkan. set Kursor ( 0 , 0 ) ;
menampilkan. cetakln ( Sekarang. jam ( ) , Desember ) ;
menampilkan. setTeksUkuran ( 2 ) ;
menampilkan. set Kursor ( 0 , 25 ) ;
menampilkan. cetakln ( Sekarang. hari ( ) , Desember ) ;
menampilkan. mencetak ( hari [ Sekarang. hari di minggu ini ( ) ] ) ;
menampilkan. setTeksUkuran ( 2 ) ;
menampilkan. set Kursor ( dua puluh , 25 ) ;
menampilkan. cetakln ( '-' ) ;
menampilkan. setTeksUkuran ( 2 ) ;
menampilkan. set Kursor ( 35 , 25 ) ;
menampilkan. cetakln ( Sekarang. bulan ( ) , Desember ) ;
menampilkan. setTeksUkuran ( 2 ) ;
menampilkan. set Kursor ( 60 , 25 ) ;
menampilkan. cetakln ( '-' ) ;
menampilkan. setTeksUkuran ( 2 ) ;
menampilkan. set Kursor ( 75 , 25 ) ;
menampilkan. cetakln ( Sekarang. tahun ( ) , Desember ) ;
menampilkan. menampilkan ( ) ;
}

Penjelasan Kode

Kode dimulai dengan beberapa perpustakaan penting yang diperlukan untuk layar RTC dan OLED. Layar OLED diatur menggunakan perpustakaan Adafruit SSD1306.

Di bagian loop, tanggal dan waktu saat ini diperoleh dengan menggunakan rtc.now(). Setelah itu, layar OLED dibersihkan dan komponen waktu ditampilkan dalam format jam digital. Anda juga dapat memodifikasi kode untuk menyesuaikan format tanggal dan waktu.

Setelah kode diunggah ke papan Anda, Anda akan mendapatkan waktu saat ini di layar OLED.

Catatan: Kode di atas menggunakan 0x3C Alamat I2C untuk OLED. Ini adalah alamat I2C paling umum yang tersedia pada layar OLED SSD1306. Jika Anda ingin menemukan alamat I2C untuk layar OLED Anda, Anda dapat menjalankannya Kode Pemindai I2C .

Kesimpulan

DS3231 merupakan sensor RTC yang dapat digunakan untuk penunjuk waktu. Ia memiliki baterai cadangan yang dapat menjaga waktu tetap akurat meskipun papan mikrokontroler Anda dimatikan. Untuk menghubungkan ESP2 dengan DS3231, Anda harus menginstal perpustakaan RTClib di Arduino IDE Anda. Setelah itu, Anda harus menghubungkan modul RTC melalui protokol I2C menggunakan pin digital ESP32. Setelah terhubung, cukup unggah kode dan sesuaikan waktunya. Sekarang sensor RTC akan menjaga waktu, dan Anda dapat membacanya di monitor serial pada proyek berbasis waktu desain.