ESP32 valós idejű óra (RTC) DS1307 és OLED kijelző használatával

Esp32 Valos Ideju Ora Rtc Ds1307 Es Oled Kijelzo Hasznalataval



Az ESP32 beépített RTC modullal érkezik, de ez csak akkor működik, ha van áram. Ha áramkimaradás történik, az óra visszaáll, és nem tudja tartani a pontos időt. Ha tehát nyomon szeretné követni az időt, vagy bármilyen időalapú eszközt szeretne vezérelni, próbálja ki a DS1307 RTC érzékelőt. Lehetséges azonban, hogy tartalék akkumulátort csatlakoztat az ESP32 kártyához, de ez nem a legjobb forgatókönyv, ha áramhiány van. A legjobb alternatíva a DS1307 érzékelő használata, mivel beépített akkumulátorral érkezik, amely minimum egy évig bírja.

A dolgok tisztázása érdekében az ESP32 belső valós idejű órája (RTC) képes nyomon követni az időt még akkor is, ha a fő processzor ki van kapcsolva, vagy mély alvó állapotban van. Az ESP32 RTC segítségével nyomon követheti az időt anélkül, hogy sok energiát fogyasztana, és nem befolyásolná a fő processzort. De továbbra is áramot igényel a működéshez, nem annyi, de minimális teljesítmény szükséges a belső RTC működéséhez.

Így ezzel már csak a külső RTC modul használatának megoldása maradt. Nézzük meg az ESP32 kártya és a DS1307 RTC modul összekapcsolásának lépéseit.







Tartalom:

1. Mi az RTC DS1307 modul?

A DS1307 egy alacsony fogyasztású eszköz, amely képes pontosan nyomon követni az időt és a dátumot. Binárisan kódolt decimális (BCD) formátumot használ. Részletes formátumban, például másodpercekben, percekben, sőt órákban és napokban is meg tudja mondani az időt. A dátumot teljes formátumban, például hónapban és évben is kinyomtathatja. Azt is tudja, hogy mikor van szökőév, 2100-ig. A DS1307-tel való kommunikációhoz használhatja az I2C protokollt.





A DS1307 beépített akkumulátorral rendelkezik, amely körülbelül egy évig képes táplálni külső 5 V-os forrás nélkül. Ezzel a tartalék akkumulátorral akkor is megőrzi az időt, ha a főkapcsoló ki van kapcsolva. Ezenkívül 56 bájt SRAM-mal rendelkezik bizonyos adatok tárolására. A DS1307 egy praktikus eszköz, amely Arduino vagy ESP32 kártyával kombinálva számos alkalmazást kínál. Ezek az adatok például hasznosak lehetnek adatnaplózásban, riasztórendszerekben vagy ipari vezérlésben. Ha megbízható időmérésre van szüksége, a DS1307 nagyszerű választás.





Az RTC DS1307 modul műszaki adatai

Az RTC DS1307 modul az RTC IC-ből, egy EEPROM-ból, egy kristályoszcillátorból és egy elemtartóból áll.



Az alábbiakban ezeknek a részeknek a részletei:

DS1307 RTC IC : A DS1307 RTC IC egy 8 tűs chip, amely az I2C protokoll segítségével nyomon követi az időt és a dátumot. Nagyon kevés áramot használ, kevesebb, mint 500 nA. Képes megjeleníteni az időt másodpercben, percben és órában, a dátumot pedig napokban, hónapokban és években. A 24 órás és 12 órás formátumok között is válthat.

24C32 EEPROM IC : A 24C32 EEPROM IC egy 32 bájtos Atmel chip, amely a beállításokat, az időt és a dátumot tárolja. Ezenkívül az I2C protokollt használja.

32,768 kHz kristály : A 32,768 kHz-es kristályoszcillátor biztosítja a DS1307 RTC IC órajelét.

Akkumulátor tartó : Az elemtartóban egy CR2032 típusú elem található. Ez egy 3 V-os lítium érmeelem. Folyamatos tápellátást biztosít a DS1307 RTC IC számára.

