Ako používať modul hodín reálneho času (RTC) DS3231 s ESP32

Ako Pouzivat Modul Hodin Realneho Casu Rtc Ds3231 S Esp32



ESP32 je inteligentná doska mikrokontroléra so vstavanými funkciami Wi-Fi a Bluetooth. ESP32 sa dodáva s interným RTC, ale jeho fungovanie závisí od napájania. Ak teda chcete navrhovať projekty alebo obvody, ktoré chcete spustiť aj bez napájania, musíte použiť akýkoľvek externý modul RTC, ako napríklad DS1307 alebo DS3231.

Už sme urobili návod na DS1307 prepojenie s modulom ESP32 . Dnes budeme diskutovať o základoch snímača DS3231 RTC a skontrolujeme, ako ho možno prepojiť s doskou ESP32.

Obsah:







1. Čo je modul DS3231 RTC



2. Ako prepojiť DS3231 s ESP32



3. Hardvér





4. Kód

5. Výstup



6. Ako zobraziť čas RTC DS3231 na obrazovke OLED pomocou ESP32

Záver

1. Čo je modul DS3231 RTC

Modul DS3231 poskytuje vysoko presné meranie času. Obsahuje integrovaný teplotne kompenzovaný kryštálový oscilátor (TCXO), ktorý nám poskytuje čas s veľkou presnosťou. Modul pracuje na protokole I2C s použitím konfigurácie Master-Slave. Dokáže udržiavať čas a dátum pomocou záložnej batérie, aj keď nie je k dispozícii hlavné vstupné napájanie. Bežne sa používa v zariadeniach, ktoré sú závislé od času a dátumu.

DS3231 sleduje sekundy, minúty a hodiny. Môže tiež viesť záznamy o dátumoch a pracovných dňoch. Keď sa zaoberá priestupnými rokmi, automaticky podľa toho upraví čas. Tiež môže zobrazovať čas v 12- alebo 24-hodinovom formáte, doplnený o indikátor AM/PM.

1.1. DS3231 vs DS1307

DS3231 aj DS1307 sú moduly na meranie času s podporou záložnej batérie. DS3231 je však presnejší ako DS1307. Hlavným dôvodom je, že DS1307 závisí od externého 32kHz kryštálu na meranie času.

RTC DS3231 je však vybavený interným kryštálovým oscilátorom s kompenzáciou teploty (TCXO). Vďaka tomu je menej ovplyvnený vonkajšou teplotou a v dôsledku toho má výhodu presnosti o niekoľko minút ročne ako DS1307.

1.2. Pinout DS3231

DS3231 pracuje pomocou protokolu I2C. V srdci tohto modulu RTC máme presný čip RTC navrhnutý spoločnosťou Maxim. Tento čip zvláda všetky časové funkcie a komunikuje pomocou I2C s doskou ESP32 alebo Arduino.

Hlavné kolíky modulov RTC DS3231 sú:

  • VCC: Pripojte tento kolík ku kladnému pólu vášho zdroja napájania.
  • GND: Pozemné spojenie.
  • SDA: Sériový dátový pin (používaný na komunikáciu I2C).
  • SCL: Pin Serial Clock (tiež súčasť rozhrania I2C).
  • QW: Výstupný kolík Square Wave (môže generovať periodický signál, napr. pre alarmy alebo iné účely časovania).
  • 32 kB: Výstup oscilátora 32 kHz (užitočný pre aplikácie presného časovania).

Nasledujú hlavné integrované komponenty modulu RTC DS3231:

  • Držiak batérie: Umožňuje modulu pokračovať v chode, keď nie je k dispozícii externé napájanie.
  • RTC čip: Tento čip uchováva čas a dátum.
  • AT24C32 EEPROM: Poskytuje trvalé úložisko na zaznamenávanie údajov a iné účely s 1 000 000 cyklami zápisu.
  • TCXO: Teplotne kompenzovaný oscilátor poskytuje správny čas pre rôzny rozsah teplôt.
  • Teplotný senzor: Zisťuje teploty a poskytuje ich ako súčasť funkcie modulu.

2. Ako prepojiť DS3231 s ESP32

Na prepojenie DS3231 s ESP32 je potrebné nainštalovať Knižnica RTClib najprv. Po nainštalovaní tejto knižnice Adafruit RTC môžete svoju dosku ESP32 prepojiť s DS3231 pomocou protokolu I2C. Na prepojenie ESP32 I2C s modulom RTC DS3231 môžete použiť kolíky ESP32 D21 a D22.

2.1. Schéma zapojenia ESP32 s RTC DS3231

Najprv musíte prepojiť ESP32 s modulom I2C RTC DS3231. Pri zapájaní postupujte podľa nižšie uvedenej konfigurácie kolíkov:

Po prepojení ESP32 s RTC DS3231 by mala vaša schéma zapojenia vyzerať takto. Môžete tiež napájať DS3231 z kolíka VIN ESP32. Prevádzkové napätie DS3231 je 3,3 až 5,5 V DC.

2.2. Inštalácia požadovaných knižníc

