ESP32 sat stvarnog vremena (RTC) koji koristi DS1307 i OLED zaslon

Esp32 Sat Stvarnog Vremena Rtc Koji Koristi Ds1307 I Oled Zaslon



ESP32 dolazi s ugrađenim RTC modulom, ali on radi samo kada ima struje. Ako nestane struje, sat će se resetirati i neće moći održavati točno vrijeme. Dakle, ako želite pratiti vrijeme ili kontrolirati bilo koji uređaj koji se temelji na vremenu, isprobajte DS1307 RTC senzor. Međutim, možda razmišljate o povezivanju rezervne baterije s vašom ESP32 pločom, ali to nije najbolji scenarij ako imate nestašicu struje. Najbolja alternativa je korištenje senzora DS1307 jer dolazi s ugrađenom baterijom koja može trajati najmanje godinu dana.

Kako bi stvari bile jasnije, ESP32 interni sat u stvarnom vremenu (RTC) može pratiti vrijeme čak i kada je glavni procesor isključen ili u dubokom snu. Možete koristiti ESP32 RTC za praćenje vremena bez velike potrošnje energije ili utjecaja na glavni procesor. Ali i dalje zahtijeva snagu za rad, ne toliko, ali minimalna količina energije potrebna je za rad unutarnjeg RTC-a.

S ovime nam preostaje samo rješenje korištenja vanjskog RTC modula. Pogledajmo korake povezivanja ESP32 ploče s DS1307 RTC modulom.







Sadržaj:

1. Što je RTC DS1307 modul

DS1307 je uređaj male snage koji može točno pratiti vrijeme i datum. Koristi binarno kodirani decimalni (BCD) format. Može vam reći vrijeme u detaljnom formatu kao što su sekunde, minute, pa čak i sati i dani. Također možete ispisati datum u punom formatu kao mjesec i godina. Također zna kada je prijestupna godina, do 2100. Za komunikaciju s DS1307 možete koristiti I2C protokol.





DS1307 ima ugrađenu bateriju koja ga može napajati oko godinu dana bez vanjskog izvora od 5V. Koristeći ovu pomoćnu bateriju, može zadržati vrijeme čak i kada je glavno napajanje isključeno. Također ima 56 bajta SRAM-a za pohranu nekih podataka. DS1307 je praktičan uređaj koji ima mnoge primjene u kombinaciji s Arduino ili ESP32 pločom. Na primjer, ti podaci mogu biti od pomoći u bilježenju podataka, alarmnim sustavima ili industrijskoj kontroli. Ako trebate pouzdano mjerenje vremena, DS1307 je izvrsna opcija.





Specifikacije modula RTC DS1307

Modul RTC DS1307 sastoji se od RTC IC, EEPROM-a, kristalnog oscilatora i držača baterije za pomoć.



Ispod su detalji ovih dijelova:

DS1307 RTC IC : DS1307 RTC IC je 8-pinski čip koji prati vrijeme i datum pomoću I2C protokola. Koristi vrlo malo energije, manje od 500nA. Može prikazati vrijeme u sekundama, minutama i satima, a datum u danima, mjesecima i godinama. Također se može prebacivati ​​između 24-satnog i 12-satnog formata.

24C32 EEPROM IC : 24C32 EEPROM IC je 32-bajtni čip iz Atmela koji pohranjuje postavke, vrijeme i datum. Također koristi I2C protokol.

32.768kHz kristal : Kristalni oscilator od 32,768 kHz osigurava taktnu frekvenciju za DS1307 RTC IC.

Držač baterije : Držač baterije drži CR2032 bateriju. To je 3V litijska dugmasta ćelija. Osigurava kontinuirano napajanje za DS1307 RTC IC.

Osiguranje senzora DS18B20 : Opskrba senzorom DS18B20 omogućuje vam lemljenje i korištenje senzora temperature DS18B20. Nije prethodno zalemljen. Možete zalemiti paket s otvorom i dobiti temperaturu iz DS pina modula.

Donji popis daje neke kratke specifikacije DS1307 RTC senzora:

  • Radni napon: 4,5–5,5 V, obično 5 V
  • Trenutna potrošnja : Manje od 1,5 mA
  • Točnost : 0–40 °C, ovisi o kristalu
  • Baterija : CR2032 (kovanica od 3 V)
  • Memorija : 56 bajta trajnog RAM-a
  • Sučelje : Dvožično (I2C) serijsko sučelje
  • Izlaz : 1 Hz izlazni pin
  • Programabilni pravougaoni izlaz : Troši manje od 500 nA u načinu rada s rezervnom baterijom
  • Otkrivanje nestanka struje : Automatsko otkrivanje nestanka struje i strujni krug prekidača
  • Krug za osjet snage : Može se automatski prebaciti na rezervno napajanje u slučaju nestanka struje
  • Naknada za prijestupnu godinu : Vrijedi do 2100. godine

