Kuidas kasutada DS3231 reaalajakella (RTC) moodulit ESP32-ga

Kuidas Kasutada Ds3231 Reaalajakella Rtc Moodulit Esp32 Ga



ESP32 on nutikas mikrokontrolleri plaat, millel on sisseehitatud Wi-Fi ja Bluetoothi ​​võimalused. ESP32 on varustatud sisemise RTC-ga, kuid selle töö sõltub võimsusest. Nii et kui soovite kavandada projekte või vooluahelaid, mida soovite käivitada ka siis, kui toide puudub, peate kasutama mis tahes välist RTC-moodulit, nagu DS1307 või DS3231.

Oleme juba teinud õpetuse DS1307 liides ESP32 mooduliga . Täna arutame DS3231 RTC anduri põhitõdesid ja kontrollime, kuidas seda ESP32 plaadiga liidestada.

Sisukord:







1. Mis on DS3231 RTC moodul?



2. Kuidas ühendada DS3231 ESP32-ga



3. Riistvara





4. Kood

5. Väljund



6. RTC DS3231 aja kuvamine OLED-ekraanil ESP32 abil

Järeldus

1. Mis on DS3231 RTC moodul?

DS3231 moodul tagab ülitäpse ajamõõtmise. See sisaldab integreeritud temperatuuriga kompenseeritud kristallostsillaatorit (TCXO), mis annab meile suure täpsusega aega. Moodul töötab I2C protokollil, kasutades Master-Slave konfiguratsiooni. See suudab varuaku abil hoida kellaaega ja kuupäeva isegi siis, kui puudub põhisisend. Seda kasutatakse tavaliselt kellaajast ja kuupäevast sõltuvates seadmetes.

DS3231 jälgib sekundeid, minuteid ja tunde. Samuti saab see salvestada kuupäevad ja nädalapäevad. Liigaaastate käsitlemisel kohandab see aega automaatselt vastavalt. Samuti saab see kuvada aega nii 12- kui 24-tunnises vormingus koos AM/PM indikaatoriga.

1.1. DS3231 vs DS1307

Nii DS3231 kui ka DS1307 on aku varutoega ajavõtumoodulid. DS3231 on aga täpsem kui DS1307. Peamine põhjus on selles, et DS1307 sõltub ajamõõtmiseks välisest 32 kHz kristallist.

RTC DS3231-l on aga sisemine temperatuurikompenseeritud kristallostsillaator (TCXO). See muudab selle vähem mõjutatavaks välistemperatuurist ja selle tulemusel on selle täpsuse eelis mõne minuti võrra aastas kui DS1307-l.

1.2. DS3231 Pinout

DS3231 töötab I2C protokolli kasutades. Selle RTC-mooduli keskmes on Maximi loodud täpne RTC-kiip. See kiip tegeleb kõigi ajafunktsioonidega ja suhtleb I2C abil ESP32 või Arduino plaadiga.

RTC DS3231 moodulite peamised kontaktid on:

  • VCC: Ühendage see tihvt oma toiteallika positiivse klemmiga.
  • GND: Maaühendus.
  • SDA: Serial Data pin (kasutatakse I2C side jaoks).
  • SCL: Serial Clock pin (samuti osa I2C liidesest).
  • QW: Square Wave'i väljundviik (saab genereerida perioodilist signaali, nt häirete või muul ajastamise eesmärgil).
  • 32K: 32KHz ostsillaatori väljund (kasulik täpsete ajastusrakenduste jaoks).

Järgmised on RTC DS3231 mooduli peamised pardakomponendid:

  • Aku hoidja: See võimaldab moodulil töötada ka siis, kui väline toide puudub.
  • RTC kiip: See kiip säilitab kellaaja ja kuupäeva.
  • AT24C32 EEPROM: See pakub 1 000 000 kirjutamistsükliga püsivat salvestusruumi andmete logimiseks ja muudel eesmärkidel.
  • TCXO: Temperatuuriga kompenseeritud ostsillaator, mis tagab õige aja erineva temperatuurivahemiku jaoks.
  • Temperatuuriandur: See võtab temperatuurinäidud ja pakub neid mooduli funktsiooni osana.

2. Kuidas ühendada DS3231 ESP32-ga

DS3231 ja ESP32 liidestamiseks peate installima RTClib raamatukogu esiteks. Pärast selle Adafruit RTC teegi installimist saate ühendada oma ESP32 plaadi DS3231-ga, kasutades I2C protokolli. ESP32 I2C ühendamiseks mooduliga RTC DS3231 saate kasutada ESP32 D21 ja D22 kontakte.

2.1. ESP32 juhtmestiku skeem koos RTC DS3231-ga

Esiteks peate ESP32 ühendama oma I2C RTC DS3231 mooduliga. Juhtmete ühendamisel järgige alltoodud kontaktide konfiguratsiooni:

Pärast ESP32 ühendamist RTC DS3231-ga peaks teie juhtmestiku skeem välja nägema selline. Saate DS3231 toita ka ESP32 VIN-viigu kaudu. DS3231 tööpinged on 3,3 kuni 5,5 V alalisvoolu.

