ESP32 Jam Waktu Nyata (RTC) Menggunakan DS1307 dan Layar OLED

Esp32 Jam Waktu Nyata Rtc Menggunakan Ds1307 Dan Layar Oled



ESP32 hadir dengan modul RTC internal, tetapi hanya berfungsi jika ada daya. Jika listrik padam, jam akan direset dan tidak dapat menampilkan waktu yang tepat. Jadi jika Anda ingin melacak waktu atau mengontrol perangkat berbasis waktu apa pun, cobalah sensor DS1307 RTC. Namun, Anda mungkin berpikir untuk menghubungkan baterai cadangan dengan papan ESP32 Anda, tetapi itu bukan skenario terbaik untuk dilakukan jika Anda kekurangan daya. Alternatif terbaik adalah menggunakan sensor DS1307, karena dilengkapi dengan baterai internal yang dapat bertahan minimal satu tahun.

Untuk lebih jelasnya, Real-Time Clock (RTC) internal ESP32 dapat melacak waktu bahkan ketika prosesor utama dimatikan atau dalam kondisi tidur nyenyak. Anda dapat menggunakan ESP32 RTC untuk melacak waktu tanpa menggunakan banyak daya atau mempengaruhi prosesor utama. Tetapi masih membutuhkan daya untuk menjalankannya, tidak terlalu banyak tetapi jumlah daya minimum yang diperlukan agar RTC internal dapat berjalan.

Jadi dengan ini, kita hanya punya solusi menggunakan modul RTC eksternal. Mari kita lihat langkah-langkah menghubungkan board ESP32 dengan modul DS1307 RTC.







Isi:

1. Apa Itu Modul RTC DS1307

DS1307 adalah perangkat berdaya rendah yang dapat melacak waktu dan tanggal secara akurat. Ini menggunakan format desimal berkode biner (BCD). Ini dapat memberi tahu Anda waktu dalam format terperinci seperti detik, menit, dan bahkan jam dan hari. Anda juga dapat mencetak tanggal dalam format lengkap seperti bulan dan tahun. Ia juga mengetahui kapan tahun kabisat, hingga tahun 2100. Untuk berkomunikasi dengan DS1307, Anda dapat menggunakan protokol I2C.





DS1307 memiliki baterai internal yang dapat memberi daya selama sekitar satu tahun tanpa sumber 5V eksternal. Dengan menggunakan baterai cadangan ini, ia dapat mempertahankan waktu meskipun daya utama dimatikan. Ia juga memiliki 56 byte SRAM untuk menyimpan beberapa data. DS1307 adalah perangkat praktis yang memiliki banyak aplikasi bila dikombinasikan dengan papan Arduino atau ESP32. Misalnya, data ini dapat berguna dalam pencatatan data, sistem alarm, atau pengendalian industri. Jika Anda membutuhkan ketepatan waktu yang andal, DS1307 adalah pilihan yang bagus.





Spesifikasi Modul RTC DS1307

Modul RTC DS1307 terdiri dari IC RTC, EEPROM, osilator kristal, dan tempat baterai untuk cadangan.



Di bawah ini rincian bagian-bagian tersebut:

IC RTC DS1307 : IC RTC DS1307 adalah chip 8-pin yang melacak waktu dan tanggal menggunakan protokol I2C. Ia menggunakan daya yang sangat kecil, kurang dari 500nA. Itu dapat menampilkan waktu dalam detik, menit, dan jam, dan tanggal dalam hari, bulan, dan tahun. Itu juga dapat beralih antara format 24 jam dan 12 jam.

IC EEPROM 24C32 : IC EEPROM 24C32 adalah chip 32-byte dari Atmel yang menyimpan pengaturan, waktu, dan tanggal. Itu juga menggunakan protokol I2C.

Kristal 32,768kHz : Osilator kristal 32,768kHz menyediakan frekuensi clock untuk IC RTC DS1307.

Tempat Baterai : Tempat baterai menampung baterai CR2032. Ini adalah sel koin litium 3V. Ini memberikan daya terus menerus ke IC RTC DS1307.

