ESP32 Hodiny reálného času (RTC) využívající DS1307 a OLED displej

Esp32 Hodiny Realneho Casu Rtc Vyuzivajici Ds1307 A Oled Displej



ESP32 je dodáván s vestavěným modulem RTC, který však funguje pouze při napájení. Pokud dojde k výpadku napájení, hodiny se resetují a nebudou moci udržovat správný čas. Pokud tedy chcete sledovat čas nebo ovládat jakékoli zařízení založené na čase, vyzkoušejte snímač DS1307 RTC. Můžete však uvažovat o připojení záložní baterie k desce ESP32, ale to není ten nejlepší scénář, pokud máte nedostatek energie. Nejlepší alternativou je použití senzoru DS1307, protože je dodáván s vestavěnou baterií, která vydrží minimálně rok.

Aby bylo vše jasné, interní hodiny reálného času (RTC) ESP32 mohou sledovat čas, i když je hlavní procesor vypnutý nebo v hlubokém spánku. Pomocí ESP32 RTC můžete sledovat čas, aniž byste spotřebovávali mnoho energie nebo ovlivnili hlavní procesor. Ale ke svému chodu stále vyžaduje energii, ne tolik, ale pro chod interního RTC je vyžadováno minimální množství energie.

S tímto nám tedy zbývá pouze řešení pomocí externího RTC modulu. Pojďme se podívat na kroky propojení desky ESP32 s modulem DS1307 RTC.







Obsah:

1. Co je modul RTC DS1307

DS1307 je zařízení s nízkou spotřebou, které dokáže přesně sledovat čas a datum. Používá binárně kódovaný desítkový formát (BCD). Může vám sdělit čas v podrobném formátu, jako jsou sekundy, minuty a dokonce hodiny a dny. Můžete také vytisknout datum v plném formátu, jako je měsíc a rok. Také ví, kdy je přestupný rok, až do roku 2100. Ke komunikaci s DS1307 můžete použít protokol I2C.





DS1307 má vestavěnou baterii, která jej dokáže napájet zhruba rok bez externího 5V zdroje. Pomocí této záložní baterie dokáže uchovat čas, i když je hlavní napájení vypnuté. Má také 56 bajtů SRAM pro uložení některých dat. DS1307 je šikovné zařízení, které má v kombinaci s deskou Arduino nebo ESP32 mnoho aplikací. Tato data mohou být užitečná například pro záznam dat, poplašné systémy nebo průmyslové řízení. Pokud potřebujete spolehlivé měření času, DS1307 je skvělá volba.





Specifikace modulu RTC DS1307

Modul RTC DS1307 se skládá z RTC IC, EEPROM, krystalového oscilátoru a držáku baterie pro zálohování.



Níže jsou uvedeny podrobnosti o těchto částech:

DS1307 RTC IC : DS1307 RTC IC je 8pinový čip, který sleduje čas a datum pomocí protokolu I2C. Spotřebovává velmi málo energie, méně než 500 nA. Může zobrazovat čas v sekundách, minutách a hodinách a datum ve dnech, měsících a letech. Dokáže také přepínat mezi 24hodinovým a 12hodinovým formátem.

IC 24C32 EEPROM : 24C32 EEPROM IC je 32bajtový čip od společnosti Atmel, který ukládá nastavení, čas a datum. Používá také protokol I2C.

32,768 kHz krystal : Krystalový oscilátor 32,768 kHz poskytuje hodinovou frekvenci pro DS1307 RTC IC.

Držák baterie : Držák baterie pojme baterii CR2032. Jedná se o 3V lithiový knoflíkový článek. Poskytuje nepřetržité napájení DS1307 RTC IC.

Poskytování snímače DS18B20 : Poskytnutí senzoru DS18B20 vám umožňuje pájet a používat teplotní senzor DS18B20. Není předpájená. Můžete připájet obal s průchozími otvory a získat teplotu z kolíku DS modulu.

Níže uvedený seznam uvádí některé rychlé specifikace snímače DS1307 RTC:

  • Provozní napětí: 4,5–5,5 V, obvykle 5 V
  • Aktuální spotřeba : Méně než 1,5 mA
  • Přesnost : 0–40 °C, závisí na krystalu
  • baterie : CR2032 (3 V mince)
  • Paměť : 56 bajtů energeticky nezávislé paměti RAM
  • Rozhraní : Dvoudrátové (I2C) sériové rozhraní
  • Výstup : 1 Hz výstupní kolík
  • Programovatelný obdélníkový výstup : V režimu záložní baterie spotřebuje méně než 500 nA
  • Detekce výpadku napájení : Automatická detekce výpadku napájení a spínací obvody
  • Výkon-snímací obvod : Může se automaticky přepnout na záložní zdroj při nedostatku energie
  • Náhrada za přestupný rok : Platné do roku 2100

