Kako uporabljati modul ure realnega časa (RTC) DS3231 z ESP32

Kako Uporabljati Modul Ure Realnega Casa Rtc Ds3231 Z Esp32



ESP32 je pametna mikrokrmilniška plošča z vgrajenimi funkcijami Wi-Fi in Bluetooth. ESP32 ima notranji RTC, vendar je njegovo delovanje odvisno od moči. Torej, če želite načrtovati projekte ali vezja, ki jih želite izvajati tudi, ko ni napajanja, morate uporabiti kateri koli zunanji modul RTC, kot sta DS1307 ali DS3231.

Izvedli smo že vadnico o DS1307 povezovanje z modulom ESP32 . Danes bomo razpravljali o osnovah senzorja DS3231 RTC in preverili, kako ga lahko povežemo s ploščo ESP32.

Kazalo:







1. Kaj je modul DS3231 RTC



2. Kako povezati DS3231 z ESP32



3. Strojna oprema





4. Koda

5. Izhod



6. Kako prikazati čas RTC DS3231 na zaslonu OLED z uporabo ESP32

Zaključek

1. Kaj je modul DS3231 RTC

Modul DS3231 zagotavlja zelo natančno merjenje časa. Vključuje integriran kristalni oscilator s temperaturno kompenzacijo (TCXO), ki nam daje čas z veliko natančnostjo. Modul deluje na protokolu I2C z uporabo konfiguracije Master-Slave. Z rezervno baterijo lahko hrani čas in datum, tudi če ni glavnega vhodnega napajanja. Običajno se uporablja v napravah, ki so odvisne od časa in datuma.

DS3231 beleži sekunde, minute in ure. Lahko tudi beleži datume in dneve v tednu. Ko se ukvarja s prestopnimi leti, samodejno ustrezno prilagodi čas. Prav tako lahko prikaže čas v 12-urnem ali 24-urnem formatu, skupaj z indikatorjem AM/PM.

1.1. DS3231 proti DS1307

Tako DS3231 kot DS1307 sta modula za merjenje časa s podporo za rezervno baterijo. Vendar je DS3231 natančnejši od DS1307. Glavni razlog je, da je DS1307 za merjenje časa odvisen od zunanjega kristala 32 kHz.

Vendar ima RTC DS3231 notranji temperaturno kompenzirani kristalni oscilator (TCXO). Zaradi tega nanj manj vpliva zunanja temperatura in posledično ima točnost nekaj minut več kot DS1307 na leto.

1.2. Pinout DS3231

DS3231 deluje po protokolu I2C. V središču tega RTC modula imamo natančen RTC čip, ki ga je oblikoval Maxim. Ta čip upravlja vse časovne funkcije in komunicira prek I2C s ploščo ESP32 ali Arduino.

Glavni zatiči modulov RTC DS3231 so:

  • VCC: Povežite ta zatič s pozitivnim polom vašega vira napajanja.
  • GND: Ozemljitev.
  • SDA: Serial Data pin (uporablja se za komunikacijo I2C).
  • SCL: Serial Clock pin (tudi del vmesnika I2C).
  • QW: Izhodni zatič Square Wave (lahko ustvari periodični signal, npr. za alarme ali druge časovne namene).
  • 32K: Izhod oscilatorja 32 KHz (uporaben za aplikacije natančnega merjenja časa).

Sledijo glavne vgrajene komponente modula RTC DS3231:

  • Nosilec baterije: Omogoča, da modul deluje, ko ni zunanjega napajanja.
  • RTC čip: Ta čip ohranja čas in datum.
  • AT24C32 EEPROM: Zagotavlja obstojno shranjevanje za beleženje podatkov in druge namene z 1.000.000 zapisovalnimi cikli.
  • TCXO: Oscilator s temperaturno kompenzacijo za zagotavljanje pravilnega časa za različna območja temperatur.
  • Senzor temperature: Odčitava temperaturne odčitke in jih zagotavlja kot del funkcije modula.

2. Kako povezati DS3231 z ESP32

Če želite povezati DS3231 z ESP32, morate namestiti Knjižnica RTClib prvi. Po namestitvi te knjižnice Adafruit RTC lahko svojo ploščo ESP32 povežete z DS3231 s pomočjo protokola I2C. Za povezavo ESP32 I2C z modulom RTC DS3231 lahko uporabite zatiča ESP32 D21 in D22.

2.1. Shema ožičenja ESP32 z RTC DS3231

Najprej morate povezati ESP32 z vašim modulom I2C RTC DS3231. Sledite spodnji konfiguraciji nožic za ožičenje:

Po povezavi ESP32 z RTC DS3231 bi moral biti vaš diagram ožičenja videti takole. DS3231 lahko napajate tudi s priključka VIN ESP32. Delovne napetosti DS3231 so 3,3 do 5,5 VDC.

2.2. Namestitev zahtevanih knjižnic