DS18B20 érzékelő ellátás : A DS18B20 érzékelő lehetővé teszi a DS18B20 hőmérséklet-érzékelő forrasztását és használatát. Nincs előforrasztva. Forraszthatja az átmenő furatcsomagot, és a hőmérsékletet a modul DS tűjéről kapja.

Az alábbi lista néhány gyors specifikációt tartalmaz a DS1307 RTC érzékelőről:

  • Üzemi feszültség: 4,5-5,5 V, jellemzően 5 V
  • A jelenlegi felhasználás : Kevesebb, mint 1,5 mA
  • Pontosság : 0-40 °C, kristálytól függően
  • Akkumulátor : CR2032 (3 V-os érme)
  • memória : 56 bájt nem felejtő RAM
  • Felület : Kétvezetékes (I2C) soros interfész
  • Kimenet : 1 Hz kimeneti érintkező
  • Programozható négyszöghullám kimenet : 500 nA-nél kevesebbet fogyaszt akkumulátoros tartalék üzemmódban
  • Áramkimaradás észlelése : Automatikus áramkimaradás-érzékelő és kapcsolóáramkör
  • Teljesítményérzékelő áramkör : Automatikusan átkapcsolhat tartalék tápellátásra áramhiány esetén
  • Szökőévi kompenzáció : 2100-ig érvényes

RTC DS1307 modul kivezetés

A modulnak több tűje van, különböző funkciókkal.

  • VCC az a tű, amelynek 3,3 V és 5,5 V közötti egyenfeszültségre van szüksége a modul táplálásához.
  • GND az alacsony feszültség vagy a test érintkezője.
  • SDA és SCL azok a tűk, amelyek adatokat és órajeleket kommunikálnak az I2C buszon keresztül.
  • DS az a tű, amely méri a hőmérsékletet a DS1307 érzékelővel, ha van ilyen az RTC modulon.
  • SQ az a tű, amely a programozás módjától függően 1 Hz, 4 kHz, 8 kHz vagy 32 kHz frekvenciájú négyszögjelet generál.
  • EGY az a tű, amely 3 V-os elemet használ az idő pontos megőrzésére, amikor a főkapcsoló ki van kapcsolva.

2. Az RTC DS1307 és az OLED kijelző összekapcsolása ESP32-vel

Az ESP32 DS1307 és OLED kijelző összekapcsolásához használhatja az ESP32 kártya beépített I2C érintkezőit. A DS1307 és az OLED kijelző is I2C alapú eszközök. Ezután az I2C master slave protokoll használatával kommunikálhat az I2C buszon keresztül.

Mielőtt az ESP32 DS1307-tel és OLED kijelzővel való interfésze felé haladnánk, először telepítenie kell néhány szükséges könyvtárat.

A szükséges könyvtárak telepítése

Két könyvtárra lesz szüksége, egy az RTC modulhoz és egy az OLED kijelzőhöz. Az OLED és az RTC modul használatával lenyűgöző és interaktív óraelőnézeteket készíthet. Ha nem tervezi az időt a képernyőn megjeleníteni, akkor kihagyhatja a könyvtár telepítését.

A következő két könyvtárra lesz szüksége:

  • RTClib (Az Adafruittól) egy Arduino IDE-könyvtár, amely beállíthatja az RTC-t, és időt kérhet tőle. Ezenkívül osztályokat biztosít a dátumok, időpontok és időtartamok manipulálásához. Ennek a könyvtárnak a segítségével interfésülheti és programozhatja a valós idejű óra (RTC) modulokat, mint például a DS1307 és DS3231.
  • S SD1306 (Adafruit) egy Arduino-könyvtár, amelynek segítségével az OLED-kijelzőket illesztheti és programozhatja Arduino-val vagy bármilyen más mikrovezérlő kártyával.

Mindkét könyvtár letöltéséhez és telepítéséhez az Arduino IDE-ben először nyissa meg a Könyvtárvezető keresse meg az RTClib könyvtárat, és kattintson rá Telepítés :

