Kā lietot DS3231 reāllaika pulksteņa (RTC) moduli ar ESP32

Ka Lietot Ds3231 Reallaika Pulkstena Rtc Moduli Ar Esp32



ESP32 ir vieda mikrokontrollera plate ar iebūvētu Wi-Fi un Bluetooth iespējām. ESP32 ir aprīkots ar iekšējo RTC, taču tā darbība ir atkarīga no jaudas. Tātad, ja vēlaties izstrādāt projektus vai shēmas, kuras vēlaties palaist pat tad, ja nav strāvas, jums ir jāizmanto jebkurš ārējais RTC modulis, piemēram, DS1307 vai DS3231.

Mēs jau esam sagatavojuši apmācību DS1307 saskarne ar ESP32 moduli . Šodien mēs apspriedīsim DS3231 RTC sensora pamatus un pārbaudīsim, kā to var savienot ar ESP32 plati.

Satura rādītājs:







1. Kas ir DS3231 RTC modulis



2. Kā savienot DS3231 ar ESP32



3. Aparatūra





4. Kods

5. Izvade



6. Kā parādīt RTC DS3231 laiku OLED ekrānā, izmantojot ESP32

Secinājums

1. Kas ir DS3231 RTC modulis

DS3231 modulis nodrošina ļoti precīzu laika uzskaiti. Tas ietver integrētu temperatūras kompensētu kristāla oscilatoru (TCXO), kas nodrošina mums laiku ar lielu precizitāti. Modulis darbojas ar I2C protokolu, izmantojot Master-Slave konfigurāciju. Tas var saglabāt laiku un datumu ar rezerves akumulatoru pat tad, ja nav galvenās ieejas strāvas. To parasti izmanto ierīcēs, kas ir atkarīgas no laika un datuma.

DS3231 seko sekundēm, minūtēm un stundām. Tas var arī reģistrēt datumus un darba dienas. Strādājot ar garajiem gadiem, tas automātiski attiecīgi pielāgo laiku. Tas var arī parādīt laiku gan 12 stundu, gan 24 stundu formātā, komplektā ar AM/PM indikatoru.

1.1. DS3231 pret DS1307

Gan DS3231, gan DS1307 ir laika uzskaites moduļi ar akumulatora rezerves atbalstu. Tomēr DS3231 ir precīzāks nekā DS1307. Galvenais iemesls ir tas, ka DS1307 laika uzskaitei ir atkarīgs no ārējā 32 kHz kristāla.

Tomēr RTC DS3231 ir aprīkots ar iekšēju temperatūras kompensētu kristāla oscilatoru (TCXO). Tādējādi ārējā temperatūra to mazāk ietekmē, un rezultātā tam ir dažas minūtes gadā precizitātes priekšrocība nekā DS1307.

1.2. DS3231 Pinout

DS3231 darbojas, izmantojot I2C protokolu. Šī RTC moduļa pamatā mums ir precīza RTC mikroshēma, ko izstrādājis Maxim. Šī mikroshēma apstrādā visas laika funkcijas un sazinās, izmantojot I2C ar ESP32 vai Arduino plati.

RTC DS3231 moduļu galvenās tapas ir:

  • VCC: Savienojiet šo tapu ar strāvas avota pozitīvo spaili.
  • GND: Zemējuma savienojums.
  • SDA: Serial Data pin (izmanto I2C saziņai).
  • SCL: Sērijas pulksteņa tapa (arī daļa no I2C saskarnes).
  • QW: Square Wave izvades tapa (var ģenerēt periodisku signālu, piemēram, trauksmes vai citiem laika noteikšanas nolūkiem).
  • 32K: 32KHz oscilatora izeja (noderīga precīzai laika noteikšanai).

Tālāk ir norādīti RTC DS3231 moduļa galvenie iebūvētie komponenti.

  • Akumulatora turētājs: Tas ļauj modulim turpināt darboties, ja nav ārējā barošanas.
  • RTC mikroshēma: Šī mikroshēma saglabā laiku un datumu.
  • AT24C32 EEPROM: Tas nodrošina nemainīgu krātuvi datu reģistrēšanai un citiem mērķiem ar 1 000 000 rakstīšanas cikliem.
  • TCXO: Temperatūras kompensēts oscilators, lai nodrošinātu pareizo laiku dažādam temperatūras diapazonam.
  • Temperatūras sensors: Tas ņem temperatūras rādījumus un nodrošina tos kā daļu no moduļa funkcijas.