Keď je okruh pripravený, ďalším krokom je nakonfigurujte svoju dosku ESP32 pomocou Arduino IDE . Pre prepojenie DS3231 budete musieť nainštalovať Knižnica RTClib . Môžete ho nainštalovať pomocou správcu knižnice Arduino IDE.

3. Hardvér

Na navrhnutie hodín RTC založených na DS3231 s ESP32 budete potrebovať nasledujúci hardvér:

  • Vývojová doska ESP32
  • Modul RTC DS3231
  • Batéria CR2032
  • Štartovacie káble
  • Breadboard

4. Kód

Po nainštalovaní knižnice RTC je ďalšou časťou napísanie kódu pre DS3231 a jeho nahranie na dosku ESP32. Najprv musíte napísať kód na nastavenie aktuálneho času. Po nastavení času v DS3231 si zapamätá čas a bude pokračovať, aj keď sa vaša doska ESP32 vypne.

Teraz otvorte Arduino IDE, skompilujte a napáľte kód na dosku ESP32.

#include
#include

RTC_DS3231 rtc ; // Inicializujte inštanciu triedy RTC_DS3231

neplatné nastaviť ( ) {
Serial. začať ( 115200 ) ;
Drôt. začať ( ) ;

ak ( ! rtc. začať ( ) ) {
Serial. println ( 'RTC nebolo zistené' ) ;
zatiaľ čo ( 1 ) ; // Zavesiť na neurčito, ak sa nenájde RTC
}

//Zrušte komentár v riadku nižšie a nastavte počiatočný dátum a čas
//rtc.adjust(DateTime(__DATE__, __TIME__));
}

neplatné slučka ( ) {
// Čítanie aktuálneho času zo senzora (DS3231)
DateTime now = rtc. teraz ( ) ;

// Vytlačí dátum a čas na rovnaký riadok s dvoma číslicami pre hodiny, minúty a sekundy
Serial. vytlačiť ( 'Aktuálny dátum: ' ) ;
Serial. vytlačiť ( teraz. rok ( ) , DEC ) ;
Serial. vytlačiť ( '/' ) ;
printTwoDigits ( teraz. mesiac ( ) ) ;
Serial. vytlačiť ( '/' ) ;
printTwoDigits ( teraz. deň ( ) ) ;
Serial. vytlačiť ( ' Aktuálny čas: ' ) ;
printTwoDigits ( teraz. hodina ( ) ) ;
Serial. vytlačiť ( ':' ) ;
printTwoDigits ( teraz. minútu ( ) ) ;
Serial. vytlačiť ( ':' ) ;
printTwoDigits ( teraz. druhý ( ) ) ;
Serial. println ( ) ;

meškanie ( 1000 ) ; // Aktualizácia každú 1 sekundu
}

neplatné printTwoDigits ( int číslo ) {
ak ( číslo < 10 ) {
Serial. vytlačiť ( '0' ) ; // Pridajte úvodnú nulu pre jednociferné čísla
}
Serial. vytlačiť ( číslo ) ;
}

4.1. Vysvetlenie kódu

Kód začína inicializáciou sériovej I2C komunikácie pomocou drôtovej knižnice. Potom sme zahrnuli knižnicu RTC od Adafruit na prepojenie s modulom DS3231. Táto knižnica poskytuje funkciu na interakciu s modulom RTC DS3231.

V nastaviť časti sa spustí zbernica I2C a skontroluje sa dostupnosť I2C zariadení. Ak sa nenájde, program na neurčito zamrzne. Prenosová rýchlosť je tiež definovaná, takže môžete skontrolovať výstup na sériovom monitore Arduino IDE.

Prvé nastavenie hodín

Pri programovaní DS3231 musíte odkomentovať tento riadok . Takto získate váš systémový čas a uložíte ho do pamäte RTC. Týmto spôsobom sa hodiny modulu RTC zosynchronizujú s vašimi systémovými hodinami.

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

Po nastavení času musíte znova nahrať vyššie uvedený kód, ale tentoraz musíte okomentujte riadok funkcie rtc.adjust(). . V opačnom prípade sa prepíše váš predchádzajúci nastavený čas a keď sa váš ESP32 vypne, RTC sa spustí znova od času, keď ste nahrali kód.

Ak to urobíte, váš čas zostane prítomný na pozadí modulu RTC, pokiaľ je modul RTC napájaný vo svojej bunke CR2032.

V slučka časti sa aktuálny dátum a čas načítajú z modulu DS3231 pomocou funkcie rtc.now(). Komponenty dátumu a času sa extrahujú a naformátovaný dátum sa vytlačí na sériový monitor Arduino IDE každú sekundu.

5. Výstup

Po nahraní kódu na dosku ESP32 uvidíte, že čas sa začne tlačiť na sériovom monitore Arduino IDE.

6. Ako zobraziť čas RTC DS3231 na obrazovke OLED pomocou ESP32

Môžete tiež ísť o krok ďalej a zobraziť čas na obrazovke OLED po jeho prečítaní z DS3231. Na to musíte nainštalovať Knižnica Adafruit GFX SSD1306 v Arduino IDE.