Pinout modulu RTC DS1307

Modul má několik pinů s různými funkcemi.

  • VCC je kolík, který potřebuje pro napájení modulu stejnosměrné napětí mezi 3,3 V a 5,5 V.
  • GND je kolík pro nízké napětí nebo zem.
  • SDA a SCL jsou piny komunikující data a hodinové signály přes I2C sběrnici.
  • DS je kolík, který měří teplotu pomocí senzoru DS1307, pokud jej máte na modulu RTC.
  • SQ je kolík, který generuje obdélníkový signál s frekvencí 1 Hz, 4 kHz, 8 kHz nebo 32 kHz, v závislosti na tom, jak jej naprogramujete.
  • JEDEN je kolík, který používá 3V baterii k udržení přesného času, když je hlavní napájení vypnuto.

2. Jak propojit RTC DS1307 a OLED displej s ESP32

Pro propojení ESP32 s DS1307 a OLED displejem můžete použít vestavěné I2C piny desky ESP32. DS1307 i OLED displej jsou zařízení na bázi I2C. Poté může komunikovat pomocí I2C master slave protokolu přes I2C sběrnici.

Než přejdeme k propojení ESP32 s DS1307 a OLED displejem, musíte nejprve nainstalovat některé požadované knihovny.

Instalace požadovaných knihoven

Budete potřebovat dvě knihovny, jednu pro modul RTC a jednu pro OLED displej. Pomocí OLED s modulem RTC můžete vytvářet úžasné a interaktivní náhledy hodin. Pokud nemáte v plánu zobrazovat čas na obrazovce, můžete tuto instalaci knihovny přeskočit.

Níže jsou uvedeny dvě knihovny, které budete potřebovat:

  • RTClib (od Adafruit) je knihovna Arduino IDE pro nastavení a získání času z RTC. Poskytuje také třídy pro manipulaci s daty, časy a trváním. Pomocí této knihovny můžete vytvářet rozhraní a programovat moduly hodin reálného času (RTC), jako jsou DS1307 a DS3231.
  • S SD1306 (od Adafruit) je knihovna pro Arduino, pomocí které můžete propojit a programovat OLED displeje s Arduinem nebo jakoukoli jinou deskou mikrokontroléru.

Chcete-li stáhnout a nainstalovat obě tyto knihovny v Arduino IDE, nejprve otevřete Správce knihovny vyhledejte knihovnu RTClib a klikněte Nainstalujte :

Získáte možnost nainstalovat pouze knihovnu nebo její závislosti. Klikněte na Instalovat vše tlačítko pro kompletní instalaci knihovny. Tímto způsobem nezískáte žádnou chybu, pokud upravíte kód, který závisí na závislostech této knihovny.

Podobně vyhledejte knihovnu SSD1306. Tato knihovna je potřebná pro OLED displej. Klikněte Nainstalujte pokračovat.

Tentokrát také obdržíte stejnou potvrzovací zprávu. Klikněte na Instalovat vše volba.

Nyní jsou obě knihovny pro OLED a DS1307 nainstalovány a připraveny k použití. Předtím si ale nejprve zjistěte I2C adresu pro OLED displej.

3. Nalezení I2C adresy OLED displeje

I2C adresa je jedinečný identifikátor pro každé zařízení na I2C sběrnici. Umožňuje hlavnímu zařízení komunikovat s konkrétním podřízeným zařízením odesíláním dat na jeho adresu. Účelem I2C adresy je zabránit konfliktům a záměnám mezi více zařízeními na stejné sběrnici.

Chcete-li získat adresu I2C zařízení, můžete použít a jednoduchý náčrt, který naskenuje sběrnici a vytiskne adresy zařízení, která najde. Případně se můžete podívat na datový list zařízení a zobrazit jeho výchozí nebo konfigurovatelnou adresu.

Zde v našem případě po spuštění kódu skeneru I2C se na terminálu Arduino IDE zobrazí následující I2C adresa OLED obrazovky.

Většinou je vysoká šance, že dostanete totéž 0x3C adresu vaší OLED obrazovky.

4. Propojení modulu OLED a RTC DS1307 s ESP32

1. Připojte kolíky SDA a SCL modulu DS1307 a modulu DS1307 OLED displej na I2C piny ESP32. Obvykle, jedná se o GPIO 21 a GPIO 22 , ale v případě potřeby můžete v kódu přiřadit jakékoli jiné piny.

