DS3231 Real-Time Clock (RTC) -moduulin käyttäminen ESP32:n kanssa

Ds3231 Real Time Clock Rtc Moduulin Kayttaminen Esp32 N Kanssa



ESP32 on älykäs mikro-ohjainkortti, jossa on sisäänrakennettu Wi-Fi- ja Bluetooth-ominaisuudet. ESP32:ssa on sisäinen RTC, mutta sen toiminta riippuu tehosta. Joten jos haluat suunnitella projekteja tai piirejä, joita haluat käyttää myös silloin, kun virtaa ei ole, sinun on käytettävä mitä tahansa ulkoista RTC-moduulia, kuten DS1307 tai DS3231.

Teimme jo opetusohjelman DS1307 liitäntä ESP32-moduuliin . Tänään keskustelemme DS3231 RTC -anturin perusteista ja tarkistamme kuinka se voidaan liittää ESP32-korttiin.

Sisällysluettelo:





1. Mikä on DS3231 RTC-moduuli



2. DS3231:n liittäminen ESP32:een



3. Laitteisto





4. Koodi

5. Lähtö



6. RTC DS3231 -ajan näyttäminen OLED-näytöllä ESP32:n avulla

Johtopäätös

1. Mikä on DS3231 RTC-moduuli?

DS3231-moduuli tarjoaa erittäin tarkan ajanoton. Se sisältää integroidun lämpötilakompensoidun kideoskillaattorin (TCXO), joka antaa meille aikaa erittäin tarkasti. Moduuli toimii I2C-protokollalla Master-Slave-konfiguraatiolla. Se voi säilyttää ajan ja päivämäärän vara-akun avulla, vaikka pääsyöttöä ei olisikaan. Sitä käytetään yleisesti laitteissa, jotka ovat ajasta ja päivämäärästä riippuvaisia.

DS3231 seuraa sekunteja, minuutteja ja tunteja. Se voi myös pitää kirjaa päivämääristä ja arkipäivistä. Karkausvuosia käsiteltäessä se säätää ajan automaattisesti vastaavasti. Se voi myös näyttää ajan sekä 12 tunnin tai 24 tunnin muodossa, jossa on AM/PM-ilmaisin.

1.1. DS3231 vs DS1307

Sekä DS3231 että DS1307 ovat ajanmittausmoduuleja, joissa on vara-akkutuki. DS3231 on kuitenkin tarkempi kuin DS1307. Pääsyynä on se, että DS1307 on riippuvainen ulkoisesta 32 kHz:n kiteestä ajankäytössä.

RTC DS3231:ssä on kuitenkin sisäinen lämpötilakompensoitu kristallioskillaattori (TCXO). Tämän ansiosta ulkolämpötila ei vaikuta siihen vähemmän, ja sen seurauksena sen tarkkuusetu on muutaman minuutin vuodessa kuin DS1307:lla.

1.2. DS3231 Pinout

DS3231 toimii I2C-protokollalla. Tämän RTC-moduulin ytimessä meillä on Maximin suunnittelema tarkka RTC-siru. Tämä siru hoitaa kaikki aikatoiminnot ja kommunikoi I2C:n avulla ESP32- tai Arduino-levyn kanssa.

RTC DS3231 -moduulien päänastat ovat:

  • VCC: Liitä tämä nasta virtalähteesi positiiviseen napaan.
  • GND: Maadoitusliitäntä.
  • SDA: Sarjadatan pin (käytetään I2C-viestintään).
  • SCL: Sarjakellon nasta (myös osa I2C-liitäntää).
  • QW: Square Wave -lähtönasta (voi luoda jaksollisen signaalin esim. hälytyksiä tai muita ajoitustarkoituksia varten).
  • 32K: 32KHz oskillaattorilähtö (hyödyllinen tarkkoihin ajoitussovelluksiin).