Penyediaan Sensor DS18B20 : Ketentuan sensor DS18B20 memungkinkan Anda menyolder dan menggunakan sensor suhu DS18B20. Itu tidak disolder sebelumnya. Anda dapat menyolder paket melalui lubang dan mendapatkan suhu dari pin DS modul.

Daftar di bawah ini memberikan beberapa spesifikasi singkat dari sensor DS1307 RTC:

  • Tegangan operasi: 4,5–5,5 V, biasanya 5 V
  • Konsumsi saat ini : Kurang dari 1,5 mA
  • Ketepatan : 0–40 °C, tergantung pada kristalnya
  • Baterai : CR2032 (koin 3 V)
  • Penyimpanan : 56 byte RAM non-volatil
  • Antarmuka : Antarmuka serial dua kabel (I2C).
  • Keluaran : pin keluaran 1 Hz
  • Keluaran gelombang persegi yang dapat diprogram : Mengkonsumsi kurang dari 500 nA dalam mode cadangan baterai
  • Deteksi kegagalan daya : Deteksi kegagalan daya otomatis dan sirkuit sakelar
  • Sirkuit yang peka terhadap kekuatan : Dapat beralih secara otomatis untuk mencadangkan pasokan jika terjadi kekurangan daya
  • Kompensasi tahun kabisat : Berlaku hingga tahun 2100

Pinout Modul RTC DS1307

Modul ini memiliki beberapa pin dengan fungsi berbeda-beda.

  • VCC adalah pin yang membutuhkan tegangan DC antara 3.3V dan 5.5V untuk memberi daya pada modul.
  • GND adalah pin untuk tegangan rendah atau ground.
  • SDA Dan SCL adalah pin yang mengkomunikasikan data dan sinyal jam melalui bus I2C.
  • DS adalah pin yang mengukur suhu dengan sensor DS1307 jika ada di modul RTC.
  • meter persegi adalah pin yang menghasilkan sinyal gelombang persegi dengan frekuensi 1 Hz, 4 kHz, 8 kHz, atau 32 kHz, tergantung cara Anda memprogramnya.
  • SATU adalah pin yang menggunakan baterai 3V untuk menjaga keakuratan waktu saat listrik utama mati.

2. Cara Antarmuka RTC DS1307 dan Layar OLED dengan ESP32

Untuk menghubungkan ESP32 dengan DS1307 dan Layar OLED, Anda dapat menggunakan pin I2C bawaan pada papan ESP32. Layar DS1307 dan OLED adalah perangkat berbasis I2C. Kemudian dapat berkomunikasi menggunakan protokol master slave I2C melalui bus I2C.

Sebelum kita beralih ke antarmuka ESP32 dengan DS1307 dan layar OLED, pertama-tama Anda harus menginstal beberapa perpustakaan yang diperlukan.

Menginstal Perpustakaan yang Diperlukan

Anda memerlukan dua perpustakaan, satu untuk modul RTC dan satu lagi untuk layar OLED. Menggunakan OLED dengan modul RTC, Anda dapat membuat pratinjau jam yang menakjubkan dan interaktif. Jika Anda tidak berencana menampilkan waktu di layar, Anda dapat melewati instalasi perpustakaan ini.

Berikut adalah dua perpustakaan yang Anda perlukan:

  • Lib RTC (oleh Adafruit) adalah perpustakaan Arduino IDE untuk mengatur dan mendapatkan waktu dari RTC. Ini juga menyediakan kelas untuk memanipulasi tanggal, waktu, dan durasi. Dengan menggunakan perpustakaan ini, Anda dapat menghubungkan dan memprogram modul jam waktu nyata (RTC), seperti DS1307 dan DS3231.
  • S SD1306 (oleh Adafruit) adalah perpustakaan untuk Arduino, yang dengannya Anda dapat menghubungkan dan memprogram tampilan OLED dengan Arduino atau papan mikrokontroler lainnya.

Untuk mengunduh dan menginstal kedua perpustakaan ini di Arduino IDE, pertama buka Manajer Perpustakaan cari perpustakaan RTClib, dan klik Install :

