Cara Menggunakan Modul Jam Masa Nyata (RTC) DS3231 dengan ESP32

Cara Menggunakan Modul Jam Masa Nyata Rtc Ds3231 Dengan Esp32



ESP32 ialah papan mikropengawal pintar dengan keupayaan Wi-Fi dan Bluetooth terbina dalam. ESP32 datang dengan RTC dalaman, tetapi kerjanya bergantung kepada kuasa. Jadi jika anda ingin mereka bentuk projek atau litar yang anda ingin jalankan walaupun tiada kuasa, anda mesti menggunakan mana-mana modul RTC luaran seperti DS1307 atau DS3231.

Kami sudah membuat tutorial tentang DS1307 antara muka dengan modul ESP32 . Hari ini kita akan membincangkan asas-asas penderia RTC DS3231 dan menyemak bagaimana seseorang boleh menghubungkannya dengan papan ESP32.

Isi kandungan:







1. Apakah itu Modul RTC DS3231



2. Cara Mengantaramuka DS3231 Dengan ESP32



3. Perkakasan





4. Kod

5. Output



6. Cara Memaparkan Masa RTC DS3231 pada Skrin OLED Menggunakan ESP32

Kesimpulan

1. Apakah itu Modul RTC DS3231

Modul DS3231 menyediakan ketepatan masa yang sangat tepat. Ia termasuk pengayun kristal pampasan suhu bersepadu (TCXO) untuk memberi kita masa dengan ketepatan yang tinggi. Modul ini beroperasi pada protokol I2C menggunakan konfigurasi Master-Slave. Ia boleh menyimpan masa dan tarikh dengan bateri sandaran walaupun tiada kuasa input utama. Ia biasanya digunakan dalam peranti yang bergantung pada masa dan tarikh.

DS3231 memantau detik, minit dan jam. Ia juga boleh menyimpan rekod tarikh dan hari bekerja. Apabila berurusan dengan tahun lompat, ia secara automatik melaraskan masa dengan sewajarnya. Selain itu, ia boleh memaparkan masa dalam format 12 jam atau 24 jam, lengkap dengan penunjuk AM/PM.

1.1. DS3231 Lwn DS1307

Kedua-dua DS3231 dan DS1307 adalah modul penjimat masa dengan sokongan sandaran bateri. Walau bagaimanapun, DS3231 adalah lebih tepat daripada DS1307. Sebab utama ialah DS1307 bergantung pada kristal 32kHz luaran untuk ketepatan masa.

Walau bagaimanapun, RTC DS3231 mempunyai Pengayun Kristal Terkompensasi Suhu dalaman (TCXO). Ini menjadikan ia kurang terjejas oleh suhu luaran dan akibatnya, ia mempunyai kelebihan ketepatan beberapa minit setahun berbanding DS1307.

1.2. DS3231 Pinout

DS3231 berfungsi menggunakan protokol I2C. Di tengah-tengah modul RTC ini, kami mempunyai cip RTC tepat yang direka oleh Maxim. Cip ini mengendalikan semua fungsi masa dan berkomunikasi menggunakan I2C dengan papan ESP32 atau Arduino.

Pin utama modul RTC DS3231 ialah:

  • VCC: Sambungkan pin ini ke terminal positif sumber kuasa anda.
  • GND: Sambungan tanah.
  • SDA: Pin Data Bersiri (digunakan untuk komunikasi I2C).
  • SCL: Pin Jam Bersiri (juga sebahagian daripada antara muka I2C).
  • QW: Pin keluaran Gelombang Persegi (boleh menjana isyarat berkala, cth., untuk penggera atau tujuan pemasaan lain).
  • 32K: Output pengayun 32KHz (berguna untuk aplikasi pemasaan yang tepat).