Seuraavat ovat RTC DS3231 -moduulin pääkomponentit:

  • Akun pidike: Sen avulla moduuli voi jatkaa toimintaansa, kun ulkoinen virta puuttuu.
  • RTC-siru: Tämä siru säilyttää ajan ja päivämäärän.
  • AT24C32 EEPROM: Se tarjoaa haihtumatonta tallennustilaa tietojen kirjaamiseen ja muihin tarkoituksiin 1 000 000 kirjoitusjaksolla.
  • TCXO: Lämpötilakompensoitu oskillaattori tarjoaa oikean ajan vaihtelevalla lämpötila-alueella.
  • Lämpösensori: Se ottaa lämpötilalukemat ja tarjoaa ne osana moduulin ominaisuutta.

2. DS3231:n liittäminen ESP32:een

Jotta DS3231 voidaan liittää ESP32:een, sinun on asennettava RTClib-kirjasto ensimmäinen. Kun olet asentanut tämän Adafruit RTC -kirjaston, voit yhdistää ESP32-korttisi DS3231:een käyttämällä I2C-protokollaa. Voit yhdistää ESP32 I2C:n RTC DS3231 -moduuliin käyttämällä ESP32 D21- ja D22-nastoja.

2.1. ESP32:n kytkentäkaavio RTC DS3231:n kanssa

Ensin sinun on kytkettävä ESP32 I2C RTC DS3231 -moduuliin. Noudata alla annettua nastakokoonpanoa johdotuksessa:

Kun ESP32 on yhdistetty RTC DS3231:een, kytkentäkaaviosi pitäisi näyttää tältä. Voit myös antaa virran DS3231:lle ESP32:n VIN-nastasta. DS3231:n käyttöjännitteet ovat 3,3 - 5,5 VDC.

2.2. Vaadittujen kirjastojen asentaminen

Kun piiri on valmis, seuraava vaihe on määritä ESP32-korttisi Arduino IDE:llä . DS3231:n liittämistä varten sinun on asennettava RTClib-kirjasto . Voit asentaa sen käyttämällä Arduino IDE -kirjastonhallintaa.

3. Laitteisto

Tarvitset seuraavan laitteiston DS3231-pohjaisen RTC-kellon suunnitteluun ESP32:lla:

  • ESP32 kehityskortti
  • RTC DS3231 moduuli
  • CR2032 akku
  • Jumper johdot
  • Leipälauta

4. Koodi

RTC-kirjaston asennuksen jälkeen seuraava osa on kirjoittaa koodi DS3231:lle ja ladata se ESP32-kortille. Ensin sinun on kirjoitettava koodi asettaaksesi nykyinen aika. Kun olet asettanut ajan DS3231:ssä, se muistaa ajan ja jatkaa toimintaansa, vaikka ESP32-kortti sammutettaisiin.

Avaa nyt Arduino IDE, käännä ja polta koodi ESP32-kortille.

#include
#include

RTC_DS3231 rtc ; // Alustus luokan RTC_DS3231 ilmentymä

mitätön perustaa ( ) {
Sarja. alkaa ( 115 200 ) ;
Lanka. alkaa ( ) ;

jos ( ! rtc. alkaa ( ) ) {
Sarja. println ( 'RTC:tä ei havaittu' ) ;
sillä aikaa ( 1 ) ; // Pysy toistaiseksi, jos RTC:tä ei löydy
}

//Aseta alkuperäinen päivämäärä ja kellonaika poistamalla kommentit alla olevalta riviltä
//rtc.adjust(DateTime(__DATE__, __TIME__));
}

mitätön silmukka ( ) {
// Lue nykyinen aika anturista (DS3231)
DateTime nyt = rtc. nyt ( ) ;

// Tulosta päivämäärä ja aika samalle riville kahdella numerolla tunteina, minuutteina ja sekunteina
Sarja. Tulosta ( 'Nykyinen päivämäärä:' ) ;
Sarja. Tulosta ( nyt. vuosi ( ) , DEC ) ;
Sarja. Tulosta ( '/' ) ;
tulostaTwoDigits ( nyt. kuukausi ( ) ) ;
Sarja. Tulosta ( '/' ) ;
tulostaTwoDigits ( nyt. päivä ( ) ) ;
Sarja. Tulosta ( ' Nykyinen aika: ' ) ;
tulostaTwoDigits ( nyt. tunnin ( ) ) ;
Sarja. Tulosta ( ':' ) ;
tulostaTwoDigits ( nyt. minuutti ( ) ) ;
Sarja. Tulosta ( ':' ) ;
tulostaTwoDigits ( nyt. toinen ( ) ) ;
Sarja. println ( ) ;

viive ( 1000 ) ; // Päivitä 1 sekunnin välein
}

