ESP32 Hodiny reálneho času (RTC) využívajúce DS1307 a OLED displej

Esp32 Hodiny Realneho Casu Rtc Vyuzivajuce Ds1307 A Oled Displej



ESP32 sa dodáva so vstavaným modulom RTC, ktorý však funguje iba vtedy, keď je napájanie. Ak dôjde k výpadku napájania, hodiny sa vynulujú a nebudú môcť udržiavať správny čas. Ak teda chcete sledovať čas alebo ovládať akékoľvek zariadenie založené na čase, vyskúšajte snímač DS1307 RTC. Môžete však premýšľať o pripojení záložnej batérie k doske ESP32, ale to nie je ten najlepší scenár, ak máte nedostatok energie. Najlepšou alternatívou je použitie snímača DS1307, pretože sa dodáva so vstavanou batériou, ktorá vydrží minimálne rok.

Aby bolo všetko jasné, interné hodiny reálneho času (RTC) ESP32 dokážu sledovať čas, aj keď je hlavný procesor vypnutý alebo v hlbokom spánku. ESP32 RTC môžete použiť na sledovanie času bez toho, aby ste spotrebovali veľa energie alebo ovplyvnili hlavný procesor. ale na spustenie stále vyžaduje energiu, nie až tak veľa, ale na spustenie interného RTC je potrebné minimálne množstvo energie.

Pri tomto nám teda ostáva už len riešenie použitia externého RTC modulu. Pozrime sa na kroky prepojenia dosky ESP32 s modulom DS1307 RTC.







Obsah:

1. Čo je modul RTC DS1307

DS1307 je zariadenie s nízkou spotrebou energie, ktoré dokáže presne sledovať čas a dátum. Používa binárne kódovaný desiatkový formát (BCD). Môže vám povedať čas v podrobnom formáte, ako sú sekundy, minúty a dokonca aj hodiny a dni. Môžete tiež vytlačiť dátum v plnom formáte, ako je mesiac a rok. Tiež vie, kedy je priestupný rok, až do roku 2100. Na komunikáciu s DS1307 môžete použiť protokol I2C.





DS1307 má vstavanú batériu, ktorá ho dokáže napájať približne rok bez externého 5V zdroja. Pomocou tejto záložnej batérie dokáže uchovať čas, aj keď je hlavné napájanie vypnuté. Má tiež 56 bajtov SRAM na uloženie niektorých údajov. DS1307 je šikovné zariadenie, ktoré má veľa aplikácií v kombinácii s doskou Arduino alebo ESP32. Tieto údaje môžu byť užitočné napríklad pri zaznamenávaní údajov, poplachových systémoch alebo pri priemyselnom riadení. Ak potrebujete spoľahlivé meranie času, DS1307 je skvelá voľba.





Špecifikácie modulu RTC DS1307

Modul RTC DS1307 sa skladá z RTC IC, EEPROM, kryštálového oscilátora a držiaka batérie na zálohovanie.



Nižšie sú uvedené podrobnosti o týchto častiach:

DS1307 RTC IC : DS1307 RTC IC je 8-pinový čip, ktorý sleduje čas a dátum pomocou protokolu I2C. Spotrebuje veľmi málo energie, menej ako 500 nA. Môže zobrazovať čas v sekundách, minútach a hodinách a dátum v dňoch, mesiacoch a rokoch. Dokáže tiež prepínať medzi 24-hodinovým a 12-hodinovým formátom.

IC 24C32 EEPROM : 24C32 EEPROM IC je 32-bajtový čip od Atmel, ktorý ukladá nastavenia, čas a dátum. Používa tiež protokol I2C.

Kryštál 32,768 kHz : Kryštálový oscilátor 32,768 kHz poskytuje hodinovú frekvenciu pre DS1307 RTC IC.

Držiak batérie : Držiak batérie obsahuje batériu CR2032. Je to 3V lítiový mincový článok. Poskytuje nepretržité napájanie DS1307 RTC IC.