Ko je vezje pripravljeno, je naslednji korak konfigurirajte svojo ploščo ESP32 z Arduino IDE . Za povezovanje DS3231 boste morali namestiti Knjižnica RTClib . Namestite ga lahko z uporabo upravitelja knjižnice Arduino IDE.

3. Strojna oprema

Za načrtovanje ure RTC, ki temelji na DS3231, z ESP32 boste potrebovali naslednjo strojno opremo:

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

4. Koda

Po namestitvi knjižnice RTC je naslednji del pisanje kode za DS3231 in njeno nalaganje na ploščo ESP32. Najprej morate napisati kodo za nastavitev trenutnega časa. Ko nastavite čas v DS3231, si bo zapomnil čas in nadaljeval z delovanjem, tudi če se vaša plošča ESP32 izklopi.

Zdaj odprite Arduino IDE, prevedite in zapišite kodo na ploščo ESP32.

#include
#include

RTC_DS3231 rtc ; // Inicializiraj primerek razreda RTC_DS3231

praznina nastaviti ( ) {
Serijski. začeti ( 115200 ) ;
Žica. začeti ( ) ;

če ( ! rtc. začeti ( ) ) {
Serijski. println ( 'RTC ni zaznan' ) ;
medtem ( 1 ) ; // Visi za nedoločen čas, če RTC ni najden
}

//Odkomentirajte spodnjo vrstico, da nastavite začetni datum in uro
//rtc.adjust(DatumUra(__DATE__, __TIME__));
}

praznina zanka ( ) {
// Branje trenutnega časa s senzorja (DS3231)
Datum in ura zdaj = rtc. zdaj ( ) ;

// Natisnite datum in uro v isto vrstico z dvema števkama za ure, minute in sekunde
Serijski. tiskanje ( 'Trenutni datum: ' ) ;
Serijski. tiskanje ( zdaj. leto ( ) , DEC ) ;
Serijski. tiskanje ( '/' ) ;
printTwoDigits ( zdaj. mesec ( ) ) ;
Serijski. tiskanje ( '/' ) ;
printTwoDigits ( zdaj. dan ( ) ) ;
Serijski. tiskanje ( ' Trenutni čas: ' ) ;
printTwoDigits ( zdaj. uro ( ) ) ;
Serijski. tiskanje ( ':' ) ;
printTwoDigits ( zdaj. minuta ( ) ) ;
Serijski. tiskanje ( ':' ) ;
printTwoDigits ( zdaj. drugo ( ) ) ;
Serijski. println ( ) ;

zamuda ( 1000 ) ; // Posodobi vsako 1 sekundo
}

praznina printTwoDigits ( int število ) {
če ( število < 10 ) {
Serijski. tiskanje ( '0' ) ; // Dodajte prvo ničlo za enomestna števila
}
Serijski. tiskanje ( število ) ;
}

4.1. Koda Razlaga

Koda se začne z inicializacijo serijske komunikacije I2C s pomočjo žične knjižnice. Po tem smo vključili knjižnico RTC podjetja Adafruit za povezovanje z modulom DS3231. Ta knjižnica ponuja funkcijo za interakcijo z modulom RTC DS3231.

V nastaviti delu se vodilo I2C zažene in preveri, ali so na voljo naprave I2C. Če ni najden, program visi za nedoločen čas. Določena je tudi hitrost prenosa, tako da lahko preverite izhod na serijskem monitorju Arduino IDE.

Prva nastavitev ure

Pri programiranju DS3231 morate odkomentiraj to vrstico . To bo pridobilo vaš sistemski čas in ga shranilo v pomnilnik RTC. S tem se ura modula RTC sinhronizira z vašo sistemsko uro.

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

Ko je čas nastavljen, morate znova naložiti zgornjo kodo, vendar tokrat morate komentirajte funkcijsko vrstico rtc.adjust(). . V nasprotnem primeru bo to prepisalo vaš prejšnji nastavljeni čas in ko bo vaš ESP32 izklopljen, se bo RTC znova začel od trenutka, ko ste naložili kodo.

S tem bo vaš čas ostal prisoten v ozadju modula RTC, dokler ima modul RTC napajanje v svoji celici CR2032.

V zanka delu se trenutni datum in čas prebereta iz modula DS3231 s funkcijo rtc.now(). Komponente datuma in časa se ekstrahirajo in formatirani datum se natisne na serijski monitor Arduino IDE vsako sekundo.

5. Izhod

Ko naložite kodo na ploščo ESP32, boste videli, da se bo čas začel tiskati na serijskem monitorju Arduino IDE.

6. Kako prikazati čas RTC DS3231 na zaslonu OLED z uporabo ESP32

Lahko greste tudi korak dlje in prikažete čas na svojem OLED zaslonu, potem ko ga preberete iz DS3231. Za to morate namestiti Knjižnica Adafruit GFX SSD1306 v Arduino IDE.

Ko je nameščen, povežite ESP32 z moduloma OLED in RTC v naslednji konfiguraciji.