RTC DS1307 Pinout modula

Modul ima nekoliko pinova s ​​različitim funkcijama.

  • VCC je pin koji treba istosmjerni napon između 3,3 V i 5,5 V za napajanje modula.
  • GND je pin za niski napon ili uzemljenje.
  • SDA i SCL su pinovi koji komuniciraju podatke i signale takta kroz I2C sabirnicu.
  • DS je pin koji mjeri temperaturu sa DS1307 senzorom ako ga imate na RTC modulu.
  • SQ je pin koji generira kvadratni signal s frekvencijom od 1 Hz, 4 kHz, 8 kHz ili 32 kHz, ovisno o tome kako ga programirate.
  • JEDAN je igla koja koristi bateriju od 3 V za održavanje točnog vremena kada je glavno napajanje isključeno.

2. Kako povezati RTC DS1307 i OLED zaslon s ESP32

Za povezivanje ESP32 s DS1307 i OLED zaslonom, možete koristiti ugrađene I2C pinove ESP32 ploče. I DS1307 i OLED zaslon su uređaji temeljeni na I2C. Zatim može komunicirati koristeći I2C master slave protokol preko I2C sabirnice.

Prije nego krenemo prema sučelju ESP32 s DS1307 i OLED zaslonom, prvo morate instalirati neke potrebne biblioteke.

Instaliranje potrebnih biblioteka

Trebat će vam dvije biblioteke, jedna za RTC modul i jedna za OLED zaslon. Koristeći OLED s RTC modulom, možete stvoriti nevjerojatne i interaktivne preglede sata. Ako nemate plan prikazivanja vremena na ekranu, možete preskočiti ovu instalaciju biblioteke.

Slijede dvije biblioteke koje će vam trebati:

  • RTClib (od Adafruita) je Arduino IDE biblioteka za postavljanje i dobivanje vremena iz RTC-a. Također pruža klase za manipuliranje datumima, vremenima i trajanjima. Pomoću ove biblioteke možete sučeliti i programirati module sata stvarnog vremena (RTC), kao što su DS1307 i DS3231.
  • S SD1306 (od Adafruita) je biblioteka za Arduino, pomoću koje možete sučeliti i programirati OLED zaslone s Arduinom ili bilo kojom drugom pločom mikrokontrolera.

Za preuzimanje i instaliranje obje ove biblioteke u Arduino IDE, prvo otvorite Voditelj knjižnice potražite biblioteku RTClib i kliknite Instalirati :

Dobit ćete opciju instaliranja samo biblioteke ili njezinih ovisnosti. Kliknite na Instaliraj sve gumb za potpuno instaliranje biblioteke. Na ovaj način nećete dobiti nikakvu pogrešku ako izmijenite kod koji ovisi o ovisnostima ove biblioteke.

Slično, potražite biblioteku SSD1306. Ova biblioteka je potrebna za OLED zaslon. Klik Instalirati nastaviti.

Ovaj put ćete također dobiti istu poruku potvrde. Klikni na Instaliraj sve opcija.

Sada su obje biblioteke za OLED i DS1307 instalirane i spremne za korištenje. Ali prije toga, prvo saznajte I2C adresu za OLED zaslon.

3. Pronalaženje I2C adrese OLED zaslona

I2C adresa je jedinstveni identifikator za svaki uređaj na I2C sabirnici. Omogućuje glavnom uređaju da komunicira s određenim podređenim uređajem slanjem podataka na njegovu adresu. Svrha I2C adrese je izbjegavanje sukoba i zabune između više uređaja na istoj sabirnici.

Da biste dobili adresu I2C uređaja, možete koristiti a jednostavna skica koja skenira autobus i ispisuje adrese uređaja koje pronađe. Alternativno, možete provjeriti podatkovnu tablicu uređaja kako biste vidjeli njegovu zadanu adresu ili adresu koja se može konfigurirati.

Ovdje u našem slučaju nakon pokretanja koda I2C skenera sljedeća I2C adresa OLED zaslona prikazuje se na Arduino IDE terminalu.

Većinu vremena postoji velika šansa da ćete i vi dobiti isto 0x3C adresa za vaš OLED ekran.

4. Povezivanje OLED i RTC DS1307 modula s ESP32

1. Spojite SDA i SCL pinove modula DS1307 i modula OLED zaslon na I2C pinove od ESP32. Obično, to su GPIO 21 i GPIO 22 , ali možete dodijeliti bilo koje druge pinove također u kodu ako je potrebno.

2. Spojite VCC i GND DS1307 i OLED zaslon na 3,3 V i GND pinove ESP32.