Zabezpečenie snímača DS18B20 : Poskytnutie snímača DS18B20 vám umožňuje spájkovať a používať snímač teploty DS18B20. Nie je predspájkovaný. Môžete spájkovať obal s priechodnými otvormi a získať teplotu z kolíka DS modulu.

Nižšie uvedený zoznam uvádza niekoľko rýchlych špecifikácií snímača DS1307 RTC:

  • Prevádzkové napätie: 4,5–5,5 V, zvyčajne 5 V
  • Terajšia konzumácia : Menej ako 1,5 mA
  • Presnosť : 0–40 °C, závisí od kryštálu
  • Batéria : CR2032 (3 V minca)
  • Pamäť : 56 bajtov stálej pamäte RAM
  • Rozhranie : Dvojvodičové (I2C) sériové rozhranie
  • Výkon : 1 Hz výstupný kolík
  • Programovateľný výstup so štvorcovými vlnami : V režime záložnej batérie spotrebuje menej ako 500 nA
  • Detekcia výpadku napájania : Automatická detekcia výpadku napájania a spínací obvod
  • Okruh snímania sily : Môže sa automaticky prepnúť na záložný zdroj pri nedostatku energie
  • Náhrada za priestupný rok : Platné do roku 2100

RTC DS1307 Modul Pinout

Modul má niekoľko pinov s rôznymi funkciami.

  • VCC je kolík, ktorý potrebuje jednosmerné napätie medzi 3,3 V a 5,5 V na napájanie modulu.
  • GND je kolík pre nízke napätie alebo uzemnenie.
  • SDA a SCL sú kolíky, ktoré prenášajú dáta a hodinové signály cez zbernicu I2C.
  • DS je kolík, ktorý meria teplotu pomocou snímača DS1307, ak ho máte na module RTC.
  • SQ je kolík, ktorý generuje štvorcový signál s frekvenciou 1 Hz, 4 kHz, 8 kHz alebo 32 kHz, v závislosti od toho, ako ho naprogramujete.
  • JEDEN je kolík, ktorý používa 3V batériu na udržanie presného času, keď je hlavné napájanie vypnuté.

2. Ako prepojiť RTC DS1307 a OLED displej s ESP32

Na prepojenie ESP32 s DS1307 a OLED displejom môžete použiť vstavané I2C kolíky dosky ESP32. DS1307 aj OLED displej sú zariadenia založené na I2C. Potom môže komunikovať pomocou I2C master slave protokolu cez I2C zbernicu.

Predtým, ako prejdeme k prepojeniu ESP32 s DS1307 a OLED displejom, musíte najprv nainštalovať niektoré požadované knižnice.

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

Budete potrebovať dve knižnice, jednu pre modul RTC a jednu pre OLED displej. Pomocou OLED s modulom RTC môžete vytvárať úžasné a interaktívne ukážky hodín. Ak nemáte v pláne zobrazovať čas na obrazovke, môžete túto inštaláciu knižnice preskočiť.

Nasledujú dve knižnice, ktoré budete potrebovať:

  • RTClib (od Adafruit) je knižnica Arduino IDE na nastavenie a získanie času z RTC. Poskytuje tiež triedy na manipuláciu s dátumami, časmi a trvaním. Pomocou tejto knižnice môžete prepojiť a naprogramovať moduly hodín reálneho času (RTC), ako sú DS1307 a DS3231.
  • S SD1306 (od Adafruit) je knižnica pre Arduino, pomocou ktorej môžete prepojiť a naprogramovať OLED displeje s Arduinom alebo akoukoľvek inou doskou mikrokontroléra.

Ak chcete stiahnuť a nainštalovať obe tieto knižnice v Arduino IDE, najprv otvorte Správca knižnice vyhľadajte knižnicu RTClib a kliknite Inštalácia :