2. Kā savienot DS3231 ar ESP32

Lai savienotu DS3231 ar ESP32, ir jāinstalē RTClib bibliotēka vispirms. Pēc šīs Adafruit RTC bibliotēkas instalēšanas varat savienot ESP32 plati ar DS3231, izmantojot I2C protokolu. Lai savienotu ESP32 I2C ar RTC DS3231 moduli, varat izmantot ESP32 D21 un D22 tapas.

2.1. ESP32 elektroinstalācijas shēma ar RTC DS3231

Pirmkārt, ESP32 ir jāsavieno ar savu I2C RTC DS3231 moduli. Vadu pievienošanai ievērojiet tālāk norādīto tapu konfigurāciju:

Pēc ESP32 pievienošanas ar RTC DS3231 jūsu elektroinstalācijas shēmai vajadzētu izskatīties šādi. Varat arī darbināt DS3231 no ESP32 VIN tapas. DS3231 darba spriegums ir no 3,3 līdz 5,5 V līdzstrāvas.

2.2. Nepieciešamo bibliotēku instalēšana

Kad ķēde ir gatava, nākamais solis ir konfigurējiet savu ESP32 plati ar Arduino IDE . Lai izveidotu saskarni ar DS3231, jums būs jāinstalē RTClib bibliotēka . Varat to instalēt, izmantojot Arduino IDE bibliotēkas pārvaldnieku.

3. Aparatūra

Lai izveidotu uz DS3231 balstītu RTC pulksteni ar ESP32, jums būs nepieciešama šāda aparatūra:

  • ESP32 izstrādes plate
  • RTC DS3231 modulis
  • CR2032 akumulators
  • Džemperu vadi
  • Maizes dēlis

4. Kods

Pēc RTC bibliotēkas instalēšanas nākamā daļa ir uzrakstīt DS3231 kodu un augšupielādēt to ESP32 platē. Vispirms jums ir jāieraksta kods, lai iestatītu pašreizējo laiku. Pēc laika iestatīšanas programmā DS3231 tas atcerēsies laiku un turpinās darboties pat tad, ja ESP32 plate tiks izslēgta.

Tagad atveriet Arduino IDE, kompilējiet un ierakstiet kodu ESP32 platē.

#include
#include

RTC_DS3231 rtc ; // Inicializējiet klases RTC_DS3231 gadījumu

nederīgs uzstādīt ( ) {
Seriāls. sākt ( 115200 ) ;
Vads. sākt ( ) ;

ja ( ! rtc. sākt ( ) ) {
Seriāls. println ( 'RTC nav konstatēts' ) ;
kamēr ( 1 ) ; // Pakārt uz nenoteiktu laiku, ja RTC netiek atrasts
}

//Atceliet tālāk esošās rindiņas komentārus, lai iestatītu sākotnējo datumu un laiku
//rtc.adjust(DateTime(__DATE__, __TIME__));
}

nederīgs cilpa ( ) {
// Nolasīt pašreizējo laiku no sensora (DS3231)
Datums un laiks tagad = rtc. tagad ( ) ;

// Drukājiet datumu un laiku tajā pašā rindā ar diviem cipariem stundām, minūtēm un sekundēm
Seriāls. drukāt ( 'Šodienas datums: ' ) ;
Seriāls. drukāt ( tagad. gadā ( ) , DEC ) ;
Seriāls. drukāt ( '/' ) ;
drukātTwoDigits ( tagad. mēnesis ( ) ) ;
Seriāls. drukāt ( '/' ) ;
printTwoDigits ( tagad. diena ( ) ) ;
Seriāls. drukāt ( ' Pašreizējais laiks: ' ) ;
printTwoDigits ( tagad. stunda ( ) ) ;
Seriāls. drukāt ( ':' ) ;
printTwoDigits ( tagad. minūte ( ) ) ;
Seriāls. drukāt ( ':' ) ;
printTwoDigits ( tagad. otrais ( ) ) ;
Seriāls. println ( ) ;

kavēšanās ( 1000 ) ; // Atjaunināt ik pēc 1 sekundes
}

