Jak používat modul hodin reálného času (RTC) DS3231 s ESP32

Jak Pouzivat Modul Hodin Realneho Casu Rtc Ds3231 S Esp32



ESP32 je chytrá deska mikrokontroléru s vestavěnými funkcemi Wi-Fi a Bluetooth. ESP32 je dodáván s interním RTC, ale jeho fungování je závislé na napájení. Pokud tedy chcete navrhovat projekty nebo obvody, které chcete provozovat, i když není napájení, musíte použít jakýkoli externí modul RTC, jako je DS1307 nebo DS3231.

Už jsme udělali tutoriál DS1307 propojení s modulem ESP32 . Dnes probereme základy snímače DS3231 RTC a ověříme, jak jej lze propojit s deskou ESP32.

Obsah:







1. Co je modul DS3231 RTC



2. Jak propojit DS3231 s ESP32



3. Hardware





4. Kód

5. Výstup



6. Jak zobrazit čas RTC DS3231 na obrazovce OLED pomocí ESP32

Závěr

1. Co je modul DS3231 RTC

Modul DS3231 poskytuje vysoce přesné měření času. Obsahuje integrovaný teplotně kompenzovaný krystalový oscilátor (TCXO), který nám poskytuje čas s velkou přesností. Modul pracuje na protokolu I2C pomocí konfigurace Master-Slave. Dokáže udržovat čas a datum pomocí záložní baterie, i když není k dispozici hlavní vstupní napájení. Běžně se používá v zařízeních, která jsou závislá na čase a datu.

DS3231 sleduje sekundy, minuty a hodiny. Může také uchovávat záznamy o datech a pracovních dnech. Když se zabývá přestupnými roky, automaticky podle toho upraví čas. Také může zobrazovat čas ve 12hodinovém nebo 24hodinovém formátu, doplněný indikátorem AM/PM.

1.1. DS3231 vs DS1307

DS3231 i DS1307 jsou moduly pro měření času s podporou bateriového zálohování. DS3231 je však přesnější než DS1307. Hlavním důvodem je, že DS1307 závisí na externím 32kHz krystalu pro měření času.

RTC DS3231 je však vybaven interním krystalovým oscilátorem s kompenzací teploty (TCXO). Díky tomu je méně ovlivňován vnější teplotou a v důsledku toho má výhodu přesnosti o několik minut ročně než DS1307.

1.2. Pinout DS3231

DS3231 pracuje pomocí protokolu I2C. V srdci tohoto RTC modulu máme přesný RTC čip navržený Maximem. Tento čip zvládá všechny časové funkce a komunikuje pomocí I2C s deskou ESP32 nebo Arduino.

Hlavní piny modulů RTC DS3231 jsou:

  • VCC: Připojte tento kolík ke kladné svorce vašeho napájecího zdroje.
  • GND: Zemní spojení.
  • SDA: Pin Serial Data (používá se pro komunikaci I2C).
  • SCL: Pin Serial Clock (také součást rozhraní I2C).
  • Q W: Výstupní kolík Square Wave (může generovat periodický signál, např. pro alarmy nebo jiné účely časování).
  • 32 kB: Výstup oscilátoru 32 kHz (užitečné pro aplikace s přesným časováním).

Níže jsou uvedeny hlavní integrované součásti modulu RTC DS3231:

  • Držák baterie: Umožňuje modulu zůstat v chodu, když není externí napájení.
  • RTC čip: Tento čip uchovává čas a datum.
  • AT24C32 EEPROM: Poskytuje energeticky nezávislé úložiště pro záznam dat a další účely s 1 000 000 cykly zápisu.
  • TCXO: Teplotně kompenzovaný oscilátor poskytuje správný čas pro různý rozsah teplot.
  • Senzor teploty: Odebírá údaje o teplotě a poskytuje je jako součást funkce modulu.

2. Jak propojit DS3231 s ESP32

Chcete-li propojit DS3231 s ESP32, musíte nainstalovat Knihovna RTClib První. Po instalaci této knihovny Adafruit RTC můžete svou desku ESP32 propojit s DS3231 pomocí protokolu I2C. Pro propojení ESP32 I2C s modulem RTC DS3231 můžete použít piny ESP32 D21 a D22.

2.1. Schéma zapojení ESP32 s RTC DS3231

Nejprve musíte propojit ESP32 s modulem I2C RTC DS3231. Při zapojení postupujte podle níže uvedené konfigurace kolíků:

Po propojení ESP32 s RTC DS3231 by vaše schéma zapojení mělo vypadat takto. DS3231 můžete také napájet z pinu VIN ESP32. Provozní napětí DS3231 jsou 3,3 až 5,5 V DC.

2.2. Instalace požadovaných knihoven

Jakmile je obvod připraven, dalším krokem je nakonfigurujte svou desku ESP32 pomocí Arduino IDE . Pro rozhraní DS3231 budete muset nainstalovat Knihovna RTClib . Můžete jej nainstalovat pomocí správce knihovny Arduino IDE.