Anda akan mendapatkan opsi untuk menginstal hanya perpustakaan atau dependensinya. Klik Instal Semua tombol untuk menginstal perpustakaan sepenuhnya. Dengan cara ini Anda tidak akan mendapatkan kesalahan apa pun jika Anda mengubah kode yang bergantung pada dependensi perpustakaan ini.

Demikian pula, cari perpustakaan SSD1306. Perpustakaan ini diperlukan untuk layar OLED. Klik Install untuk melanjutkan.

Kali ini Anda juga akan mendapatkan pesan konfirmasi yang sama. Klik pada Instal Semua pilihan.

Sekarang perpustakaan untuk OLED dan DS1307 telah diinstal dan siap digunakan. Namun sebelum itu, cari tahu dulu alamat I2C untuk layar OLED tersebut.

3. Menemukan Alamat I2C Layar OLED

Alamat I2C adalah pengidentifikasi unik untuk setiap perangkat di bus I2C. Hal ini memungkinkan perangkat master untuk berkomunikasi dengan perangkat budak tertentu dengan mengirimkan data ke alamatnya. Tujuan dari alamat I2C adalah untuk menghindari konflik dan kebingungan antara beberapa perangkat di bus yang sama.

Untuk mendapatkan alamat perangkat I2C, Anda dapat menggunakan a sketsa sederhana yang memindai bus dan mencetak alamatnya perangkat yang ditemukannya. Alternatifnya, Anda dapat memeriksa lembar data perangkat untuk melihat alamat default atau alamat yang dapat dikonfigurasi.

Di sini, dalam kasus kami setelah menjalankan kode pemindai I2C, alamat I2C layar OLED berikut ditampilkan di terminal Arduino IDE.

Seringkali, ada kemungkinan besar Anda juga akan mendapatkan hal yang sama 0x3C alamat untuk layar OLED Anda.

4. Menghubungkan Modul OLED dan RTC DS1307 dengan ESP32

1. Hubungkan pin SDA dan SCL pada modul DS1307 dan Layar OLED ke pin I2C dari ESP32. Biasanya, ini adalah GPIO 21 dan GPIO 22 , tetapi Anda juga dapat menetapkan pin lain dalam kode jika diperlukan.

2. Hubungkan VCC dan GND DS1307 serta layar OLED ke pin 3.3V dan GND ESP32.

3. Masukkan baterai sel berbentuk koin CR2032 ke dalam modul DS1307 untuk menyediakan daya cadangan untuk jam waktu nyata.

4. Unggah contoh kode dari tutorial ini ke papan ESP32 Anda. Ubah kode untuk keluaran khusus.

Setelah diunggah, jam akan mulai dari waktu yang ditentukan dan menampilkan waktu di layar OLED.

5. Diagram Sirkuit

Diagram rangkaian ESP32 dengan DS1307 sederhana, hanya dengan empat kabel yang perlu disambungkan. Anda dapat memperpendek kabel I2C SDA dan SCL dari sensor OLED dan DS1307. Demikian pula, untuk menyalakan kedua sensor ini, pin 3V3 dan GND pada papan ESP32 dapat digunakan. Anda juga dapat memberi daya dari sumber terpisah jika diperlukan.

Catatan : Aman untuk memberi daya pada RTC DS1307 dari pin 3.3V ESP32 jika batas arus ESP32 tidak terlampaui. Namun jika Anda ingin berada di lokasi yang aman, Anda dapat menggunakan sumber daya terpisah untuk modul RTC atau mencoba sensor DS3231 berdaya rendah yang rentang pengoperasiannya antara 3,3 hingga 5,5 VDC.

Gambar di bawah mengilustrasikan koneksi ESP32 dengan sensor RTC DS1307.

Demikian pula, jika Anda ingin menyambungkan layar OLED untuk menampilkan waktu, Anda dapat menggunakan pin I2C dan pin daya yang sama pada papan ESP32.

6. Kode

Dengan menggunakan kode di bawah ini, kami akan menyetel tanggal dan waktu saat ini di RTC. Setelah mengatur waktu, kode akan menampilkan waktu pada terminal Arduino IDE. Sebelum mengunggah kode, Anda perlu memperbaruinya dengan tanggal dan waktu saat ini.

