Kako koristiti DS3231 modul sata stvarnog vremena (RTC) s ESP32

Kako Koristiti Ds3231 Modul Sata Stvarnog Vremena Rtc S Esp32



ESP32 je pametna mikrokontrolerska ploča s ugrađenim Wi-Fi i Bluetooth mogućnostima. ESP32 dolazi s internim RTC-om, ali njegov rad ovisi o napajanju. Dakle, ako želite dizajnirati projekte ili sklopove koje želite pokrenuti čak i kada nema struje, morate koristiti bilo koji vanjski RTC modul poput DS1307 ili DS3231.

Već smo napravili tutorial o DS1307 sučelje s ESP32 modulom . Danas ćemo razgovarati o osnovama DS3231 RTC senzora i provjeriti kako se može spojiti s ESP32 pločom.

Sadržaj:







1. Što je DS3231 RTC modul



2. Kako spojiti DS3231 s ESP32



3. Hardver





4. Kod

5. Izlaz



6. Kako prikazati RTC DS3231 vrijeme na OLED zaslonu pomoću ESP32

Zaključak

1. Što je DS3231 RTC modul

Modul DS3231 omogućuje vrlo precizno mjerenje vremena. Uključuje integrirani kristalni oscilator s temperaturnom kompenzacijom (TCXO) koji nam daje vrijeme s velikom preciznošću. Modul radi na I2C protokolu koristeći Master-Slave konfiguraciju. Može čuvati vrijeme i datum pomoću rezervne baterije čak i kada nema glavnog ulaznog napajanja. Obično se koristi u uređajima koji ovise o vremenu i datumu.

DS3231 prati sekunde, minute i sate. Također može voditi evidenciju datuma i dana u tjednu. Kada se radi o prijestupnim godinama, automatski prilagođava vrijeme u skladu s tim. Također, može prikazati vrijeme u 12-satnom ili 24-satnom formatu, zajedno s indikatorom AM/PM.

1.1. DS3231 protiv DS1307

I DS3231 i DS1307 su moduli za mjerenje vremena s podrškom za rezervnu bateriju. Međutim, DS3231 je precizniji od DS1307. Glavni razlog je taj što DS1307 ovisi o vanjskom kristalu od 32 kHz za mjerenje vremena.

Međutim, RTC DS3231 ima interni temperaturno kompenzirani kristalni oscilator (TCXO). Zbog toga na njega manje utječe vanjska temperatura i kao rezultat toga ima prednost u točnosti od nekoliko minuta godišnje u odnosu na DS1307.

1.2. DS3231 Pinout

DS3231 radi koristeći I2C protokol. U središtu ovog RTC modula nalazi se precizan RTC čip koji je dizajnirao Maxim. Ovaj čip upravlja svim vremenskim funkcijama i komunicira pomoću I2C s ESP32 ili Arduino pločom.

Glavni pinovi RTC DS3231 modula su:

  • VCC: Spojite ovu iglu na pozitivni terminal vašeg izvora napajanja.
  • GND: Priključak na uzemljenje.
  • SDA: Serial Data pin (koristi se za I2C komunikaciju).
  • SCL: Serial Clock pin (također dio I2C sučelja).
  • QW: Izlazni pin kvadratnog vala (može generirati periodični signal, npr. za alarme ili druge vremenske svrhe).
  • 32K: Izlaz oscilatora od 32KHz (korisno za aplikacije preciznog mjerenja vremena).

Sljedeće su glavne ugrađene komponente RTC DS3231 modula:

  • Držač baterije: Omogućuje modulu da nastavi raditi kada nema vanjskog napajanja.
  • RTC čip: Ovaj čip održava vrijeme i datum.
  • AT24C32 EEPROM: Omogućuje trajnu pohranu za bilježenje podataka i druge svrhe s 1.000.000 ciklusa pisanja.
  • TCXO: Oscilator s temperaturnom kompenzacijom za pružanje točnog vremena za različite raspone temperatura.
  • Senzor temperature: Uzima očitanja temperature i daje ih kao dio značajke modula.

2. Kako povezati DS3231 s ESP32

Za povezivanje DS3231 s ESP32, trebate instalirati Knjižnica RTClib prvi. Nakon instaliranja ove Adafruit RTC biblioteke, možete povezati svoju ESP32 ploču s DS3231 koristeći I2C protokol. Za povezivanje ESP32 I2C s RTC DS3231 modulom, možete koristiti ESP32 D21 i D22 pinove.

2.1. Dijagram ožičenja ESP32 s RTC DS3231

Prvo, morate spojiti ESP32 sa svojim I2C RTC DS3231 modulom. Slijedite dolje danu konfiguraciju pinova za ožičenje:

Nakon spajanja ESP32 s RTC DS3231, vaš dijagram ožičenja trebao bi izgledati ovako. Također možete napajati DS3231 s VIN pina ESP32. Radni napon DS3231 je 3,3 do 5,5 VDC.

2.2. Instaliranje potrebnih biblioteka