nederīgs printTwoDigits ( starpt numuru ) {
ja ( numuru < 10 ) {
Seriāls. drukāt ( '0' ) ; // Viencipara skaitļiem pievienojiet sākuma nulli
}
Seriāls. drukāt ( numuru ) ;
}

4.1. Koda skaidrojums

Kods sākas ar seriālās I2C komunikācijas inicializāciju, izmantojot vadu bibliotēku. Pēc tam mēs iekļāvām Adafruit RTC bibliotēku saskarnei ar DS3231 moduli. Šī bibliotēka nodrošina funkciju mijiedarbībai ar RTC DS3231 moduli.

Iekš uzstādīt daļa, tiek palaists I2C kopne un pārbaudīta pieejamo I2C ierīču klātbūtne. Ja tā netiek atrasta, programma uzkaras uz nenoteiktu laiku. Ir noteikts arī datu pārraides ātrums, lai jūs varētu pārbaudīt izvadi Arduino IDE seriālajā monitorā.

Pulksteņa iestatīšana pirmo reizi

Programmējot DS3231, jums tas ir jādara Atceliet šīs rindas komentārus . Tas iegūs jūsu sistēmas laiku un saglabās to RTC atmiņā. To darot, RTC moduļa pulkstenis tiek sinhronizēts ar jūsu sistēmas pulksteni.

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

Kad laiks ir iestatīts, jums ir atkārtoti jāaugšupielādē iepriekš minētais kods, taču šoreiz tas ir jādara komentējiet funkcijas rindu rtc.adjust(). . Pretējā gadījumā tiks pārrakstīts iepriekš iestatītais laiks un, kad ESP32 tiks izslēgts, RTC sāksies no jauna no koda augšupielādes brīža.

To darot, jūsu laiks paliks RTC moduļa fonā tik ilgi, kamēr RTC modulim būs strāva CR2032 šūnā.

Iekš cilpa daļu, pašreizējais datums un laiks tiek nolasīti no DS3231 moduļa, izmantojot funkciju rtc.now(). Datuma un laika komponenti tiek iegūti, un formatētais datums tiek izdrukāts Arduino IDE sērijas monitorā ik pēc sekundes.

5. Izvade

Pēc koda augšupielādes ESP32 platē, jūs redzēsiet, ka laiks sāks drukāt uz Arduino IDE sērijas monitora.

6. Kā parādīt RTC DS3231 laiku OLED ekrānā, izmantojot ESP32

Varat arī spert soli tālāk un parādīt laiku OLED ekrānā pēc tā nolasīšanas no DS3231. Lai to izdarītu, jums jāinstalē Adafruit GFX SSD1306 bibliotēka Arduino IDE.

Pēc uzstādīšanas pievienojiet ESP32 ar OLED un RTC moduli šādā konfigurācijā.

Pēc sensora pievienošanas jūs redzēsit, ka ķēde izskatīsies kā zemāk esošajā shematiskajā diagrammā.

Tagad ESP32 platē augšupielādējiet šādu DS3231 kodu.

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

RTC_DS3231 rtc ;

char dienas [ 7 ] [ 12 ] = { 'svētdiena' , 'pirmdiena' , 'otrdiena' , 'trešdiena' , 'ceturtdiena' , 'piektdiena' , 'sestdiena' } ;

Adafruit_SSD1306 displejs = Adafruit_SSD1306 ( 128 , 64 , & Vads , - 1 ) ;

nederīgs uzstādīt ( ) {
Seriāls. sākt ( 115200 ) ;

displejs. sākt ( SSD1306_SWITCHCAPVCC , 0x3C ) ;

ja ( ! rtc. sākt ( ) ) {
Seriāls. println ( 'Nevarēja atrast RTC! Pārbaudiet ķēdi.' ) ;
kamēr ( 1 ) ;
}
//atceliet zemāk esošās rindiņas komentāru, pirmo reizi iestatot laiku
//rtc.adjust(DateTime(__DATE__, __TIME__));
displejs. skaidrsDisplejs ( ) ;
displejs. setTextColor ( BALTS ) ;
displejs. setTextSize ( 2 ) ;
displejs. iestatīt Kursoru ( 0 , divdesmit ) ;
displejs. drukāt ( 'RTC CLOCK' ) ;
displejs. displejs ( ) ;
kavēšanās ( 5000 ) ;
}