Berikut ialah komponen onboard utama modul RTC DS3231:

  • Pemegang Bateri: Ia membolehkan modul terus berjalan apabila kuasa luaran tiada.
  • Cip RTC: Cip ini mengekalkan masa dan tarikh.
  • AT24C32 EEPROM: Ia menyediakan storan tidak meruap untuk pengelogan data dan tujuan lain dengan 1,000,000 kitaran tulis.
  • TCXO: Pengayun pampasan suhu untuk menyediakan masa yang betul untuk julat suhu yang berbeza-beza.
  • Pengesan suhu: Ia memerlukan bacaan suhu dan menyediakannya sebagai sebahagian daripada ciri modul.

2. Cara Mengantaramuka DS3231 dengan ESP32

Untuk antara muka DS3231 dengan ESP32, anda perlu memasang Pustaka RTClib pertama. Selepas memasang pustaka Adafruit RTC ini, anda boleh menyambungkan papan ESP32 anda dengan DS3231 menggunakan protokol I2C. Untuk menyambungkan ESP32 I2C dengan modul RTC DS3231, anda boleh menggunakan pin ESP32 D21 dan D22.

2.1. Gambarajah Pendawaian ESP32 dengan RTC DS3231

Pertama, anda perlu menyambungkan ESP32 dengan modul I2C RTC DS3231 anda. Ikuti konfigurasi pin yang diberikan di bawah untuk pendawaian:

Selepas menyambungkan ESP32 dengan RTC DS3231, gambarajah pendawaian anda sepatutnya kelihatan seperti ini. Anda juga boleh menghidupkan DS3231 daripada pin VIN ESP32. Voltan operasi DS3231 ialah 3.3 hingga 5.5 VDC.

2.2. Memasang Perpustakaan yang Diperlukan

Setelah litar siap, langkah seterusnya ialah konfigurasikan papan ESP32 anda dengan Arduino IDE . Untuk antara muka DS3231, anda perlu memasang Pustaka RTClib . Anda boleh memasangnya dengan menggunakan pengurus perpustakaan IDE Arduino.

3. Perkakasan

Anda memerlukan perkakasan berikut untuk mereka bentuk jam RTC berasaskan DS3231 dengan ESP32:

  • papan pembangunan ESP32
  • Modul RTC DS3231
  • Bateri CR2032
  • Wayar pelompat
  • Papan roti

4. Kod

Selepas memasang perpustakaan RTC, bahagian seterusnya ialah menulis kod untuk DS3231 dan memuat naiknya ke papan ESP32. Pertama, anda perlu menulis kod untuk menetapkan masa semasa anda. Selepas anda menetapkan masa dalam DS3231, ia akan mengingati masa dan terus berjalan walaupun papan ESP32 anda dimatikan.

Sekarang buka Arduino IDE, susun, dan bakar kod ke papan ESP32.

#include
#include

RTC_DS3231 rtc ; // Mulakan contoh kelas RTC_DS3231

batal persediaan ( ) {
bersiri. bermula ( 115200 ) ;
wayar. bermula ( ) ;

jika ( ! rtc. bermula ( ) ) {
bersiri. println ( 'RTC tidak dikesan' ) ;
sementara ( 1 ) ; // Gantung selama-lamanya jika RTC tidak ditemui
}

//Nyahkomen baris di bawah untuk menetapkan tarikh dan masa awal
//rtc.adjust(DateTime(__DATE__, __TIME__));
}

batal gelung ( ) {
// Baca masa semasa daripada sensor (DS3231)
DateTime sekarang = rtc. sekarang ( ) ;

// Cetak tarikh dan masa pada baris yang sama dengan dua digit untuk jam, minit dan saat
bersiri. cetak ( 'Tarikh semasa: ' ) ;
bersiri. cetak ( sekarang. tahun ( ) , DIS ) ;
bersiri. cetak ( '/' ) ;
cetakDuaDigit ( sekarang. bulan ( ) ) ;
bersiri. cetak ( '/' ) ;
cetakDuaDigit ( sekarang. hari ( ) ) ;
bersiri. cetak ( ' Masa Semasa: ' ) ;
cetakDuaDigit ( sekarang. jam ( ) ) ;
bersiri. cetak ( ':' ) ;
cetakDuaDigit ( sekarang. minit ( ) ) ;
bersiri. cetak ( ':' ) ;
cetakDuaDigit ( sekarang. kedua ( ) ) ;
bersiri. println ( ) ;

kelewatan ( 1000 ) ; // Kemas kini setiap 1 saat
}