Lehetőséget kap arra, hogy csak a könyvtárat vagy annak függőségeit telepítse. Kattints a Az összes telepítése gombot a könyvtár teljes telepítéséhez. Így nem fog hibaüzenetet kapni, ha módosítja a kódot, amely a könyvtár függőségeitől függ.

Hasonlóképpen keresse meg az SSD1306 könyvtárat. Ez a könyvtár szükséges egy OLED-kijelzőhöz. Kattintson Telepítés A folytatáshoz.

Ezúttal is ugyanazt a megerősítő üzenetet kapja. Kattintson a Az összes telepítése választási lehetőség.

Most már mind az OLED, mind a DS1307 könyvtára telepítve van, és használatra kész. De előtte először meg kell találnia az OLED-kijelző I2C-címét.

3. Az OLED-kijelző I2C-címének megkeresése

Az I2C cím az I2C buszon lévő minden egyes eszköz egyedi azonosítója. Lehetővé teszi, hogy a mester eszköz kommunikáljon egy adott szolga eszközzel azáltal, hogy adatokat küld annak címére. Az I2C-cím célja, hogy elkerülje az ugyanazon a buszon lévő több eszköz közötti ütközéseket és összetévesztéseket.

Egy I2C eszköz címének lekéréséhez használhatja a egyszerű vázlat, amely beolvassa a buszt és kiírja a címeket az általa talált eszközök közül. Alternatív megoldásként ellenőrizheti az eszköz adatlapját, hogy megnézze annak alapértelmezett vagy konfigurálható címét.

Esetünkben az I2C szkenner kód futtatása után az OLED képernyő alábbi I2C címe jelenik meg az Arduino IDE terminálon.

Legtöbbször nagy az esélye, hogy Ön is megkapja ugyanazt 0x3C az OLED képernyő címét.

4. Az OLED és az RTC DS1307 modul összekapcsolása az ESP32-vel

1. Csatlakoztassa mind a DS1307 modul SDA és SCL érintkezőit, mind a OLED kijelző az I2C érintkezőkhöz az ESP32. Általában, ezek a GPIO 21 és a GPIO 22 , de szükség esetén a kódban bármilyen más PIN-kódot is hozzárendelhet.

2. Csatlakoztassa a DS1307 VCC-jét és GND-jét, valamint az OLED-kijelzőt az ESP32 3,3 V-os és GND érintkezőihez.

3. Helyezzen be egy CR2032 gombelemet a DS1307 modulba, hogy tartalék tápellátást biztosítson a valós idejű óra számára.

4. Töltse fel az oktatóanyag példakódját az ESP32 kártyára. Módosítsa az egyéni kimenetek kódját.

A feltöltés után egy óra a beállított időponttól indul, és az OLED képernyőn jeleníti meg az időt.

5. Áramköri diagram

Az ESP32 kapcsolási rajza a DS1307-tel egyszerű, mindössze négy vezetéket kell csatlakoztatni. Mind az OLED, mind a DS1307 érzékelők SDA és SCL I2C vezetékeit lerövidítheti. Hasonlóképpen mindkét érzékelő tápellátására az ESP32 kártya 3V3 és GND érintkezője használható. Szükség esetén külön forrásból is táplálhatja.

jegyzet : Az RTC DS1307 áramellátása biztonságos az ESP32 3,3 V-os érintkezőjéről, ha az ESP32 áramkorlátját nem lépi túl. Ha azonban biztonságos helyen szeretne lenni, használhat külön áramforrást az RTC modulhoz, vagy próbálja ki az alacsony fogyasztású DS3231 érzékelőt, amelynek működési tartománya 3,3 és 5,5 VDC között van.

Az alábbi kép az ESP32 és az RTC DS1307 érzékelő csatlakoztatását mutatja be.

Hasonlóképpen, ha csatlakoztatni szeretné az OLED képernyőt az idő megjelenítéséhez, használhatja ugyanazokat az I2C érintkezőket és az ESP32 kártya táp érintkezőit.