2.2. Nõutavate teekide installimine

Kui ahel on valmis, on järgmine samm konfigureerige oma ESP32 plaat Arduino IDE-ga . DS3231 liidestamiseks peate installima RTClib raamatukogu . Saate selle installida Arduino IDE teegihalduri abil.

3. Riistvara

ESP32-ga DS3231-põhise RTC-kella kujundamiseks vajate järgmist riistvara:

  • ESP32 arendusplaat
  • RTC DS3231 moodul
  • CR2032 aku
  • Jumper juhtmed
  • Leivalaud

4. Kood

Pärast RTC teegi installimist tuleb järgmiseks osaks kirjutada DS3231 kood ja laadida see ESP32 plaadile. Esmalt peate praeguse kellaaja määramiseks kirjutama koodi. Pärast kellaaja määramist DS3231-s jätab see kellaaja meelde ja jätkab töötamist isegi siis, kui teie ESP32 plaat välja lülitatakse.

Nüüd avage Arduino IDE, kompileerige ja kirjutage kood ESP32 plaadile.

#include
#include

RTC_DS3231 rtc ; // Initsialiseerige RTC_DS3231 klassi eksemplar

tühine seadistamine ( ) {
Sari. alustada ( 115 200 ) ;
Traat. alustada ( ) ;

kui ( ! rtc. alustada ( ) ) {
Sari. println ( 'RTC-d ei tuvastatud' ) ;
samal ajal ( 1 ) ; // Riputa määramata ajaks, kui RTC-d ei leita
}

//Algse kuupäeva ja kellaaja määramiseks tühjendage alltoodud rea kommentaarid
//rtc.adjust(DateTime(__DATE__, __TIME__));
}

tühine silmus ( ) {
// Andurilt praeguse aja lugemine (DS3231)
Kuupäev ja kellaaeg praegu = rtc. nüüd ( ) ;

// Kuupäeva ja kellaaja printimine samale reale kahe numbriga tundide, minutite ja sekundite kaupa
Sari. printida ( 'Tänane kuupäev: ' ) ;
Sari. printida ( nüüd. aastal ( ) , DEC ) ;
Sari. printida ( '/' ) ;
printKaks numbrit ( nüüd. kuu ( ) ) ;
Sari. printida ( '/' ) ;
printKaks numbrit ( nüüd. päeval ( ) ) ;
Sari. printida ( 'Praegune aeg:' ) ;
printKaks numbrit ( nüüd. tund ( ) ) ;
Sari. printida ( ':' ) ;
printKaks numbrit ( nüüd. minut ( ) ) ;
Sari. printida ( ':' ) ;
printKaks numbrit ( nüüd. teiseks ( ) ) ;
Sari. println ( ) ;

viivitus ( 1000 ) ; // Värskendage iga 1 sekundi järel
}

tühine printKaks numbrit ( int number ) {
kui ( number < 10 ) {
Sari. printida ( '0' ) ; // Ühekohaliste arvude jaoks lisage eesnull
}
Sari. printida ( number ) ;
}

4.1. Koodi selgitus

Kood algab I2C jadaside initsialiseerimisega traaditeegi abil. Pärast seda lisasime Adafruiti RTC teegi DS3231 mooduliga liidestamiseks. See teek pakub funktsiooni RTC DS3231 mooduliga suhtlemiseks.

Aastal seadistamine osa, käivitatakse I2C siini ja kontrollitakse saadaolevaid I2C seadmeid. Kui seda ei leita, hangub programm määramata ajaks. Samuti on määratletud edastuskiirus, et saaksite kontrollida väljundit Arduino IDE jadamonitoril.

Kella esmakordne seadistamine

DS3231 programmeerimisel peate seda tegema tühista see rida . See võtab teie süsteemi aja ja salvestab selle RTC mällu. Seda tehes sünkroonitakse RTC mooduli kell teie süsteemi kellaga.

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

Pärast aja määramist peate ülaltoodud koodi uuesti üles laadima, kuid seekord peate seda tegema kommenteerige funktsiooni rida rtc.adjust(). . Vastasel juhul kirjutab see teie eelmise määratud aja üle ja kui teie ESP32 on välja lülitatud, käivitub RTC uuesti koodi üleslaadimisest.

Seda tehes jääb teie aeg RTC-mooduli taustale seniks, kuni RTC-mooduli CR2032 lahtris on toide.

Aastal silmus osa, loetakse praegune kuupäev ja kellaaeg moodulist DS3231 funktsiooni rtc.now() abil. Kuupäeva ja kellaaja komponendid ekstraheeritakse ja vormindatud kuupäev prinditakse Arduino IDE jadamonitorile iga sekundi järel.

5. Väljund

Pärast koodi ESP32 plaadile üleslaadimist näete, et Arduino IDE jadamonitoril hakkab aeg printima.

6. RTC DS3231 aja kuvamine OLED-ekraanil ESP32 abil

Võite minna ka sammu kaugemale ja kuvada kellaaega OLED-ekraanil pärast selle lugemist DS3231-st. Selleks peate installima Adafruit GFX SSD1306 teek Arduino IDE-s.