nederīgs cilpa ( ) {
Datums un laiks tagad = rtc. tagad ( ) ;

displejs. skaidrsDisplejs ( ) ;
displejs. setTextSize ( 2 ) ;
displejs. iestatīt Kursoru ( 75 , 0 ) ;
displejs. println ( tagad. otrais ( ) , DEC ) ;
displejs. setTextSize ( 2 ) ;
displejs. iestatīt Kursoru ( 25 , 0 ) ;
displejs. println ( ':' ) ;
displejs. setTextSize ( 2 ) ;
displejs. iestatīt Kursoru ( 65 , 0 ) ;
displejs. println ( ':' ) ;
displejs. setTextSize ( 2 ) ;
displejs. iestatīt Kursoru ( 40 , 0 ) ;
displejs. println ( tagad. minūte ( ) , DEC ) ;
displejs. setTextSize ( 2 ) ;
displejs. iestatīt Kursoru ( 0 , 0 ) ;
displejs. println ( tagad. stunda ( ) , DEC ) ;
displejs. setTextSize ( 2 ) ;
displejs. iestatīt Kursoru ( 0 , 25 ) ;
displejs. println ( tagad. diena ( ) , DEC ) ;
displejs. drukāt ( dienas [ tagad. nedēļas diena ( ) ] ) ;
displejs. setTextSize ( 2 ) ;
displejs. iestatīt Kursoru ( divdesmit , 25 ) ;
displejs. println ( '-' ) ;
displejs. setTextSize ( 2 ) ;
displejs. iestatīt Kursoru ( 35 , 25 ) ;
displejs. println ( tagad. mēnesis ( ) , DEC ) ;
displejs. setTextSize ( 2 ) ;
displejs. iestatīt Kursoru ( 60 , 25 ) ;
displejs. println ( '-' ) ;
displejs. setTextSize ( 2 ) ;
displejs. iestatīt Kursoru ( 75 , 25 ) ;
displejs. println ( tagad. gadā ( ) , DEC ) ;
displejs. displejs ( ) ;
}

Koda skaidrojums

Kods sākās ar dažām svarīgām bibliotēkām, kas nepieciešamas RTC un OLED ekrāniem. OLED displejs ir iestatīts, izmantojot Adafruit SSD1306 bibliotēku.

Cilpas daļā pašreizējais datums un laiks tiek iegūts, izmantojot rtc.now(). Pēc tam OLED ekrāns tiek notīrīts un laika komponenti tiek parādīti digitālā pulksteņa formātā. Varat arī modificēt kodu, lai pielāgotu datuma un laika formātu.

Kad kods ir augšupielādēts jūsu dēlī, jūs redzēsit pašreizējo laiku OLED ekrānā.

Piezīme: Iepriekš minētais kods izmanto 0x3C I2C adrese OLED. Šī ir visizplatītākā I2C adrese, kas pieejama SSD1306 OLED displejos. Ja vēlaties atrast sava OLED ekrāna I2C adresi, varat palaist I2C skenera kods .

Secinājums

DS3231 ir RTC sensors, ko var izmantot laika uzskaitei. Tam ir akumulatora dublējums, kas var saglabāt precīzu laiku pat tad, ja mikrokontrollera panelis ir izslēgts. Lai saskarni ESP2 ar DS3231, jums ir jāinstalē RTClib bibliotēka savā Arduino IDE. Pēc tam jums ir jāpievieno RTC modulis, izmantojot I2C protokolu, izmantojot ESP32 digitālo tapu. Kad savienojums ir izveidots, vienkārši augšupielādējiet kodu un pielāgojiet laiku. Tagad RTC sensors saglabās laiku, un jūs varat to nolasīt seriālajā monitorā projektēšanas laikā balstītos projektos.