2. Připojte VCC a GND DS1307 a OLED displej k 3,3V a GND kolíkům ESP32.

3. Vložte knoflíkovou baterii CR2032 do modulu DS1307, abyste získali záložní napájení pro hodiny reálného času.

4. Nahrajte ukázkový kód z tohoto návodu na vaši desku ESP32. Upravte kód pro vlastní výstupy.

Po nahrání se hodiny spustí od nastaveného času a zobrazí čas na OLED obrazovce.

5. Schéma zapojení

Schéma zapojení ESP32 s DS1307 je jednoduché, pouze se čtyřmi vodiči, které je třeba připojit. Můžete zkrátit I2C vodiče SDA a SCL obou senzorů OLED a DS1307. Podobně pro napájení obou těchto senzorů lze použít pin 3V3 a GND desky ESP32. V případě potřeby můžete také napájet ze samostatného zdroje.

Poznámka : Je bezpečné napájet RTC DS1307 z 3,3V pinu ESP32, pokud není překročen proudový limit ESP32. Pokud však chcete být na bezpečném místě, můžete buď použít samostatný zdroj napájení pro modul RTC, nebo vyzkoušet nízkoenergetický senzor DS3231, jehož provozní rozsah je mezi 3,3 až 5,5 V DC.

Níže uvedený obrázek ilustruje připojení ESP32 se snímačem RTC DS1307.

Podobně, pokud chcete připojit OLED obrazovku pro zobrazení času, můžete použít stejné I2C piny a napájecí piny desky ESP32.

6. Kód

Pomocí níže uvedeného kódu nastavíme aktuální datum a čas na RTC. Po nastavení času kód zobrazí čas na terminálu Arduino IDE. Než kód nahrajete, musíte jej aktualizovat aktuálním datem a časem.

#include 'RTClib.h'
RTC_DS1307 DS1307_RTC;
char Week_days [ 7 ] [ 12 ] = { 'Neděle' , 'Pondělí' , 'Úterý' , 'Středa' , 'Čtvrtek' , 'Pátek' , 'Sobota' } ;
neplatné nastavení ( ) {
Serial.begin ( 115200 ) ;
#ifndef ESP8266
zatímco ( ! Seriál ) ;
#endif
-li ( ! DS1307_RTC.begin ( ) ) {
Serial.println ( 'Nelze najít RTC' ) ;
zatímco ( 1 ) ;
}
DS1307_RTC.upravit ( Čas schůzky ( F ( __DATUM__ ) , F ( __ČAS__ ) ) ) ;
}
prázdná smyčka ( ) {
DateTime now = DS1307_RTC.now ( ) ;
Sériový.tisk ( nyní.rok ( ) , DEC ) ;
Sériový.tisk ( '/' ) ;
Sériový.tisk ( nyní.měsíc ( ) , DEC ) ;
Sériový.tisk ( '/' ) ;
Sériový.tisk ( nyní.den ( ) , DEC ) ;
Sériový.tisk ( '(' ) ;
Sériový.tisk ( Week_days [ nyní.den v týdnu ( ) ] ) ;
Sériový.tisk ( ')' ) ;
Sériový.tisk ( teď.hodina ( ) , DEC ) ;
Sériový.tisk ( ':' ) ;
Sériový.tisk ( teď.minuta ( ) , DEC ) ;
Sériový.tisk ( ':' ) ;
Sériový.tisk ( teď.druhý ( ) , DEC ) ;
Serial.println ( ) ;
zpoždění ( 1000 ) ;
}

Tento kód používá Knihovna RTClib pro rozhraní s modulem hodin reálného času DS1307, který sleduje datum a čas.

The založit funkce začala inicializací přenosové rychlosti. Poté jsme v této sekci definovali funkci pro synchronizaci data a času počítače se senzorem DS1307. Tím se nahraje čas kompilace kódu do snímače RTC.

Můžete použít smyčka funkce pro získání data a času z RTC. Poté jej můžete zobrazit na sériovém monitoru takto: rok/měsíc/den (den v týdnu) hodina:minuta:sekunda. Nezapomeňte po každé smyčce přidat jednosekundové zpoždění, aby kód neběžel příliš rychle.

Zobrazení aktuálního času na OLED displeji

Pro zobrazení stejného času na OLED obrazovce musíme přidat další kódovou část pro OLED obrazovku. Jednoduše nahrajte daný kód. Tento kód zobrazí aktuální čas na vaší OLED obrazovce.