Získate možnosť nainštalovať iba knižnicu alebo jej závislosti. Kliknite na Inštalovať všetko tlačidlo na úplnú inštaláciu knižnice. Týmto spôsobom nedostanete žiadnu chybu, ak upravíte kód, ktorý závisí od závislostí tejto knižnice.

Podobne vyhľadajte knižnicu SSD1306. Táto knižnica je potrebná pre OLED displej. Kliknite Inštalácia pokračovať.

Tentoraz dostanete rovnakú potvrdzujúcu správu. Klikni na Inštalovať všetko možnosť.

Teraz sú nainštalované knižnice pre OLED a DS1307 a pripravené na použitie. Predtým si však najprv zistite I2C adresu pre OLED displej.

3. Nájdenie I2C adresy OLED displeja

I2C adresa je jedinečný identifikátor pre každé zariadenie na I2C zbernici. Umožňuje hlavnému zariadeniu komunikovať s konkrétnym podriadeným zariadením odosielaním údajov na jeho adresu. Účelom I2C adresy je vyhnúť sa konfliktom a zámene medzi viacerými zariadeniami na tej istej zbernici.

Na získanie adresy I2C zariadenia môžete použiť a jednoduchý náčrt, ktorý naskenuje zbernicu a vytlačí adresy zariadení, ktoré nájde. Prípadne si môžete pozrieť údajový list zariadenia, aby ste videli jeho predvolenú alebo konfigurovateľnú adresu.

Tu v našom prípade po spustení kódu skenera I2C sa na termináli Arduino IDE zobrazí nasledujúca adresa I2C obrazovky OLED.

Väčšinou je veľká šanca, že to isté dostanete aj vy 0x3C adresu vašej OLED obrazovky.

4. Prepojenie modulu OLED a RTC DS1307 s ESP32

1. Pripojte kolíky SDA a SCL modulu DS1307 a OLED displej na I2C kolíky ESP32. zvyčajne sú to GPIO 21 a GPIO 22 , ale v prípade potreby môžete v kóde priradiť akékoľvek iné piny.

2. Pripojte VCC a GND DS1307 a OLED displej k 3,3V a GND kolíkom ESP32.

3. Vložte gombíkovú batériu CR2032 do modulu DS1307, aby ste poskytli záložné napájanie hodín reálneho času.

4. Nahrajte vzorový kód z tohto návodu na vašu dosku ESP32. Upravte kód pre vlastné výstupy.

Po odovzdaní sa hodiny začnú od nastaveného času a zobrazujú čas na obrazovke OLED.

5. Schéma zapojenia

Schéma zapojenia ESP32 s DS1307 je jednoduchá, len so štyrmi vodičmi, ktoré je potrebné pripojiť. I2C vodiče SDA a SCL senzorov OLED aj DS1307 môžete skrátiť. Podobne na napájanie oboch týchto snímačov možno použiť kolíky 3V3 a GND dosky ESP32. V prípade potreby môžete napájať aj zo samostatného zdroja.

Poznámka : Je bezpečné napájať RTC DS1307 z 3,3V kolíka ESP32, ak nie je prekročený aktuálny limit ESP32. Ak však chcete byť na bezpečnom mieste, môžete použiť samostatný zdroj napájania pre modul RTC alebo vyskúšať nízkoenergetický snímač DS3231, ktorého prevádzkový rozsah je medzi 3,3 až 5,5 V jednosmerného prúdu.

Na obrázku nižšie je znázornené prepojenie ESP32 so snímačom RTC DS1307.

Podobne, ak chcete pripojiť obrazovku OLED na zobrazenie času, môžete použiť rovnaké kolíky I2C a napájacie kolíky dosky ESP32.

6. Kód

Pomocou nižšie uvedeného kódu nastavíme aktuálny dátum a čas na RTC. Po nastavení času kód zobrazí čas na termináli Arduino IDE. Pred nahraním kódu ho musíte aktualizovať aktuálnym dátumom a časom.