batal cetakDuaDigit ( int nombor ) {
jika ( nombor < 10 ) {
bersiri. cetak ( '0' ) ; // Tambah sifar pendahuluan untuk nombor satu digit
}
bersiri. cetak ( nombor ) ;
}

4.1. Penerangan Kod

Kod bermula dengan memulakan komunikasi I2C bersiri dengan bantuan perpustakaan wayar. Selepas itu, kami memasukkan perpustakaan RTC oleh Adafruit untuk antara muka dengan modul DS3231. Pustaka ini menyediakan fungsi untuk berinteraksi dengan modul RTC DS3231.

Di dalam persediaan sebahagiannya, bas I2C dimulakan dan diperiksa untuk peranti I2C yang tersedia. Jika tidak dijumpai, program akan digantung selama-lamanya. Kadar baud juga ditakrifkan supaya anda boleh menyemak output pada monitor bersiri Arduino IDE.

Menetapkan Jam untuk Kali Pertama

Apabila memprogramkan DS3231, anda perlu nyahkomen baris ini . Ini akan mendapatkan masa sistem anda dan menyimpannya di dalam memori RTC. Dengan melakukan ini, jam modul RTC akan disegerakkan dengan jam sistem anda.

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

Selepas masa ditetapkan anda perlu memuat naik semula kod di atas tetapi kali ini anda perlu komen baris fungsi rtc.adjust(). . Jika tidak, ini akan menimpa masa yang ditetapkan anda sebelum ini dan apabila ESP32 anda dimatikan, RTC akan bermula semula dari masa anda memuat naik kod.

Dengan melakukan ini, masa anda akan kekal dalam latar belakang modul RTC selagi modul RTC mempunyai kuasa dalam sel CR2032nya.

Di dalam gelung bahagian, tarikh dan masa semasa dibaca daripada modul DS3231 menggunakan fungsi rtc.now(). Komponen tarikh dan masa diekstrak dan tarikh yang diformatkan dicetak pada monitor bersiri Arduino IDE setiap satu saat.

5. Output

Selepas memuat naik kod ke papan ESP32, anda akan melihat masa akan mula mencetak pada monitor bersiri Arduino IDE.

6. Cara Memaparkan Masa RTC DS3231 pada Skrin OLED Menggunakan ESP32

Anda juga boleh melangkah lebih jauh dan memaparkan masa pada skrin OLED anda selepas membacanya daripada DS3231. Untuk ini, anda perlu memasang Pustaka Adafruit GFX SSD1306 dalam IDE Arduino.

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

Selepas menyambungkan sensor anda, anda akan melihat litar kelihatan seperti gambarajah skematik di bawah.

Sekarang muat naik kod DS3231 berikut ke papan ESP32.

#include
#include
#include
#include 'RTClib.h'

RTC_DS3231 rtc ;

char hari [ 7 ] [ 12 ] = { 'Ahad' , 'Isnin' , 'Selasa' , 'Rabu' , 'Khamis' , 'Jumaat' , 'Sabtu' } ;

Paparan Adafruit_SSD1306 = Adafruit_SSD1306 ( 128 , 64 , & wayar , - 1 ) ;