Pamatujte, že zde používáme 0,96palcový 128×64 I2C SSD OLED zobrazovací modul. Pokud používáte jinou velikost, upravte odpovídajícím způsobem kód. Zkontrolujte také I2C adresu a upravte ji v daném kódu. V našem případě máme I2C adresu 0x3C pro 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 dny [ 7 ] [ 12 ] = { 'Neděle' , 'Pondělí' , 'Úterý' , 'Středa' , 'Čtvrtek' , 'Pátek' , 'Sobota' } ;
neplatné nastavení ( ) {
Serial.begin ( 115200 ) ;
-li ( ! RTC.začátek ( ) ) {
Serial.println ( 'Nelze najít RTC' ) ;
zatímco ( 1 ) ;
}
RTC.upravit ( Čas schůzky ( F ( __DATUM__ ) , F ( __ČAS__ ) ) ) ;
-li ( ! zobrazit.začít ( SSD1306_SWITCHCAPVCC, 0x3C ) ) {
Serial.println ( F ( 'Přidělení SSD1306 se nezdařilo' ) ) ;
pro ( ;; ) ;
}
zpoždění ( 1000 ) ;
display.clearDisplay ( ) ;
display.setTextSize ( 2 ) ;
display.setTextColor ( BÍLÝ ) ;
display.setCursor ( 30 , dvacet ) ;
display.println ( 'linux' ) ;
zobrazit.zobrazit ( ) ;
zpoždění ( 3000 ) ;
display.clearDisplay ( ) ;
}
prázdná smyčka ( ) {
DateTime now = RTC.now ( ) ;
display.clearDisplay ( ) ;
display.setTextSize ( 2 ) ;
display.setCursor ( 0 , 0 ) ;
zobrazit.tisk ( nyní.den ( ) ) ;
zobrazit.tisk ( '/' ) ;
zobrazit.tisk ( nyní.měsíc ( ) ) ;
zobrazit.tisk ( '/' ) ;
zobrazit.tisk ( nyní.rok ( ) ) ;
display.println ( dní [ nyní.den v týdnu ( ) ] ) ;
display.println ( ' ' ) ;
display.setCursor ( 0 , 40 ) ;
-li ( teď.hodina ( ) < 10 )
zobrazit.tisk ( '0' ) ;
zobrazit.tisk ( teď.hodina ( ) ) ;
zobrazit.tisk ( ':' ) ;
-li ( teď.minuta ( ) < 10 )
zobrazit.tisk ( '0' ) ;
zobrazit.tisk ( teď.minuta ( ) ) ;
zobrazit.tisk ( ':' ) ;
-li ( teď.druhý ( ) < 10 )
zobrazit.tisk ( '0' ) ;
display.println ( teď.druhý ( ) ) ;
zobrazit.zobrazit ( ) ;
}

Kód začal s knihovnami, které jsme nainstalovali pro RTC a displej. Poté definuje velikost obrazovky a adresu zobrazení. Inicializuje pole s názvy dnů v týdnu.

The založit část začíná sériovou komunikací. Kontroluje, zda RTC a displej fungují nebo ne. Poté jsme definovali textový řetězec „Linuxhint“, který se zobrazí na 3 sekundy. Toto je pouze úvodní nebo spouštěcí zpráva, tuto zprávu můžete také upravit pomocí vlastního textu.

The smyčka funkce získá datum a čas modulu DS1307. Poté vymaže displej a vytiskne datum a čas ve formátovaném formátu. Kód také přidává úvodní nuly k hodinám, minutám a sekundám, pokud jsou jejich hodnoty menší než 10.

7. Hardware

Po nahrání kódu na desku ESP32 uvidíte na OLED obrazovce následující výstup. Pro hardware jsme použili OLED obrazovku a modul I2C RTC DS1307. Je použita deska ESP32 s 30 piny. Můžete také experimentovat s jakoukoli jinou deskou ESP32, ale ujistěte se, že jste správně zapojili I2C piny.

Závěr

RTC DS1307 má 56bajtovou SRAM s podporou záložní baterie. Jedná se o 8pinové zařízení, které využívá komunikační protokol I2C. K propojení modulu DS1307 RTC s ESP32 můžete použít I2C piny (GPIO 22 (SCL) a GPIO 21 (SDA)) desky ESP32. Čas můžete vytisknout na konzoli Arduino IDE nebo použít libovolnou obrazovku, jako je OLED nebo I2C LCD k zobrazení času. Modul DS1307 RTC je užitečné zařízení pro sledování času a data v různých aplikacích. Některé hlavní aplikace zahrnují dataloggery, digitální hodiny a chytré hodinky.