Nakon što je krug spreman, sljedeći korak je konfigurirajte svoju ESP32 ploču s Arduino IDE . Za povezivanje DS3231 morat ćete instalirati Knjižnica RTClib . Možete ga instalirati korištenjem upravitelja biblioteke Arduino IDE.

3. Hardver

Trebat će vam sljedeći hardver za dizajniranje RTC sata temeljenog na DS3231 s ESP32:

  • ESP32 razvojna ploča
  • RTC DS3231 modul
  • CR2032 baterija
  • Premosne žice
  • Breadboard

4. Kod

Nakon instaliranja RTC knjižnice, sljedeći dio je pisanje koda za DS3231 i upload na ESP32 ploču. Prvo morate napisati kod za postavljanje trenutnog vremena. Nakon što postavite vrijeme u DS3231, zapamtit će vrijeme i nastaviti raditi čak i ako se vaša ESP32 ploča isključi.

Sada otvorite Arduino IDE, kompajlirajte i snimite kod na ESP32 ploču.

#include
#include

RTC_DS3231 rtc ; // Inicijalizirati instancu klase RTC_DS3231

poništiti postaviti ( ) {
Serijski. početi ( 115200 ) ;
Žica. početi ( ) ;

ako ( ! rtc. početi ( ) ) {
Serijski. println ( 'RTC nije otkriven' ) ;
dok ( 1 ) ; // Visi na neodređeno vrijeme ako RTC nije pronađen
}

//Uklonite komentar iz retka ispod da postavite početni datum i vrijeme
//rtc.adjust(DatumVrijeme(__DATE__, __TIME__));
}

poništiti petlja ( ) {
// Očitajte trenutno vrijeme sa senzora (DS3231)
Datum i vrijeme sada = rtc. sada ( ) ;

// Ispis datuma i vremena u istom redu s dvije znamenke za sate, minute i sekunde
Serijski. ispisati ( 'Trenutni datum: ' ) ;
Serijski. ispisati ( sada. godina ( ) , PROS ) ;
Serijski. ispisati ( '/' ) ;
ispisDvije znamenke ( sada. mjesec ( ) ) ;
Serijski. ispisati ( '/' ) ;
ispisDvije znamenke ( sada. dan ( ) ) ;
Serijski. ispisati ( ' Trenutno vrijeme: ' ) ;
ispisDvije znamenke ( sada. sat ( ) ) ;
Serijski. ispisati ( ':' ) ;
ispisDvije znamenke ( sada. minuta ( ) ) ;
Serijski. ispisati ( ':' ) ;
ispisDvije znamenke ( sada. drugi ( ) ) ;
Serijski. println ( ) ;

odgoditi ( 1000 ) ; // Ažuriraj svaku 1 sekundu
}

poništiti ispisDvije znamenke ( int broj ) {
ako ( broj < 10 ) {
Serijski. ispisati ( '0' ) ; // Dodajte vodeću nulu za jednoznamenkaste brojeve
}
Serijski. ispisati ( broj ) ;
}

4.1. Objašnjenje koda

Kod počinje inicijalizacijom serijske I2C komunikacije uz pomoć žične biblioteke. Nakon toga smo uključili RTC biblioteku od Adafruita za sučelje s DS3231 modulom. Ova biblioteka pruža funkciju za interakciju s RTC DS3231 modulom.

u postaviti dijelu, I2C sabirnica se pokreće i provjerava ima li dostupnih I2C uređaja. Ako se ne pronađe, program visi na neodređeno vrijeme. Brzina prijenosa također je definirana tako da možete provjeriti izlaz na Arduino IDE serijskom monitoru.

Postavljanje sata prvi put

Kada programirate DS3231, morate odkomentiraj ovaj redak . Ovo će dobiti vaše sistemsko vrijeme i pohraniti ga u RTC memoriju. Radeći to, sat RTC modula se sinkronizira sa satom vašeg sustava.

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

Nakon što je vrijeme postavljeno, morate ponovno učitati gornji kod, ali ovaj put morate komentirajte liniju funkcije rtc.adjust(). . U suprotnom, ovo će prebrisati vaše prethodno postavljeno vrijeme i kada se vaš ESP32 isključi, RTC će se ponovno pokrenuti od trenutka kada ste učitali kod.

Čineći to, vaše će vrijeme ostati prisutno u pozadini RTC modula sve dok RTC modul ima napajanje u svojoj ćeliji CR2032.

u petlja dijelu, trenutni datum i vrijeme čitaju se iz DS3231 modula pomoću funkcije rtc.now(). Komponente datuma i vremena se izdvajaju, a formatirani datum ispisuje se na Arduino IDE serijskom monitoru svake sekunde.

5. Izlaz

Nakon učitavanja koda na ESP32 ploču, vidjet ćete da će se vrijeme početi ispisivati ​​na Arduino IDE serijskom monitoru.

6. Kako prikazati RTC DS3231 vrijeme na OLED zaslonu pomoću ESP32

Također možete otići korak dalje i prikazati vrijeme na svom OLED zaslonu nakon što ga očitate s DS3231. Za to morate instalirati Adafruit GFX SSD1306 biblioteka u Arduino IDE.