batal persediaan ( ) {
bersiri. bermula ( 115200 ) ;

paparan. bermula ( SSD1306_SWITCHCAPVCC , 0x3C ) ;

jika ( ! rtc. bermula ( ) ) {
bersiri. println ( 'Tidak dapat mencari RTC! Semak litar.' ) ;
sementara ( 1 ) ;
}
//nyahkomen baris di bawah sambil menetapkan masa untuk kali pertama
//rtc.adjust(DateTime(__DATE__, __TIME__));
paparan. clearDisplay ( ) ;
paparan. setTextColor ( PUTIH ) ;
paparan. setTextSize ( 2 ) ;
paparan. setCursor ( 0 , dua puluh ) ;
paparan. cetak ( 'Jam RTC' ) ;
paparan. paparan ( ) ;
kelewatan ( 5000 ) ;
}

batal gelung ( ) {
DateTime sekarang = rtc. sekarang ( ) ;

paparan. clearDisplay ( ) ;
paparan. setTextSize ( 2 ) ;
paparan. setCursor ( 75 , 0 ) ;
paparan. println ( sekarang. kedua ( ) , DIS ) ;
paparan. setTextSize ( 2 ) ;
paparan. setCursor ( 25 , 0 ) ;
paparan. println ( ':' ) ;
paparan. setTextSize ( 2 ) ;
paparan. setCursor ( 65 , 0 ) ;
paparan. println ( ':' ) ;
paparan. setTextSize ( 2 ) ;
paparan. setCursor ( 40 , 0 ) ;
paparan. println ( sekarang. minit ( ) , DIS ) ;
paparan. setTextSize ( 2 ) ;
paparan. setCursor ( 0 , 0 ) ;
paparan. println ( sekarang. jam ( ) , DIS ) ;
paparan. setTextSize ( 2 ) ;
paparan. setCursor ( 0 , 25 ) ;
paparan. println ( sekarang. hari ( ) , DIS ) ;
paparan. cetak ( hari [ sekarang. hari dalam seminggu ( ) ] ) ;
paparan. setTextSize ( 2 ) ;
paparan. setCursor ( dua puluh , 25 ) ;
paparan. println ( '-' ) ;
paparan. setTextSize ( 2 ) ;
paparan. setCursor ( 35 , 25 ) ;
paparan. println ( sekarang. bulan ( ) , DIS ) ;
paparan. setTextSize ( 2 ) ;
paparan. setCursor ( 60 , 25 ) ;
paparan. println ( '-' ) ;
paparan. setTextSize ( 2 ) ;
paparan. setCursor ( 75 , 25 ) ;
paparan. println ( sekarang. tahun ( ) , DIS ) ;
paparan. paparan ( ) ;
}

Penerangan Kod

Kod ini bermula dengan beberapa perpustakaan penting yang diperlukan untuk skrin RTC dan OLED. Paparan OLED disediakan menggunakan perpustakaan Adafruit SSD1306.

Dalam bahagian gelung, tarikh dan masa semasa diperoleh menggunakan rtc.now(). Selepas itu, skrin OLED dikosongkan dan komponen masa dipaparkan dalam format jam digital. Anda juga boleh mengubah suai kod untuk melaraskan format tarikh dan masa.

Setelah kod dimuat naik ke papan anda, anda akan mendapat masa semasa pada skrin OLED.

Catatan: Kod di atas menggunakan 0x3C Alamat I2C untuk OLED. Ini ialah alamat I2C yang paling biasa tersedia pada paparan OLED SSD1306. Jika anda ingin mencari alamat I2C untuk skrin OLED anda, anda boleh menjalankannya Kod Pengimbas I2C .

Kesimpulan

DS3231 ialah penderia RTC yang boleh digunakan untuk ketepatan masa. Ia mempunyai sandaran bateri yang boleh memastikan masa tepat walaupun papan mikropengawal anda dimatikan. Untuk antara muka ESP2 dengan DS3231, anda mesti memasang pustaka RTClib dalam IDE Arduino anda. Selepas itu, anda perlu menyambungkan modul RTC melalui protokol I2C menggunakan pin digital ESP32. Setelah disambungkan, hanya muat naik kod dan laraskan masa. Kini penderia RTC akan mengekalkan masa, dan anda boleh membacanya pada monitor bersiri anda pada projek berasaskan masa reka bentuk.