#include 'RTClib.h'
RTC_DS1307 DS1307_RTC;
char Week_days [ 7 ] [ 12 ] = { 'nedeľa' , 'pondelok' , 'utorok' , 'streda' , 'štvrtok' , 'piatok' , 'sobota' } ;
neplatné nastavenie ( ) {
Serial.začať ( 115200 ) ;
#ifndef ESP8266
zatiaľ čo ( ! Serial ) ;
#koniec Ak
ak ( ! DS1307_RTC.begin ( ) ) {
Serial.println ( 'Nepodarilo sa nájsť RTC' ) ;
zatiaľ čo ( 1 ) ;
}
DS1307_RTC.upraviť ( Dátum Čas ( F ( __DÁTUM__ ) , F ( __TIME__ ) ) ) ;
}
prázdna slučka ( ) {
DateTime now = DS1307_RTC.now ( ) ;
Sériová.tlač ( teraz.rok ( ) , DEC ) ;
Sériová.tlač ( '/' ) ;
Sériová.tlač ( teraz.mesiac ( ) , DEC ) ;
Sériová.tlač ( '/' ) ;
Sériová.tlač ( teraz.deň ( ) , DEC ) ;
Sériová.tlač ( '(' ) ;
Sériová.tlač ( Dni v týždni [ teraz.deň týždňa ( ) ] ) ;
Sériová.tlač ( ')' ) ;
Sériová.tlač ( teraz.hodina ( ) , DEC ) ;
Sériová.tlač ( ':' ) ;
Sériová.tlač ( teraz.minúta ( ) , DEC ) ;
Sériová.tlač ( ':' ) ;
Sériová.tlač ( teraz.druhý ( ) , DEC ) ;
Serial.println ( ) ;
meškanie ( 1000 ) ;
}

Tento kód používa Knižnica RTClib na prepojenie s modulom hodín reálneho času DS1307, ktorý sleduje dátum a čas.

The nastaviť funkcia začala inicializáciou prenosovej rýchlosti. Potom sme v tejto časti definovali funkciu na synchronizáciu dátumu a času počítača so snímačom DS1307. Tým sa nahrá čas kompilácie kódu do snímača RTC.

Môžete použiť slučka funkcia na získanie dátumu a času z RTC. Potom ho môžete zobraziť na sériovom monitore takto: rok/mesiac/deň (deň v týždni) hodina:minúta:sekunda. Nezabudnite po každej slučke pridať jednosekundové oneskorenie, aby kód nebežal príliš rýchlo.

Zobrazenie aktuálneho času na OLED displeji

Na zobrazenie rovnakého času na obrazovke OLED musíme pridať ďalšiu kódovú časť pre obrazovku OLED. Stačí nahrať daný kód. Tento kód zobrazí aktuálny čas na obrazovke OLED.

Pamätajte, že tu používame 0,96-palcový 128×64 I2C SSD OLED zobrazovací modul. Ak používate inú veľkosť, upravte kód zodpovedajúcim spôsobom. Skontrolujte tiež adresu I2C a upravte ju v danom kóde. V našom prípade máme I2C adresu 0x3C pre OLED obrazovku.

#include
#include
#include
#include 'RTClib.h'
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64