Nakon instalacije, povežite ESP32 s OLED i RTC modulom u sljedećoj konfiguraciji.

Nakon spajanja vašeg senzora, vidjet ćete da krug izgleda kao shematski dijagram u nastavku.

Sada prenesite sljedeći DS3231 kod na ESP32 ploču.

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

RTC_DS3231 rtc ;

char dana [ 7 ] [ 12 ] = { 'Nedjelja' , 'Ponedjeljak' , 'Utorak' , 'Srijeda' , 'Četvrtak' , 'Petak' , 'Subota' } ;

Adafruit_SSD1306 zaslon = Adafruit_SSD1306 ( 128 , 64 , i Žica , - 1 ) ;

poništiti postaviti ( ) {
Serijski. početi ( 115200 ) ;

prikaz. početi ( SSD1306_SWITCHCAPVCC , 0x3C ) ;

ako ( ! rtc. početi ( ) ) {
Serijski. println ( 'Nije moguće pronaći RTC! Provjerite strujni krug.' ) ;
dok ( 1 ) ;
}
//odkomentirajte donji redak dok prvi put postavljate vrijeme
//rtc.adjust(DatumVrijeme(__DATE__, __TIME__));
prikaz. clearDisplay ( ) ;
prikaz. setTextColor ( BIJELA ) ;
prikaz. setTextSize ( 2 ) ;
prikaz. setCursor ( 0 , dvadeset ) ;
prikaz. ispisati ( 'RTC SAT' ) ;
prikaz. prikaz ( ) ;
odgoditi ( 5000 ) ;
}

poništiti petlja ( ) {
Datum i vrijeme sada = rtc. sada ( ) ;

prikaz. clearDisplay ( ) ;
prikaz. setTextSize ( 2 ) ;
prikaz. setCursor ( 75 , 0 ) ;
prikaz. println ( sada. drugi ( ) , PROS ) ;
prikaz. setTextSize ( 2 ) ;
prikaz. setCursor ( 25 , 0 ) ;
prikaz. println ( ':' ) ;
prikaz. setTextSize ( 2 ) ;
prikaz. setCursor ( 65 , 0 ) ;
prikaz. println ( ':' ) ;
prikaz. setTextSize ( 2 ) ;
prikaz. setCursor ( 40 , 0 ) ;
prikaz. println ( sada. minuta ( ) , PROS ) ;
prikaz. setTextSize ( 2 ) ;
prikaz. setCursor ( 0 , 0 ) ;
prikaz. println ( sada. sat ( ) , PROS ) ;
prikaz. setTextSize ( 2 ) ;
prikaz. setCursor ( 0 , 25 ) ;
prikaz. println ( sada. dan ( ) , PROS ) ;
prikaz. ispisati ( dana [ sada. dan u tjednu ( ) ] ) ;
prikaz. setTextSize ( 2 ) ;
prikaz. setCursor ( dvadeset , 25 ) ;
prikaz. println ( '-' ) ;
prikaz. setTextSize ( 2 ) ;
prikaz. setCursor ( 35 , 25 ) ;
prikaz. println ( sada. mjesec ( ) , PROS ) ;
prikaz. setTextSize ( 2 ) ;
prikaz. setCursor ( 60 , 25 ) ;
prikaz. println ( '-' ) ;
prikaz. setTextSize ( 2 ) ;
prikaz. setCursor ( 75 , 25 ) ;
prikaz. println ( sada. godina ( ) , PROS ) ;
prikaz. prikaz ( ) ;
}

Objašnjenje koda

Kod je započeo s nekim važnim bibliotekama koje su potrebne za RTC i OLED zaslone. OLED zaslon je postavljen pomoću Adafruit SSD1306 biblioteke.

U dijelu petlje, trenutni datum i vrijeme se dobivaju pomoću rtc.now(). Nakon toga, OLED zaslon se briše i vremenske komponente se prikazuju u formatu digitalnog sata. Također možete izmijeniti kod da prilagodite format datuma i vremena.

Nakon što se kod učita na vašu ploču, dobit ćete trenutno vrijeme na OLED ekranu.

Bilješka: Gornji kod koristi 0x3C I2C adresa za OLED. Ovo je najčešća I2C adresa dostupna na SSD1306 OLED zaslonima. Ako želite pronaći I2C adresu za svoj OLED zaslon, možete pokrenuti Kod I2C skenera .

Zaključak

DS3231 je RTC senzor koji se može koristiti za mjerenje vremena. Ima pričuvnu bateriju koja može održavati vrijeme točnim čak i ako je ploča vašeg mikrokontrolera isključena. Za povezivanje ESP2 s DS3231, morate instalirati biblioteku RTClib u svoj Arduino IDE. Nakon toga, morate spojiti RTC modul preko I2C protokola pomoću digitalnog pina ESP32. Nakon povezivanja jednostavno prenesite kod i podesite vrijeme. Sada će RTC senzor čuvati vrijeme, a možete ga očitati na svom serijskom monitoru na projektima koji se temelje na vremenu.