3. Hardware

Pro návrh hodin RTC založených na DS3231 s ESP32 budete potřebovat následující hardware:

  • Vývojová deska ESP32
  • Modul RTC DS3231
  • Baterie CR2032
  • Startovací dráty
  • Breadboard

4. Kód

Po instalaci knihovny RTC je další částí napsat kód pro DS3231 a nahrát jej na desku ESP32. Nejprve musíte napsat kód pro nastavení vašeho aktuálního času. Po nastavení času v DS3231 si DS3231 zapamatuje čas a bude pokračovat, i když se vaše deska ESP32 vypne.

Nyní otevřete Arduino IDE, zkompilujte a vypalte kód na desku ESP32.

#include
#include

RTC_DS3231 rtc ; // Inicializuje instanci třídy RTC_DS3231

prázdnota založit ( ) {
Seriál. začít ( 115200 ) ;
Drát. začít ( ) ;

-li ( ! rtc. začít ( ) ) {
Seriál. println ( 'RTC nezjištěno' ) ;
zatímco ( 1 ) ; // Zavěsit na neurčito, pokud RTC není nalezeno
}

//Odkomentujte níže uvedený řádek a nastavte počáteční datum a čas
//rtc.adjust(DateTime(__DATE__, __TIME__));
}

prázdnota smyčka ( ) {
// Čtení aktuálního času ze senzoru (DS3231)
Datum a čas nyní = rtc. Nyní ( ) ;

// Vytiskne datum a čas na stejný řádek se dvěma číslicemi pro hodiny, minuty a sekundy
Seriál. tisk ( 'Dnešní datum: ' ) ;
Seriál. tisk ( Nyní. rok ( ) , DEC ) ;
Seriál. tisk ( '/' ) ;
tisknoutDvoučíslice ( Nyní. Měsíc ( ) ) ;
Seriál. tisk ( '/' ) ;
tisknoutDvoučíslice ( Nyní. den ( ) ) ;
Seriál. tisk ( ' Aktuální čas: ' ) ;
tisknoutDvoučíslice ( Nyní. hodina ( ) ) ;
Seriál. tisk ( ':' ) ;
tisknoutDvoučíslice ( Nyní. minuta ( ) ) ;
Seriál. tisk ( ':' ) ;
tisknoutDvoučíslice ( Nyní. druhý ( ) ) ;
Seriál. println ( ) ;

zpoždění ( 1000 ) ; // Aktualizace každou 1 sekundu
}

prázdnota tisknoutDvoučíslice ( int číslo ) {
-li ( číslo < 10 ) {
Seriál. tisk ( '0' ) ; // Přidejte úvodní nulu pro jednociferná čísla
}
Seriál. tisk ( číslo ) ;
}

4.1. Vysvětlení kódu

Kód začíná inicializací sériové I2C komunikace pomocí drátové knihovny. Poté jsme zahrnuli knihovnu RTC od Adafruit pro propojení s modulem DS3231. Tato knihovna poskytuje funkci pro interakci s modulem RTC DS3231.

V založit části se spustí sběrnice I2C a zkontroluje se pro dostupná zařízení I2C. Pokud není nalezen, program na dobu neurčitou zamrzne. Přenosová rychlost je také definována, takže můžete zkontrolovat výstup na sériovém monitoru Arduino IDE.

První nastavení hodin

Při programování DS3231 musíte odkomentujte tento řádek . Tím získáte svůj systémový čas a uložíte jej do paměti RTC. Tímto způsobem se hodiny modulu RTC synchronizují s vašimi systémovými hodinami.

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

Po nastavení času musíte znovu nahrát výše uvedený kód, ale tentokrát musíte okomentujte řádek funkce rtc.adjust(). . V opačném případě se přepíše váš předchozí nastavený čas a po vypnutí ESP32 se RTC spustí znovu od okamžiku, kdy jste nahráli kód.

Tímto způsobem zůstane váš čas přítomen na pozadí modulu RTC, dokud bude modul RTC napájen ve své buňce CR2032.

V smyčka části jsou aktuální datum a čas načteny z modulu DS3231 pomocí funkce rtc.now(). Komponenty data a času jsou extrahovány a naformátované datum je vytištěno na sériovém monitoru Arduino IDE každou sekundu.

5. Výstup

Po nahrání kódu na desku ESP32 uvidíte, že se čas začne tisknout na sériovém monitoru Arduino IDE.

6. Jak zobrazit čas RTC DS3231 na obrazovce OLED pomocí ESP32

Můžete také jít o krok dále a po přečtení z DS3231 zobrazit čas na obrazovce OLED. K tomu je třeba nainstalovat Knihovna Adafruit GFX SSD1306 v Arduino IDE.

Po instalaci propojte ESP32 s modulem OLED a RTC v následující konfiguraci.

Po připojení senzoru uvidíte obvod vypadat jako níže uvedené schéma.