Po inštalácii pripojte ESP32 k modulu OLED a RTC v nasledujúcej konfigurácii.

Po pripojení vášho senzora uvidíte obvod vyzerať ako nižšie uvedený schematický diagram.

Teraz nahrajte nasledujúci kód DS3231 na dosku ESP32.

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

RTC_DS3231 rtc ;

char dni [ 7 ] [ 12 ] = { 'nedeľa' , 'pondelok' , 'utorok' , 'streda' , 'štvrtok' , 'piatok' , 'sobota' } ;

Displej Adafruit_SSD1306 = Adafruit_SSD1306 ( 128 , 64 , & Drôt , - 1 ) ;

neplatné nastaviť ( ) {
Serial. začať ( 115200 ) ;

displej. začať ( SSD1306_SWITCHCAPVCC , 0x3C ) ;

ak ( ! rtc. začať ( ) ) {
Serial. println ( 'Nepodarilo sa nájsť RTC! Skontrolujte obvod.' ) ;
zatiaľ čo ( 1 ) ;
}
//odkomentujte riadok nižšie pri prvom nastavovaní času
//rtc.adjust(DateTime(__DATE__, __TIME__));
displej. clearDisplay ( ) ;
displej. setTextColor ( BIELY ) ;
displej. setTextSize ( 2 ) ;
displej. nastaviť kurzor ( 0 , dvadsať ) ;
displej. vytlačiť ( 'RTC HODINY' ) ;
displej. displej ( ) ;
meškanie ( 5000 ) ;
}

neplatné slučka ( ) {
DateTime now = rtc. teraz ( ) ;

displej. clearDisplay ( ) ;
displej. setTextSize ( 2 ) ;
displej. nastaviť kurzor ( 75 , 0 ) ;
displej. println ( teraz. druhý ( ) , DEC ) ;
displej. setTextSize ( 2 ) ;
displej. nastaviť kurzor ( 25 , 0 ) ;
displej. println ( ':' ) ;
displej. setTextSize ( 2 ) ;
displej. nastaviť kurzor ( 65 , 0 ) ;
displej. println ( ':' ) ;
displej. setTextSize ( 2 ) ;
displej. nastaviť kurzor ( 40 , 0 ) ;
displej. println ( teraz. minútu ( ) , DEC ) ;
displej. setTextSize ( 2 ) ;
displej. nastaviť kurzor ( 0 , 0 ) ;
displej. println ( teraz. hodina ( ) , DEC ) ;
displej. setTextSize ( 2 ) ;
displej. nastaviť kurzor ( 0 , 25 ) ;
displej. println ( teraz. deň ( ) , DEC ) ;
displej. vytlačiť ( dni [ teraz. deň v týždni ( ) ] ) ;
displej. setTextSize ( 2 ) ;
displej. nastaviť kurzor ( dvadsať , 25 ) ;
displej. println ( '-' ) ;
displej. setTextSize ( 2 ) ;
displej. nastaviť kurzor ( 35 , 25 ) ;
displej. println ( teraz. mesiac ( ) , DEC ) ;
displej. setTextSize ( 2 ) ;
displej. nastaviť kurzor ( 60 , 25 ) ;
displej. println ( '-' ) ;
displej. setTextSize ( 2 ) ;
displej. nastaviť kurzor ( 75 , 25 ) ;
displej. println ( teraz. rok ( ) , DEC ) ;
displej. displej ( ) ;
}

Vysvetlenie kódu

Kód začal s niektorými dôležitými knižnicami, ktoré sú potrebné pre obrazovky RTC a OLED. OLED displej je nastavený pomocou knižnice Adafruit SSD1306.

V časti slučky sa aktuálny dátum a čas získajú pomocou rtc.now(). Potom sa OLED obrazovka vymaže a časové zložky sa zobrazia vo formáte digitálnych hodín. Môžete tiež upraviť kód a upraviť formát dátumu a času.

Po nahratí kódu na vašu tabuľu sa na obrazovke OLED zobrazí aktuálny čas.

Poznámka: Vyššie uvedený kód používa 0x3C I2C adresa pre OLED. Toto je najbežnejšia adresa I2C dostupná na OLED displejoch SSD1306. Ak chcete nájsť I2C adresu pre svoju OLED obrazovku, môžete spustiť Kód skenera I2C .

Záver

DS3231 je RTC snímač, ktorý možno použiť na meranie času. Má záložnú batériu, ktorá dokáže udržiavať presný čas, aj keď je doska mikrokontroléra vypnutá. Ak chcete prepojiť ESP2 s DS3231, musíte nainštalovať knižnicu RTClib do vášho Arduino IDE. Potom musíte pripojiť modul RTC cez protokol I2C pomocou digitálneho kolíka ESP32. Po pripojení jednoducho nahrajte kód a upravte čas. Teraz bude RTC senzor sledovať čas a môžete si ho prečítať na svojom sériovom monitore na projektoch založených na čase návrhu.