6. Kód

Az alábbi kód segítségével beállítjuk az aktuális dátumot és időt az RTC-n. Az idő beállítása után a kód megjeleníti az időt az Arduino IDE terminálon. A kód feltöltése előtt frissítenie kell az aktuális dátummal és időponttal.

#include 'RTClib.h'
RTC_DS1307 DS1307_RTC;
char Week_days [ 7 ] [ 12 ] = { 'Vasárnap' , 'Hétfő' , 'Kedd' , 'Szerda' , 'Csütörtök' , 'Péntek' , 'Szombat' } ;
üres beállítás ( ) {
Serial.begin ( 115200 ) ;
#ifndef ESP8266
míg ( ! Sorozatszám ) ;
#endif
ha ( ! DS1307_RTC.begin ( ) ) {
Serial.println ( 'Nem találtam RTC-t' ) ;
míg ( 1 ) ;
}
DS1307_RTC.adjust ( Dátum idő ( F ( __DÁTUM__ ) , F ( __IDŐ__ ) ) ) ;
}
üres hurok ( ) {
DateTime most = DS1307_RTC.now ( ) ;
Serial.print ( most.év ( ) , DEC ) ;
Serial.print ( '/' ) ;
Serial.print ( most.hónap ( ) , DEC ) ;
Serial.print ( '/' ) ;
Serial.print ( most nap ( ) , DEC ) ;
Serial.print ( '(' ) ;
Serial.print ( Hétköznapok [ most.dayOfTheWeek ( ) ] ) ;
Serial.print ( ')' ) ;
Serial.print ( most.óra ( ) , DEC ) ;
Serial.print ( ':' ) ;
Serial.print ( most.perc ( ) , DEC ) ;
Serial.print ( ':' ) ;
Serial.print ( most.második ( ) , DEC ) ;
Serial.println ( ) ;
késleltetés ( 1000 ) ;
}

Ez a kód a RTClib könyvtár DS1307 valós idejű óramodullal való interfészhez, amely nyomon követi a dátumot és az időt.

A beállít funkció az adatátviteli sebesség inicializálásával indult. Ezt követően ebben a részben meghatároztuk azt a funkciót, amely a számítógép dátumát és idejét szinkronizálja a DS1307 érzékelővel. Ez feltölti a kód összeállításának idejét az RTC érzékelőre.

Használhatja a hurok funkció a dátum és az idő lekéréséhez az RTC-től. Ezután a következőképpen jelenítheti meg a soros monitoron: év/hónap/nap (a hét napja) óra:perc:másodperc. Ne felejtsen el egy másodperces késleltetést hozzáadni minden ciklus után, hogy a kód ne fusson túl gyorsan.

Jelenítse meg az aktuális időt az OLED kijelzőn

Ahhoz, hogy az OLED képernyőn ugyanazt az időt jelenítsük meg, egy extra kódrészt kell hozzáadnunk az OLED képernyőhöz. Egyszerűen töltse fel a megadott kódot. Ez a kód megjeleníti az aktuális időt az OLED képernyőn.

Ne feledje, itt a 0,96 hüvelykes 128 × 64 I2C SSD OLED kijelző modult használjuk. Ha más méretet használ, módosítsa a kódot ennek megfelelően. Ezenkívül ellenőrizze az I2C címet, és módosítsa a megadott kódban. Esetünkben 0x3C I2C-címünk van az OLED képernyőhöz.

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