Nyní nahrajte následující kód DS3231 na desku ESP32.

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

RTC_DS3231 rtc ;

char dní [ 7 ] [ 12 ] = { 'Neděle' , 'Pondělí' , 'Úterý' , 'Středa' , 'Čtvrtek' , 'Pátek' , 'Sobota' } ;

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

prázdnota založit ( ) {
Seriál. začít ( 115200 ) ;

Zobrazit. začít ( SSD1306_SWITCHCAPVCC , 0x3C ) ;

-li ( ! rtc. začít ( ) ) {
Seriál. println ( 'Nelze najít RTC! Zkontrolujte obvod.' ) ;
zatímco ( 1 ) ;
}
//při prvním nastavování času odkomentujte níže uvedený řádek
//rtc.adjust(DateTime(__DATE__, __TIME__));
Zobrazit. clearDisplay ( ) ;
Zobrazit. setTextColor ( BÍLÝ ) ;
Zobrazit. setTextSize ( 2 ) ;
Zobrazit. nastavitKurzor ( 0 , dvacet ) ;
Zobrazit. tisk ( 'RTC CLOCK' ) ;
Zobrazit. Zobrazit ( ) ;
zpoždění ( 5000 ) ;
}

prázdnota smyčka ( ) {
Datum a čas nyní = rtc. Nyní ( ) ;

Zobrazit. clearDisplay ( ) ;
Zobrazit. setTextSize ( 2 ) ;
Zobrazit. nastavitKurzor ( 75 , 0 ) ;
Zobrazit. println ( Nyní. druhý ( ) , DEC ) ;
Zobrazit. setTextSize ( 2 ) ;
Zobrazit. nastavitKurzor ( 25 , 0 ) ;
Zobrazit. println ( ':' ) ;
Zobrazit. setTextSize ( 2 ) ;
Zobrazit. nastavitKurzor ( 65 , 0 ) ;
Zobrazit. println ( ':' ) ;
Zobrazit. setTextSize ( 2 ) ;
Zobrazit. nastavitKurzor ( 40 , 0 ) ;
Zobrazit. println ( Nyní. minuta ( ) , DEC ) ;
Zobrazit. setTextSize ( 2 ) ;
Zobrazit. nastavitKurzor ( 0 , 0 ) ;
Zobrazit. println ( Nyní. hodina ( ) , DEC ) ;
Zobrazit. setTextSize ( 2 ) ;
Zobrazit. nastavitKurzor ( 0 , 25 ) ;
Zobrazit. println ( Nyní. den ( ) , DEC ) ;
Zobrazit. tisk ( dní [ Nyní. den v týdnu ( ) ] ) ;
Zobrazit. setTextSize ( 2 ) ;
Zobrazit. nastavitKurzor ( dvacet , 25 ) ;
Zobrazit. println ( '-' ) ;
Zobrazit. setTextSize ( 2 ) ;
Zobrazit. nastavitKurzor ( 35 , 25 ) ;
Zobrazit. println ( Nyní. Měsíc ( ) , DEC ) ;
Zobrazit. setTextSize ( 2 ) ;
Zobrazit. nastavitKurzor ( 60 , 25 ) ;
Zobrazit. println ( '-' ) ;
Zobrazit. setTextSize ( 2 ) ;
Zobrazit. nastavitKurzor ( 75 , 25 ) ;
Zobrazit. println ( Nyní. rok ( ) , DEC ) ;
Zobrazit. Zobrazit ( ) ;
}

Vysvětlení kódu

Kód začal s některými důležitými knihovnami, které jsou vyžadovány pro obrazovky RTC a OLED. OLED displej je nastaven pomocí knihovny Adafruit SSD1306.

V části smyčky se aktuální datum a čas získá pomocí rtc.now(). Poté se OLED obrazovka vymaže a časové složky se zobrazí ve formátu digitálních hodin. Můžete také upravit kód a upravit formát data a času.

Jakmile je kód nahrán na vaši desku, zobrazí se aktuální čas na obrazovce OLED.

Poznámka: Výše uvedený kód používá 0x3C I2C adresa pro OLED. Toto je nejběžnější adresa I2C dostupná na OLED displejích SSD1306. Pokud chcete najít I2C adresu pro vaši OLED obrazovku, můžete spustit Kód skeneru I2C .

Závěr

DS3231 je RTC senzor, který lze použít pro měření času. Má záložní baterii, která dokáže udržovat čas přesný, i když je deska mikrokontroléru vypnutá. Chcete-li propojit ESP2 s DS3231, musíte nainstalovat knihovnu RTClib do vašeho Arduino IDE. Poté musíte připojit modul RTC přes protokol I2C pomocí digitálního pinu ESP32. Po připojení jednoduše nahrajte kód a upravte čas. Nyní bude RTC senzor sledovat čas a můžete jej číst na svém sériovém monitoru na projektech založených na čase návrhu.