#sertakan 'RTClib.h'
RTC_DS1307 DS1307_RTC;
char Hari_minggu [ 7 ] [ 12 ] = { 'Minggu' , 'Senin' , 'Selasa' , 'Rabu' , 'Kamis' , 'Jumat' , 'Sabtu' } ;
pengaturan batal ( ) {
Serial.mulai ( 115200 ) ;
#ifndef ESP8266
ketika ( ! Serial ) ;
#berakhir jika
jika ( ! DS1307_RTC.mulai ( ) ) {
Serial.println ( 'Tidak dapat menemukan RTC' ) ;
ketika ( 1 ) ;
}
DS1307_RTC.sesuaikan ( Tanggal Waktu ( F ( __TANGGAL__ ) , F ( __WAKTU__ ) ) ) ;
}
lingkaran kosong ( ) {
TanggalWaktu sekarang = DS1307_RTC.sekarang ( ) ;
Serial.cetak ( sekarang.tahun ( ) , Desember ) ;
Serial.cetak ( '/' ) ;
Serial.cetak ( sekarang.bulan ( ) , Desember ) ;
Serial.cetak ( '/' ) ;
Serial.cetak ( sekarang.hari ( ) , Desember ) ;
Serial.cetak ( '(' ) ;
Serial.cetak ( Hari_minggu [ sekarang.dayOfTheWeek ( ) ] ) ;
Serial.cetak ( ') ' ) ;
Serial.cetak ( sekarang.jam ( ) , Desember ) ;
Serial.cetak ( ':' ) ;
Serial.cetak ( sekarang.menit ( ) , Desember ) ;
Serial.cetak ( ':' ) ;
Serial.cetak ( sekarang.kedua ( ) , Desember ) ;
Serial.println ( ) ;
menunda ( 1000 ) ;
}

Kode ini menggunakan perpustakaan RTClib untuk berinteraksi dengan modul jam waktu nyata DS1307 yang melacak tanggal dan waktu.

Itu mempersiapkan fungsi dimulai dengan menginisialisasi baud rate. Setelah itu, di dalam bagian ini, kami mendefinisikan fungsi untuk menyinkronkan tanggal dan waktu komputer dengan sensor DS1307. Ini akan mengunggah waktu kompilasi kode ke sensor RTC.

Anda dapat menggunakan lingkaran berfungsi untuk mendapatkan tanggal dan waktu dari RTC. Kemudian Anda dapat menampilkannya di monitor serial seperti ini: tahun/bulan/hari (hari dalam seminggu) jam:menit:detik. Ingatlah untuk menambahkan penundaan satu detik setelah setiap loop, sehingga kode tidak berjalan terlalu cepat.

Tampilkan Waktu Saat Ini di Layar OLED

Untuk menampilkan waktu yang sama di layar OLED, kita harus menambahkan bagian kode tambahan untuk layar OLED. Cukup unggah kode yang diberikan. Kode ini akan menampilkan waktu saat ini di layar OLED Anda.

Ingat, di sini kami menggunakan Modul Layar OLED SSD I2C 128×64 0,96 inci. Jika Anda menggunakan ukuran lain, ubah kodenya sesuai dengan itu. Juga, periksa alamat I2C dan ubah dalam kode yang diberikan. Dalam kasus kami, kami memiliki alamat I2C 0x3C untuk layar OLED.

#termasuk
#termasuk
#termasuk
#sertakan 'RTClib.h'
#tentukan SCREEN_WIDTH 128
#tentukan SCREEN_HEIGHT 64