3. Umetnite CR2032 dugmastu bateriju u modul DS1307 kako biste osigurali rezervno napajanje za sat stvarnog vremena.

4. Učitajte primjer koda iz ovog vodiča na svoju ESP32 ploču. Izmijenite kod za prilagođene izlaze.

Nakon učitavanja, sat će početi od postavljenog vremena i prikazati vrijeme na OLED zaslonu.

5. Dijagram strujnog kruga

Dijagram strujnog kruga ESP32 s DS1307 je jednostavan, sa samo četiri žice koje je potrebno spojiti. Možete skratiti I2C žice SDA i SCL i OLED i DS1307 senzora. Slično, za napajanje oba ova senzora, mogu se koristiti 3V3 i GND pin ESP32 ploče. Također se možete napajati iz zasebnog izvora ako je potrebno.

Bilješka : Sigurno je napajati RTC DS1307 s pina od 3,3 V ESP32 ako trenutno ograničenje ESP32 nije prekoračeno. Ali ako želite biti na sigurnom mjestu, možete upotrijebiti zasebni izvor napajanja za RTC modul ili isprobati DS3231 senzor male snage čiji je radni raspon između 3,3 do 5,5 VDC.

Donja slika ilustrira povezivanje ESP32 s RTC DS1307 senzorom.

Slično, ako želite spojiti OLED zaslon za prikaz vremena, možete koristiti iste I2C pinove i pinove za napajanje ESP32 ploče.

6. Šifra

Koristeći donji kod, postavit ćemo trenutni datum i vrijeme na RTC. Nakon postavljanja vremena, kod će prikazati vrijeme na Arduino IDE terminalu. Prije nego što učitate kod, morate ga ažurirati svojim trenutnim datumom i vremenom.

#include 'RTClib.h'
RTC_DS1307 DS1307_RTC;
char Dani_tjedna [ 7 ] [ 12 ] = { 'Nedjelja' , 'Ponedjeljak' , 'Utorak' , 'Srijeda' , 'Četvrtak' , 'Petak' , 'Subota' } ;
void setup ( ) {
Serijski.početi ( 115200 ) ;
#ifndef ESP8266
dok ( ! Serijski ) ;
#završi ako
ako ( ! DS1307_RTC.početak ( ) ) {
Serijski.println ( 'Nije moguće pronaći RTC' ) ;
dok ( 1 ) ;
}
DS1307_RTC.podešavanje ( Datum vrijeme ( F ( __DATUM__ ) , F ( __VRIJEME__ ) ) ) ;
}
void petlja ( ) {
Datumvrijeme sada = DS1307_RTC.sada ( ) ;
Serijski.ispis ( sada.godina ( ) , PROS ) ;
Serijski.ispis ( '/' ) ;
Serijski.ispis ( sad.mjesec ( ) , PROS ) ;
Serijski.ispis ( '/' ) ;
Serijski.ispis ( sada.dan ( ) , PROS ) ;
Serijski.ispis ( '(' ) ;
Serijski.ispis ( radni_dani [ sada.dayOfTheWeek ( ) ] ) ;
Serijski.ispis ( ')' ) ;
Serijski.ispis ( sada.sat ( ) , PROS ) ;
Serijski.ispis ( ':' ) ;
Serijski.ispis ( sada.minuta ( ) , PROS ) ;
Serijski.ispis ( ':' ) ;
Serijski.ispis ( sada.drugi ( ) , PROS ) ;
Serijski.println ( ) ;
odgoditi ( 1000 ) ;
}

Ovaj kod koristi Knjižnica RTClib za sučelje s modulom sata stvarnog vremena DS1307 koji prati datum i vrijeme.

The postaviti funkcija pokrenuta inicijalizacijom brzine prijenosa podataka. Nakon toga smo unutar ovog odjeljka definirali funkciju sinkronizacije datuma i vremena računala sa DS1307 senzorom. Ovo će učitati vrijeme kompilacije koda na RTC senzor.

Možete koristiti petlja funkciju za dobivanje datuma i vremena od RTC-a. Zatim ga možete prikazati na serijskom monitoru ovako: godina/mjesec/dan (dan u tjednu) sat:minuta:sekunda. Ne zaboravite dodati odgodu od jedne sekunde nakon svake petlje, tako da kôd ne radi prebrzo.

Prikaz trenutnog vremena na OLED zaslonu

Za prikaz istog vremena na OLED ekranu, moramo dodati dodatni dio koda za OLED ekran. Jednostavno prenesite dani kod. Ovaj kod će prikazati trenutno vrijeme na vašem OLED ekranu.

Zapamtite, ovdje koristimo 0,96-inčni 128×64 I2C SSD OLED zaslonski modul. Ako koristite bilo koju drugu veličinu, promijenite kôd u skladu s tim. Također, provjerite I2C adresu i promijenite je u danom kodu. U našem slučaju imamo I2C adresu 0x3C za OLED zaslon.

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