mitätön tulostaTwoDigits ( int määrä ) {
jos ( määrä < 10 ) {
Sarja. Tulosta ( '0' ) ; // Lisää yksinumeroisten lukujen alkunolla
}
Sarja. Tulosta ( määrä ) ;
}

4.1. Koodin selitys

Koodi alkaa alustamalla sarja-I2C-kommunikaatio lankakirjaston avulla. Sen jälkeen sisällytimme Adafruitin RTC-kirjaston DS3231-moduulin liittämistä varten. Tämä kirjasto tarjoaa toiminnon vuorovaikutukseen RTC DS3231 -moduulin kanssa.

Vuonna perustaa osa, I2C-väylä käynnistetään ja tarkistetaan käytettävissä olevien I2C-laitteiden varalta. Jos ei löydy, ohjelma jumiutuu toistaiseksi. Siirtonopeus on myös määritetty, jotta voit tarkistaa Arduino IDE -sarjamonitorin lähdön.

Kellon asettaminen ensimmäistä kertaa

Kun ohjelmoit DS3231:tä, sinun on poista tämän rivin kommentti . Tämä saa järjestelmäaikasi ja tallentaa sen RTC-muistiin. Näin RTC-moduulin kello synkronoidaan järjestelmäkellon kanssa.

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

Kun aika on asetettu, sinun on ladattava yllä oleva koodi uudelleen, mutta tällä kertaa sinun on ladattava kommentoi rtc.adjust()-funktioriviä . Muussa tapauksessa tämä korvaa aiemman asetetun ajan, ja kun ESP32:sta katkaistaan ​​virta, RTC alkaa uudelleen koodin lataamisesta.

Kun teet tämän, aikasi pysyy RTC-moduulin taustalla niin kauan kuin RTC-moduulilla on virtaa CR2032-solussaan.

Vuonna silmukka osa, nykyinen päivämäärä ja aika luetaan DS3231-moduulista rtc.now()-funktiolla. Päivämäärä- ja aikakomponentit puretaan ja muotoiltu päivämäärä tulostetaan Arduino IDE -sarjanäytölle sekunnin välein.

5. Lähtö

Kun olet ladannut koodin ESP32-kortille, näet ajan alkavan tulostaa Arduino IDE -sarjanäytössä.

6. RTC DS3231 -ajan näyttäminen OLED-näytöllä ESP32:n avulla

Voit myös mennä askeleen pidemmälle ja näyttää kellonajan OLED-näytöllä, kun olet lukenut sen DS3231:stä. Tätä varten sinun on asennettava Adafruit GFX SSD1306 -kirjasto Arduino IDE:ssä.

Kun ESP32 on asennettu, liitä se OLED- ja RTC-moduuliin seuraavassa kokoonpanossa.

Kun olet kytkenyt anturin, näet piirin näyttävän alla olevan kaavion kaltaisena.

Lataa nyt seuraava DS3231-koodi ESP32-kortille.

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

RTC_DS3231 rtc ;

hiiltyä päivää [ 7 ] [ 12 ] = { 'Sunnuntai' , 'Maanantai' , 'Tiistai' , 'Keskiviikko' , 'Torstai' , 'Perjantai' , 'lauantai' } ;

Adafruit_SSD1306 näyttö = Adafruit_SSD1306 ( 128 , 64 , & Lanka , - 1 ) ;

mitätön perustaa ( ) {
Sarja. alkaa ( 115 200 ) ;

näyttö. alkaa ( SSD1306_SWITCHCAPVCC , 0x3C ) ;

jos ( ! rtc. alkaa ( ) ) {
Sarja. println ( 'RTC:tä ei löydy! Tarkista piiri.' ) ;
sillä aikaa ( 1 ) ;
}
//poistaa alla olevan rivin kommentit, kun asetat aikaa ensimmäistä kertaa
//rtc.adjust(DateTime(__DATE__, __TIME__));
näyttö. selkeä näyttö ( ) ;
näyttö. setTextColor ( VALKOINEN ) ;
näyttö. setTextSize ( 2 ) ;
näyttö. setCursor ( 0 , kaksikymmentä ) ;
näyttö. Tulosta ( 'RTC CLOCK' ) ;
näyttö. näyttö ( ) ;
viive ( 5000 ) ;
}