Pärast installimist ühendage ESP32 OLED- ja RTC-mooduliga järgmises konfiguratsioonis.

Pärast anduri ühendamist näete, et vooluahel näeb välja nagu alloleval skemaatilisel diagrammil.

Nüüd laadige ESP32 plaadile üles järgmine DS3231 kood.

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

RTC_DS3231 rtc ;

char päevadel [ 7 ] [ 12 ] = { 'pühapäev' , 'esmaspäev' , 'teisipäev' , 'kolmapäev' , 'neljapäev' , 'reede' , 'laupäev' } ;

Adafruit_SSD1306 ekraan = Adafruit_SSD1306 ( 128 , 64 , & Traat , - 1 ) ;

tühine seadistamine ( ) {
Sari. alustada ( 115 200 ) ;

kuva. alustada ( SSD1306_SWITCHCAPVCC , 0x3C ) ;

kui ( ! rtc. alustada ( ) ) {
Sari. println ( 'RTC-d ei leitud! Kontrollige vooluringi.' ) ;
samal ajal ( 1 ) ;
}
//tühistage esmakordsel aja määramisel alltoodud rida
//rtc.adjust(DateTime(__DATE__, __TIME__));
kuva. selgeEkraan ( ) ;
kuva. setTextColor ( VALGE ) ;
kuva. setTextSize ( 2 ) ;
kuva. määra Kursor ( 0 , kakskümmend ) ;
kuva. printida ( 'RTC CLOCK' ) ;
kuva. kuva ( ) ;
viivitus ( 5000 ) ;
}

tühine silmus ( ) {
Kuupäev ja kellaaeg praegu = rtc. nüüd ( ) ;

kuva. selgeEkraan ( ) ;
kuva. setTextSize ( 2 ) ;
kuva. määra Kursor ( 75 , 0 ) ;
kuva. println ( nüüd. teiseks ( ) , DEC ) ;
kuva. setTextSize ( 2 ) ;
kuva. määra Kursor ( 25 , 0 ) ;
kuva. println ( ':' ) ;
kuva. setTextSize ( 2 ) ;
kuva. määra Kursor ( 65 , 0 ) ;
kuva. println ( ':' ) ;
kuva. setTextSize ( 2 ) ;
kuva. määra Kursor ( 40 , 0 ) ;
kuva. println ( nüüd. minut ( ) , DEC ) ;
kuva. setTextSize ( 2 ) ;
kuva. määra Kursor ( 0 , 0 ) ;
kuva. println ( nüüd. tund ( ) , DEC ) ;
kuva. setTextSize ( 2 ) ;
kuva. määra Kursor ( 0 , 25 ) ;
kuva. println ( nüüd. päeval ( ) , DEC ) ;
kuva. printida ( päevadel [ nüüd. nädalapäev ( ) ] ) ;
kuva. setTextSize ( 2 ) ;
kuva. määra Kursor ( kakskümmend , 25 ) ;
kuva. println ( '-' ) ;
kuva. setTextSize ( 2 ) ;
kuva. määra Kursor ( 35 , 25 ) ;
kuva. println ( nüüd. kuu ( ) , DEC ) ;
kuva. setTextSize ( 2 ) ;
kuva. määra Kursor ( 60 , 25 ) ;
kuva. println ( '-' ) ;
kuva. setTextSize ( 2 ) ;
kuva. määra Kursor ( 75 , 25 ) ;
kuva. println ( nüüd. aastal ( ) , DEC ) ;
kuva. kuva ( ) ;
}

Koodi selgitus

Kood algas mõne olulise raamatukoguga, mis on vajalikud RTC- ja OLED-ekraanide jaoks. OLED-ekraan on seadistatud Adafruit SSD1306 teegi abil.

Silmusosas saadakse praegune kuupäev ja kellaaeg rtc.now() abil. Pärast seda OLED-ekraan tühjendatakse ja ajakomponendid kuvatakse digitaalse kella vormingus. Samuti saate koodi muuta, et kohandada kuupäeva ja kellaaja vormingut.

Kui kood on teie tahvlile üles laaditud, näete OLED-ekraanil praegust kellaaega.

Märge: Ülaltoodud kood kasutab 0x3C I2C aadress OLED-i jaoks. See on kõige tavalisem SSD1306 OLED-ekraanidel saadaolev I2C-aadress. Kui soovite leida oma OLED-ekraani jaoks I2C-aadressi, saate käivitada I2C skanneri kood .

Järeldus

DS3231 on RTC andur, mida saab kasutada ajamõõtmiseks. Sellel on aku varukoopia, mis hoiab aja täpsena isegi siis, kui teie mikrokontrolleri plaat on välja lülitatud. ESP2 liidestamiseks DS3231-ga peate oma Arduino IDE-sse installima RTClib teegi. Pärast seda peate ühendama RTC-mooduli I2C-protokolli kaudu, kasutades ESP32 digitaalset kontakti. Pärast ühendamist laadige kood lihtsalt üles ja reguleerige aega. Nüüd hoiab RTC andur aega ja saate seda ajapõhiste projektide projekteerimisel oma jadamonitorilt lugeda.