Adafruit_SSD1306 kijelző ( SCREEN_WIDTH, SCREEN_HEIGHT, & Drót, - 1 ) ;
RTC_DS1307 RTC;
char napok [ 7 ] [ 12 ] = { 'Vasárnap' , 'Hétfő' , 'Kedd' , 'Szerda' , 'Csütörtök' , 'Péntek' , 'Szombat' } ;
üres beállítás ( ) {
Serial.begin ( 115200 ) ;
ha ( ! RTC.begin ( ) ) {
Serial.println ( 'Nem találtam RTC-t' ) ;
míg ( 1 ) ;
}
RTC.beállítani ( Dátum idő ( F ( __DÁTUM__ ) , F ( __IDŐ__ ) ) ) ;
ha ( ! display.begin ( SSD1306_SWITCHCAPVCC, 0x3C ) ) {
Serial.println ( F ( 'SSD1306 allokáció sikertelen' ) ) ;
számára ( ;; ) ;
}
késleltetés ( 1000 ) ;
display.clearDisplay ( ) ;
display.setTextSize ( 2 ) ;
display.setTextColor ( FEHÉR ) ;
display.setCursor ( 30 , húsz ) ;
display.println ( 'Linux' ) ;
display.display ( ) ;
késleltetés ( 3000 ) ;
display.clearDisplay ( ) ;
}
üres hurok ( ) {
DateTime most = RTC.now ( ) ;
display.clearDisplay ( ) ;
display.setTextSize ( 2 ) ;
display.setCursor ( 0 , 0 ) ;
display.print ( most nap ( ) ) ;
display.print ( '/' ) ;
display.print ( most.hónap ( ) ) ;
display.print ( '/' ) ;
display.print ( most.év ( ) ) ;
display.println ( napok [ most.dayOfTheWeek ( ) ] ) ;
display.println ( '' ) ;
display.setCursor ( 0 , 40 ) ;
ha ( most.óra ( ) < 10 )
display.print ( '0' ) ;
display.print ( most.óra ( ) ) ;
display.print ( ':' ) ;
ha ( most.perc ( ) < 10 )
display.print ( '0' ) ;
display.print ( most.perc ( ) ) ;
display.print ( ':' ) ;
ha ( most.második ( ) < 10 )
display.print ( '0' ) ;
display.println ( most.második ( ) ) ;
display.display ( ) ;
}

A kód az RTC-hez és a kijelzőhöz telepített könyvtárakkal kezdődött. Ezt követően meghatározza a képernyő méretét és a megjelenítési címet. A tömböt a hétköznapok neveivel inicializálja.

A beállít rész soros kommunikációval kezdődik. Ellenőrzi, hogy az RTC és a kijelző működik-e vagy sem. Ezt követően definiáltunk egy „Linuxhint” karakterláncot, amely 3 másodpercig jelenik meg. Ez csak nyitó vagy indítási üzenet, ezt az üzenetet módosíthatja az egyéni szöveggel is.

A hurok A funkció megkapja a DS1307 modul dátumát és időpontját. Ezt követően törli a kijelzőt, és formázott módon nyomtatja ki a dátumot és az időt. A kód bevezető nullákat is hozzáad az órákhoz, percekhez és másodpercekhez, ha azok értékei kisebbek 10-nél.

7. Hardver

Miután feltöltötte a kódot az ESP32 kártyára, a következő kimenetet fogja látni az OLED képernyőn. Hardverhez az OLED képernyőt és egy I2C RTC DS1307 modult használtunk. 30 tűs ESP32 kártyát használnak. Bármilyen más ESP32 kártyával is kísérletezhet, de ügyeljen arra, hogy az I2C érintkezőket megfelelően csatlakoztassa.

Következtetés

Az RTC DS1307 56 bájtos SRAM-mal rendelkezik, akkumulátoros biztonsági mentés támogatásával. Ez egy 8 tűs eszköz, amely I2C kommunikációs protokollt használ. A DS1307 RTC modul és az ESP32 összekapcsolásához használhatja az ESP32 kártya I2C érintkezőit (GPIO 22 (SCL) és GPIO 21 (SDA)). Kinyomtathatja az időt egy Arduino IDE konzolon, vagy bármilyen képernyőt (például OLED vagy I2C LCD) használhat az idő megjelenítéséhez. A DS1307 RTC modul hasznos eszköz az idő és a dátum nyomon követéséhez különböző alkalmazásokban. Egyes fő alkalmazások közé tartoznak az adatgyűjtők, a digitális órák és az okosórák.