Displej Adafruit_SSD1306 ( SCREEN_WIDTH, SCREEN_HEIGHT, & Drôt, - 1 ) ;
RTC_DS1307 RTC;
char dni [ 7 ] [ 12 ] = { 'nedeľa' , 'pondelok' , 'utorok' , 'streda' , 'štvrtok' , 'piatok' , 'sobota' } ;
neplatné nastavenie ( ) {
Serial.začať ( 115200 ) ;
ak ( ! RTC.začať ( ) ) {
Serial.println ( 'Nepodarilo sa nájsť RTC' ) ;
zatiaľ čo ( 1 ) ;
}
RTC.upraviť ( Dátum Čas ( F ( __DÁTUM__ ) , F ( __TIME__ ) ) ) ;
ak ( ! zobraziť.začať ( SSD1306_SWITCHCAPVCC, 0x3C ) ) {
Serial.println ( F ( 'Pridelenie SSD1306 zlyhalo' ) ) ;
pre ( ;; ) ;
}
meškanie ( 1000 ) ;
display.clearDisplay ( ) ;
display.setTextSize ( 2 ) ;
display.setTextColor ( BIELY ) ;
display.setCursor ( 30 , dvadsať ) ;
display.println ( 'linux' ) ;
zobraziť.zobraziť ( ) ;
meškanie ( 3000 ) ;
display.clearDisplay ( ) ;
}
prázdna slučka ( ) {
DateTime now = RTC.now ( ) ;
display.clearDisplay ( ) ;
display.setTextSize ( 2 ) ;
display.setCursor ( 0 , 0 ) ;
zobraziť.tlač ( teraz.deň ( ) ) ;
zobraziť.tlač ( '/' ) ;
zobraziť.tlač ( teraz.mesiac ( ) ) ;
zobraziť.tlač ( '/' ) ;
zobraziť.tlač ( teraz.rok ( ) ) ;
display.println ( dni [ teraz.deň týždňa ( ) ] ) ;
display.println ( ' ' ) ;
display.setCursor ( 0 , 40 ) ;
ak ( teraz.hodina ( ) < 10 )
zobraziť.tlač ( '0' ) ;
zobraziť.tlač ( teraz.hodina ( ) ) ;
zobraziť.tlač ( ':' ) ;
ak ( teraz.minúta ( ) < 10 )
zobraziť.tlač ( '0' ) ;
zobraziť.tlač ( teraz.minúta ( ) ) ;
zobraziť.tlač ( ':' ) ;
ak ( teraz.druhý ( ) < 10 )
zobraziť.tlač ( '0' ) ;
display.println ( teraz.druhý ( ) ) ;
zobraziť.zobraziť ( ) ;
}

Kód začal s knižnicami, ktoré sme nainštalovali pre RTC a displej. Potom definuje veľkosť obrazovky a adresu zobrazenia. Inicializuje pole s názvami dní v týždni.

The nastaviť časť začína sériovou komunikáciou. Kontroluje, či RTC a displej fungujú alebo nie. Potom sme definovali textový reťazec „Linuxhint“, ktorý sa zobrazí na 3 sekundy. Toto je iba otváracia alebo spúšťacia správa, túto správu môžete upraviť aj pomocou vlastného textu.

The slučka funkcia získa dátum a čas modulu DS1307. Potom vymaže displej a vytlačí dátum a čas vo formáte. Kód tiež pridáva úvodné nuly k hodinám, minútam a sekundám, ak sú ich hodnoty menšie ako 10.

7. Hardvér

Po nahraní kódu na dosku ESP32 uvidíte na OLED obrazovke nasledujúci výstup. Pre hardvér sme použili OLED obrazovku a modul I2C RTC DS1307. Použitá je doska ESP32 s 30 pinmi. Môžete tiež experimentovať s akoukoľvek inou doskou ESP32, ale uistite sa, že ste správne pripojili kolíky I2C.

Záver

RTC DS1307 má 56-bajtovú pamäť SRAM s podporou záložnej batérie. Ide o 8-pinové zariadenie, ktoré využíva komunikačný protokol I2C. Na prepojenie modulu DS1307 RTC s ESP32 môžete použiť I2C kolíky (GPIO 22 (SCL) a GPIO 21 (SDA)) dosky ESP32. Čas môžete vytlačiť na konzole Arduino IDE alebo použiť akúkoľvek obrazovku, ako je OLED alebo I2C LCD na zobrazenie času. Modul DS1307 RTC je užitočné zariadenie na sledovanie času a dátumu v rôznych aplikáciách. Niektoré hlavné aplikácie zahŕňajú záznamníky údajov, digitálne hodiny a inteligentné hodinky.