mitätön silmukka ( ) {
DateTime nyt = rtc. nyt ( ) ;

näyttö. selkeä näyttö ( ) ;
näyttö. setTextSize ( 2 ) ;
näyttö. setCursor ( 75 , 0 ) ;
näyttö. println ( nyt. toinen ( ) , DEC ) ;
näyttö. setTextSize ( 2 ) ;
näyttö. setCursor ( 25 , 0 ) ;
näyttö. println ( ':' ) ;
näyttö. setTextSize ( 2 ) ;
näyttö. setCursor ( 65 , 0 ) ;
näyttö. println ( ':' ) ;
näyttö. setTextSize ( 2 ) ;
näyttö. setCursor ( 40 , 0 ) ;
näyttö. println ( nyt. minuutti ( ) , DEC ) ;
näyttö. setTextSize ( 2 ) ;
näyttö. setCursor ( 0 , 0 ) ;
näyttö. println ( nyt. tunnin ( ) , DEC ) ;
näyttö. setTextSize ( 2 ) ;
näyttö. setCursor ( 0 , 25 ) ;
näyttö. println ( nyt. päivä ( ) , DEC ) ;
näyttö. Tulosta ( päivää [ nyt. viikonpäivä ( ) ] ) ;
näyttö. setTextSize ( 2 ) ;
näyttö. setCursor ( kaksikymmentä , 25 ) ;
näyttö. println ( '-' ) ;
näyttö. setTextSize ( 2 ) ;
näyttö. setCursor ( 35 , 25 ) ;
näyttö. println ( nyt. kuukausi ( ) , DEC ) ;
näyttö. setTextSize ( 2 ) ;
näyttö. setCursor ( 60 , 25 ) ;
näyttö. println ( '-' ) ;
näyttö. setTextSize ( 2 ) ;
näyttö. setCursor ( 75 , 25 ) ;
näyttö. println ( nyt. vuosi ( ) , DEC ) ;
näyttö. näyttö ( ) ;
}

Koodin selitys

Koodi alkoi joistakin tärkeistä kirjastoista, joita tarvitaan RTC- ja OLED-näytöille. OLED-näyttö on määritetty käyttämällä Adafruit SSD1306 -kirjastoa.

Silmukkaosassa nykyinen päivämäärä ja kellonaika saadaan käyttämällä rtc.now(). Sen jälkeen OLED-näyttö tyhjennetään ja aikakomponentit näytetään digitaalisen kellon muodossa. Voit myös muokata koodia päivämäärän ja kellonajan muodon säätämiseksi.

Kun koodi on ladattu taulullesi, näet kellonajan OLED-näytöllä.

Huomautus: Yllä oleva koodi käyttää 0x3C I2C-osoite OLEDille. Tämä on yleisin SSD1306 OLED -näytöissä saatavilla oleva I2C-osoite. Jos haluat löytää I2C-osoitteen OLED-näytöllesi, voit suorittaa I2C-skannerin koodi .

Johtopäätös

DS3231 on RTC-anturi, jota voidaan käyttää ajanmittaukseen. Siinä on akkuvarmistus, joka voi pitää ajan tarkasti, vaikka mikro-ohjainkorttisi olisi sammutettu. Jos haluat liittää ESP2:n DS3231:een, sinun on asennettava RTClib-kirjasto Arduino IDE:hen. Tämän jälkeen sinun on liitettävä RTC-moduuli I2C-protokollan kautta käyttämällä ESP32:n digitaalista nastaa. Kun olet muodostanut yhteyden, lataa koodi ja säädä aikaa. Nyt RTC-anturi pitää ajan, ja voit lukea sen sarjanäytöltäsi suunnitteluaikapohjaisissa projekteissa.