Adafruit_SSD1306 zaslon ( SCREEN_WIDTH, SCREEN_HEIGHT, i Žica, - 1 ) ;
RTC_DS1307 RTC;
char dana [ 7 ] [ 12 ] = { 'Nedjelja' , 'Ponedjeljak' , 'Utorak' , 'Srijeda' , 'Četvrtak' , 'Petak' , 'Subota' } ;
void setup ( ) {
Serijski.početi ( 115200 ) ;
ako ( ! RTC.početak ( ) ) {
Serijski.println ( 'Nije moguće pronaći RTC' ) ;
dok ( 1 ) ;
}
RTC.prilagoditi ( Datum vrijeme ( F ( __DATUM__ ) , F ( __VRIJEME__ ) ) ) ;
ako ( ! prikazati.početi ( SSD1306_SWITCHCAPVCC, 0x3C ) ) {
Serijski.println ( F ( 'Dodjela SSD1306 nije uspjela' ) ) ;
za ( ;; ) ;
}
odgoditi ( 1000 ) ;
prikaz.clearDisplay ( ) ;
display.setTextSize ( 2 ) ;
display.setTextColor ( BIJELA ) ;
display.setCursor ( 30 , dvadeset ) ;
prikazati.println ( 'Linux' ) ;
prikaz.prikaz ( ) ;
odgoditi ( 3000 ) ;
prikaz.clearDisplay ( ) ;
}
void petlja ( ) {
Datumvrijeme sada = RTC.sada ( ) ;
prikaz.clearDisplay ( ) ;
display.setTextSize ( 2 ) ;
display.setCursor ( 0 , 0 ) ;
prikazati.ispisati ( sada.dan ( ) ) ;
prikazati.ispisati ( '/' ) ;
prikazati.ispisati ( sad.mjesec ( ) ) ;
prikazati.ispisati ( '/' ) ;
prikazati.ispisati ( sada.godina ( ) ) ;
prikazati.println ( dana [ sada.dayOfTheWeek ( ) ] ) ;
prikazati.println ( ' ' ) ;
display.setCursor ( 0 , 40 ) ;
ako ( sada.sat ( ) < 10 )
prikazati.ispisati ( '0' ) ;
prikazati.ispisati ( sada.sat ( ) ) ;
prikazati.ispisati ( ':' ) ;
ako ( sada.minuta ( ) < 10 )
prikazati.ispisati ( '0' ) ;
prikazati.ispisati ( sada.minuta ( ) ) ;
prikazati.ispisati ( ':' ) ;
ako ( sada.drugi ( ) < 10 )
prikazati.ispisati ( '0' ) ;
prikazati.println ( sada.drugi ( ) ) ;
prikaz.prikaz ( ) ;
}

Kod je započeo s bibliotekama koje smo instalirali za RTC i zaslon. Nakon toga definira veličinu zaslona i adresu prikaza. Inicijalizira niz s imenima dana u tjednu.

The postaviti dio počinje serijskom komunikacijom. Provjerava rade li RTC i zaslon ili ne. Nakon toga definirali smo tekst niza 'Linuxhint' koji će se prikazati 3 sekunde. Ovo je samo početna ili početna poruka, ovu poruku također možete izmijeniti svojim prilagođenim tekstom.

The petlja dobiva datum i vrijeme modula DS1307. Nakon toga briše zaslon i ispisuje datum i vrijeme u formatiranom obliku. Kod također dodaje početne nule satima, minutama i sekundama, u slučaju da su njihove vrijednosti manje od 10.

7. Hardver

Nakon učitavanja koda na ESP32 ploču, vidjet ćete sljedeći izlaz na OLED zaslonu. Za hardver smo koristili OLED ekran i I2C RTC DS1307 modul. Koristi se ESP32 ploča s 30 pinova. Možete eksperimentirati i s bilo kojom drugom ESP32 pločom, ali provjerite jeste li pravilno spojili I2C pinove.

Zaključak

RTC DS1307 ima 56-bajtni SRAM s podrškom za pričuvnu bateriju. Radi se o 8-pinskom uređaju koji koristi I2C komunikacijski protokol. Za povezivanje DS1307 RTC modula s ESP32, možete koristiti I2C pinove (GPIO 22 (SCL) i GPIO 21 (SDA)) ESP32 ploče. Možete ispisati vrijeme na Arduino IDE konzoli ili koristiti bilo koji zaslon poput OLED ili I2C LCD za prikaz vremena. DS1307 RTC modul je koristan uređaj za praćenje vremena i datuma u raznim aplikacijama. Neke glavne aplikacije uključuju zapisivače podataka, digitalne satove i pametne satove.