Tampilan Adafruit_SSD1306 ( SCREEN_WIDTH, SCREEN_HEIGHT, & Kabel, - 1 ) ;
RTC_DS1307 RTC;
hari arang [ 7 ] [ 12 ] = { 'Minggu' , 'Senin' , 'Selasa' , 'Rabu' , 'Kamis' , 'Jumat' , 'Sabtu' } ;
pengaturan batal ( ) {
Serial.mulai ( 115200 ) ;
jika ( ! RTC.mulai ( ) ) {
Serial.println ( 'Tidak dapat menemukan RTC' ) ;
ketika ( 1 ) ;
}
RTC.sesuaikan ( Tanggal Waktu ( F ( __TANGGAL__ ) , F ( __WAKTU__ ) ) ) ;
jika ( ! tampilan.mulai ( SSD1306_SWITCHCAPVCC, 0x3C ) ) {
Serial.println ( F ( 'Alokasi SSD1306 gagal' ) ) ;
untuk ( ;; ) ;
}
menunda ( 1000 ) ;
tampilan.clearDisplay ( ) ;
tampilan.setTextSize ( 2 ) ;
tampilan.setTextColor ( PUTIH ) ;
tampilan.setCursor ( 30 , dua puluh ) ;
tampilan.println ( Linux ) ;
tampilan.tampilan ( ) ;
menunda ( 3000 ) ;
tampilan.clearDisplay ( ) ;
}
lingkaran kosong ( ) {
DateTime sekarang = RTC.sekarang ( ) ;
tampilan.clearDisplay ( ) ;
tampilan.setTextSize ( 2 ) ;
tampilan.setCursor ( 0 , 0 ) ;
tampilan.cetak ( sekarang.hari ( ) ) ;
tampilan.cetak ( '/' ) ;
tampilan.cetak ( sekarang.bulan ( ) ) ;
tampilan.cetak ( '/' ) ;
tampilan.cetak ( sekarang.tahun ( ) ) ;
tampilan.println ( hari [ sekarang.dayOfTheWeek ( ) ] ) ;
tampilan.println ( ' ' ) ;
tampilan.setCursor ( 0 , 40 ) ;
jika ( sekarang.jam ( ) < 10 )
tampilan.cetak ( '0' ) ;
tampilan.cetak ( sekarang.jam ( ) ) ;
tampilan.cetak ( ':' ) ;
jika ( sekarang.menit ( ) < 10 )
tampilan.cetak ( '0' ) ;
tampilan.cetak ( sekarang.menit ( ) ) ;
tampilan.cetak ( ':' ) ;
jika ( sekarang.kedua ( ) < 10 )
tampilan.cetak ( '0' ) ;
tampilan.println ( sekarang.kedua ( ) ) ;
tampilan.tampilan ( ) ;
}

Kode dimulai dengan perpustakaan yang kami instal untuk RTC dan tampilan. Setelah itu, ia menentukan ukuran layar dan alamat tampilan. Ini menginisialisasi array dengan nama hari kerja.

Itu mempersiapkan bagian dimulai dengan komunikasi serial. Ia memeriksa apakah RTC dan tampilan berfungsi atau tidak. Setelah itu, kita telah menentukan teks string “Linuxhint” yang akan ditampilkan selama 3 detik. Ini hanya pesan pembuka atau pesan permulaan, Anda juga dapat mengubah pesan ini dengan teks khusus Anda.

Itu lingkaran fungsi mendapatkan tanggal dan waktu modul DS1307. Setelah itu, ia menghapus tampilan dan mencetak tanggal dan waktu dalam format. Kode ini juga menambahkan angka nol di depan jam, menit, dan detik, jika nilainya lebih kecil dari 10.

7. Perangkat keras

Setelah mengunggah kode ke papan ESP32, Anda akan melihat keluaran berikut di layar OLED. Untuk hardware, kami menggunakan layar OLED dan modul I2C RTC DS1307. Papan ESP32 dengan 30 pin digunakan. Anda juga dapat bereksperimen dengan papan ESP32 lainnya, tetapi pastikan untuk menghubungkan pin I2C dengan benar.

Kesimpulan

RTC DS1307 memiliki SRAM 56-byte dengan dukungan cadangan baterai. Ini adalah perangkat 8-pin yang menggunakan protokol komunikasi I2C. Untuk menghubungkan modul DS1307 RTC dengan ESP32, Anda dapat menggunakan pin I2C (GPIO 22 (SCL) dan GPIO 21 (SDA)) dari board ESP32. Anda dapat mencetak waktu di konsol Arduino IDE atau menggunakan layar apa pun seperti OLED atau LCD I2C untuk menampilkan waktu. Modul DS1307 RTC adalah perangkat yang berguna untuk melacak waktu dan tanggal dalam berbagai aplikasi. Beberapa aplikasi utama termasuk data logger, jam digital, dan jam tangan pintar.