Ko priključite senzor, boste videli, da je vezje videti kot spodnji shematski diagram.

Zdaj naložite naslednjo kodo DS3231 na ploščo ESP32.

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

RTC_DS3231 rtc ;

char dnevi [ 7 ] [ 12 ] = { 'nedelja' , 'ponedeljek' , 'torek' , 'sreda' , 'četrtek' , 'petek' , 'sobota' } ;

Zaslon Adafruit_SSD1306 = Adafruit_SSD1306 ( 128 , 64 , & Žica , - 1 ) ;

praznina nastaviti ( ) {
Serijski. začeti ( 115200 ) ;

zaslon. začeti ( SSD1306_SWITCHCAPVCC , 0x3C ) ;

če ( ! rtc. začeti ( ) ) {
Serijski. println ( 'Ni bilo mogoče najti RTC! Preverite vezje.' ) ;
medtem ( 1 ) ;
}
// med prvo nastavitvijo časa odkomentirajte spodnjo vrstico
//rtc.adjust(DatumUra(__DATE__, __TIME__));
zaslon. clearDisplay ( ) ;
zaslon. setTextColor ( BELA ) ;
zaslon. setTextSize ( 2 ) ;
zaslon. setCursor ( 0 , dvajset ) ;
zaslon. tiskanje ( 'RTC URA' ) ;
zaslon. zaslon ( ) ;
zamuda ( 5000 ) ;
}

praznina zanka ( ) {
Datum in ura zdaj = rtc. zdaj ( ) ;

zaslon. clearDisplay ( ) ;
zaslon. setTextSize ( 2 ) ;
zaslon. setCursor ( 75 , 0 ) ;
zaslon. println ( zdaj. drugo ( ) , DEC ) ;
zaslon. setTextSize ( 2 ) ;
zaslon. setCursor ( 25 , 0 ) ;
zaslon. println ( ':' ) ;
zaslon. setTextSize ( 2 ) ;
zaslon. setCursor ( 65 , 0 ) ;
zaslon. println ( ':' ) ;
zaslon. setTextSize ( 2 ) ;
zaslon. setCursor ( 40 , 0 ) ;
zaslon. println ( zdaj. minuta ( ) , DEC ) ;
zaslon. setTextSize ( 2 ) ;
zaslon. setCursor ( 0 , 0 ) ;
zaslon. println ( zdaj. uro ( ) , DEC ) ;
zaslon. setTextSize ( 2 ) ;
zaslon. setCursor ( 0 , 25 ) ;
zaslon. println ( zdaj. dan ( ) , DEC ) ;
zaslon. tiskanje ( dnevi [ zdaj. dan v tednu ( ) ] ) ;
zaslon. setTextSize ( 2 ) ;
zaslon. setCursor ( dvajset , 25 ) ;
zaslon. println ( '-' ) ;
zaslon. setTextSize ( 2 ) ;
zaslon. setCursor ( 35 , 25 ) ;
zaslon. println ( zdaj. mesec ( ) , DEC ) ;
zaslon. setTextSize ( 2 ) ;
zaslon. setCursor ( 60 , 25 ) ;
zaslon. println ( '-' ) ;
zaslon. setTextSize ( 2 ) ;
zaslon. setCursor ( 75 , 25 ) ;
zaslon. println ( zdaj. leto ( ) , DEC ) ;
zaslon. zaslon ( ) ;
}

Koda Razlaga

Koda se je začela z nekaterimi pomembnimi knjižnicami, ki so potrebne za zaslone RTC in OLED. Zaslon OLED je nastavljen s knjižnico Adafruit SSD1306.

V delu zanke sta trenutni datum in čas pridobljena z uporabo rtc.now(). Po tem se zaslon OLED počisti in komponente časa se prikažejo v obliki digitalne ure. Kodo lahko tudi spremenite, da prilagodite obliko zapisa datuma in časa.

Ko je koda naložena na vašo ploščo, boste na OLED zaslonu dobili trenutni čas.

Opomba: Zgornja koda uporablja 0x3C Naslov I2C za OLED. To je najpogostejši naslov I2C, ki je na voljo na zaslonih SSD1306 OLED. Če želite najti naslov I2C za vaš zaslon OLED, lahko zaženete Koda I2C Scanner .

Zaključek

DS3231 je RTC senzor, ki se lahko uporablja za merjenje časa. Ima rezervno baterijo, ki lahko ohranja točen čas, tudi če je mikrokrmilniška plošča izklopljena. Za povezavo ESP2 z DS3231 morate namestiti knjižnico RTClib v vaš Arduino IDE. Po tem morate povezati modul RTC prek protokola I2C z uporabo digitalnega zatiča ESP32. Ko se povežete, preprosto naložite kodo in prilagodite čas. Zdaj bo senzor RTC beležil čas in ga lahko odčitate na svojem serijskem monitorju pri načrtovanju projektov, ki temeljijo na času.