ESP32 reaalajas kell (RTC), kasutades DS1307 ja OLED-ekraani

Esp32 Reaalajas Kell Rtc Kasutades Ds1307 Ja Oled Ekraani



ESP32-l on sisseehitatud RTC-moodul, kuid see töötab ainult siis, kui toide on olemas. Kui toide katkeb, lähtestatakse kell ja ei saa õiget aega hoida. Nii et kui soovite jälgida aega või juhtida mis tahes ajapõhist seadet, proovige andurit DS1307 RTC. Siiski võite mõelda varuaku ühendamisele ESP32 plaadiga, kuid see pole parim stsenaarium, kui teil on voolupuudus. Parim alternatiiv on kasutada andurit DS1307, kuna see on varustatud sisseehitatud akuga, mis võib vastu pidada minimaalselt aasta.

Asjade selgeks tegemiseks suudab ESP32 sisemine reaalajakell (RTC) jälgida aega isegi siis, kui põhiprotsessor on välja lülitatud või sügavas unes. Saate kasutada ESP32 RTC-d, et jälgida aega ilma palju energiat kasutamata või põhiprotsessorit mõjutamata. Aga see nõuab endiselt voolu, mitte nii palju, kuid sisemise RTC töötamiseks on vaja minimaalset võimsust.

Seega jääb meile üle vaid välise RTC-mooduli kasutamise lahendus. Vaatame ESP32 plaadi liidestamist DS1307 RTC mooduliga.







Sisu:

1. Mis on RTC DS1307 moodul?

DS1307 on vähese energiatarbega seade, mis suudab täpselt jälgida kellaaega ja kuupäeva. See kasutab kahendkoodiga kümnendvormingut (BCD). See näitab teile aega üksikasjalikus vormingus, nagu sekundid, minutid ja isegi tunnid ja päevad. Saate printida ka kuupäeva täisvormingus (nt kuu ja aasta). Samuti teab ta, millal on liigaasta, kuni 2100. DS1307-ga suhtlemiseks saate kasutada I2C protokolli.





DS1307-l on sisseehitatud aku, mis suudab seda toita umbes aasta ilma välise 5 V allikata. Seda akuvaru kasutades võib see aja säilitada isegi siis, kui toide on välja lülitatud. Sellel on ka andmete salvestamiseks 56 baiti SRAM-i. DS1307 on mugav seade, millel on Arduino või ESP32 plaadiga kombineerituna palju rakendusi. Näiteks võivad need andmed olla abiks andmete logimisel, häiresüsteemidel või tööstuslikul juhtimisel. Kui vajate usaldusväärset ajamõõtmist, on DS1307 suurepärane valik.





RTC DS1307 mooduli tehnilised andmed

RTC DS1307 moodul koosneb RTC IC-st, EEPROM-ist, kristallostsillaatorist ja akuhoidikust varundamiseks.



Allpool on nende osade üksikasjad:

DS1307 RTC IC : DS1307 RTC IC on 8-kontaktiline kiip, mis jälgib kellaaega ja kuupäeva, kasutades I2C protokolli. See kasutab väga vähe voolu, alla 500 nA. See võib kuvada aega sekundites, minutites ja tundides ning kuupäeva päevades, kuudes ja aastates. Samuti saab lülituda 24-tunnise ja 12-tunnise vormingu vahel.

24C32 EEPROM IC : 24C32 EEPROM IC on Atmeli 32-baidine kiip, mis salvestab sätted, kellaaja ja kuupäeva. Samuti kasutab see I2C protokolli.

32,768 kHz kristall : 32,768 kHz kristallostsillaator tagab DS1307 RTC IC taktsageduse.

Aku hoidja : Patareihoidja mahutab CR2032 patarei. See on 3 V liitiummündielement. See annab pideva toite DS1307 RTC IC-le.

DS18B20 andur : DS18B20 andur võimaldab jootma ja kasutada temperatuuriandurit DS18B20. See ei ole eelnevalt joodetud. Saate jootma läbiva auguga paketi ja saada temperatuuri mooduli DS-tihvtilt.

Allolevas loendis on DS1307 RTC anduri kiired spetsifikatsioonid:

  • Tööpinge: 4,5–5,5 V, tavaliselt 5 V
  • Praegune kasutus : vähem kui 1,5 mA
  • Täpsus : 0–40 °C, oleneb kristallist
  • Aku : CR2032 (3 V münt)
  • Mälu : 56 baiti püsimälu
  • Liides : Kahejuhtmeline (I2C) jadaliides
  • Väljund : 1 Hz väljundviik
  • Programmeeritav ruutlaine väljund : Tarbib vähem kui 500 nA aku varurežiimis
  • Toitekatkestuse tuvastamine : automaatne toitekatkestuse tuvastamine ja lülitusahel
  • Toitetundlikkuse ahel : see võib voolupuuduse korral automaatselt lülituda varuvarustusse
  • Liigaaasta hüvitis : Kehtib kuni 2100. aastani

RTC DS1307 mooduli pinout

Moodulil on mitu erineva funktsiooniga kontakti.

  • VCC on kontakt, mis vajab mooduli toiteks alalispinget vahemikus 3,3 V kuni 5,5 V.
  • GND on madalpinge või maanduse tihvt.
  • SDA ja SCL on kontaktid, mis edastavad andmeid ja kellasignaale I2C siini kaudu.
  • DS on tihvt, mis mõõdab temperatuuri DS1307 anduriga, kui see on RTC-moodulis.
  • SQ on viik, mis genereerib ruutlainesignaali sagedusega 1 Hz, 4 kHz, 8 kHz või 32 kHz, olenevalt sellest, kuidas te selle programmeerite.
  • ÜKS on tihvt, mis kasutab 3 V akut, et hoida aega täpsena, kui põhitoide on välja lülitatud.

2. RTC DS1307 ja OLED-ekraani ühendamine ESP32-ga

ESP32 liidestamiseks DS1307 ja OLED-ekraaniga saate kasutada ESP32 plaadi sisseehitatud I2C kontakte. Nii DS1307 kui ka OLED-ekraan on I2C-põhised seadmed. Seejärel saab I2C siini kaudu suhelda I2C ülem-alluvprotokolli abil.

Enne kui liigume ESP32 liidese poole DS1307 ja OLED-ekraaniga, peate esmalt installima mõned nõutavad teegid.

Nõutavate teekide installimine

Teil on vaja kahte teeki, ühte RTC-mooduli ja teist OLED-ekraani jaoks. Kasutades OLED-i koos RTC-mooduliga, saate luua hämmastavaid ja interaktiivseid kella eelvaateid. Kui teil pole plaani ekraanil kellaaega kuvada, võite selle teegi installimise vahele jätta.

Järgmised on kaks raamatukogu, mida vajate:

  • RTClib (autor Adafruit) on Arduino IDE teek, mille abil saab määrata ja saada aega RTC-st. See pakub ka klasse kuupäevade, kellaaegade ja kestuste manipuleerimiseks. Seda teeki kasutades saate liidestada ja programmeerida reaalajakella (RTC) mooduleid, nagu DS1307 ja DS3231.
  • S SD1306 (autor Adafruit) on Arduino raamatukogu, mille abil saate OLED-ekraane liidestada ja programmeerida Arduino või mõne muu mikrokontrolleri plaadiga.

Mõlema teeki allalaadimiseks ja installimiseks Arduino IDE-s avage esmalt Raamatukogu juhataja otsige RTClib teeki ja klõpsake Installige :

Saate võimaluse installida ainult raamatukogu või selle sõltuvused. Klõpsake nuppu Installige kõik nuppu raamatukogu täielikuks installimiseks. Nii ei saa te koodi muutmisel viga, mis sõltub selle teegi sõltuvustest.

Samamoodi otsige SSD1306 teeki. Seda teeki on vaja OLED-ekraani jaoks. Klõpsake Installige jätkama.

Seekord saate ka sama kinnitussõnumi. Klõpsake nuppu Installige kõik valik.

Nüüd on nii OLED-i kui ka DS1307 teegid installitud ja kasutamiseks valmis. Kuid enne seda uurige kõigepealt OLED-ekraani I2C-aadressi.

3. OLED-ekraani I2C-aadressi leidmine

I2C aadress on iga I2C siini seadme kordumatu identifikaator. See võimaldab ülemseadmel suhelda konkreetse alamseadmega, saates andmed selle aadressile. I2C-aadressi eesmärk on vältida konflikte ja segadust mitme sama siini seadme vahel.

I2C-seadme aadressi saamiseks võite kasutada a lihtne sketš, mis skaneerib siini ja prindib aadressid leitud seadmetest. Teise võimalusena saate vaadata seadme andmelehte, et näha selle vaike- või konfigureeritavat aadressi.

Meie puhul kuvatakse pärast I2C skanneri koodi käivitamist Arduino IDE terminalis järgmine OLED-ekraani I2C-aadress.

Enamasti on suur tõenäosus, et ka sina saad sama 0x3C OLED-ekraani aadress.

4. OLED-i ja RTC DS1307 mooduli liidestamine ESP32-ga

1. Ühendage nii DS1307 mooduli kui ka mooduli SDA ja SCL kontaktid OLED-ekraan I2C tihvtidele ESP32. Tavaliselt, need on GPIO 21 ja GPIO 22 , kuid vajadusel saate koodis määrata ka muid tihvte.

2. Ühendage nii DS1307 VCC ja GND kui ka OLED-ekraan ESP32 3,3 V ja GND kontaktidega.

3. Sisestage CR2032 mündipatarei moodulisse DS1307, et tagada reaalajakella varutoide.

4. Laadige selle õpetuse näidiskood üles oma ESP32 plaadile. Muutke kohandatud väljundite koodi.

Pärast üleslaadimist käivitub kell määratud ajast ja kuvab kellaaega OLED-ekraanil.

5. Vooluahela skeem

ESP32 skeem DS1307-ga on lihtne, ühendamiseks on vaja vaid neli juhet. Saate lühendada nii OLED kui ka DS1307 andurite I2C juhtmeid SDA ja SCL. Samamoodi saab mõlema anduri sisselülitamiseks kasutada ESP32 plaadi 3V3 ja GND kontakti. Vajadusel saate toita ka eraldi allikast.

Märge : Kui ESP32 voolupiirangut ei ületata, on RTC DS1307 toide toidetud ESP32 3,3 V pistikuga. Kuid kui soovite olla turvalises kohas, võite kasutada RTC-mooduli jaoks eraldi toiteallikat või proovida väikese võimsusega andurit DS3231, mille töövahemik on 3,3–5,5 VDC.

Allolev pilt illustreerib ESP32 ühendamist RTC DS1307 anduriga.

Samamoodi, kui soovite kellaaja kuvamiseks ühendada OLED-ekraani, saate kasutada samu I2C kontakte ja ESP32 plaadi toitetihvte.

6. Kood

Kasutades allolevat koodi, määrame RTC-s praeguse kuupäeva ja kellaaja. Pärast kellaaja seadistamist kuvab kood kellaaega Arduino IDE terminalis. Enne koodi üleslaadimist peate seda värskendama oma praeguse kuupäeva ja kellaajaga.

#include 'RTClib.h'
RTC_DS1307 DS1307_RTC;
char Week_days [ 7 ] [ 12 ] = { 'pühapäev' , 'esmaspäev' , 'teisipäev' , 'kolmapäev' , 'neljapäev' , 'reede' , 'laupäev' } ;
tühine seadistus ( ) {
Serial.begin ( 115 200 ) ;
#ifndef ESP8266
samal ajal ( ! Sari ) ;
#endif
kui ( ! DS1307_RTC.begin ( ) ) {
Serial.println ( 'RTC-d ei leitud' ) ;
samal ajal ( 1 ) ;
}
DS1307_RTC.adjust ( Kuupäev Kellaaeg ( F ( __DATE__ ) , F ( __TIME__ ) ) ) ;
}
tühi silmus ( ) {
DateTime now = DS1307_RTC.now ( ) ;
Serial.print ( nüüd.aasta ( ) , DEC ) ;
Serial.print ( '/' ) ;
Serial.print ( nüüd.kuu ( ) , DEC ) ;
Serial.print ( '/' ) ;
Serial.print ( nüüd.päev ( ) , DEC ) ;
Serial.print ( '(' ) ;
Serial.print ( Week_days [ now.dayOfTheWeek ( ) ] ) ;
Serial.print ( ')' ) ;
Serial.print ( nüüd.tund ( ) , DEC ) ;
Serial.print ( ':' ) ;
Serial.print ( nüüd.minut ( ) , DEC ) ;
Serial.print ( ':' ) ;
Serial.print ( nüüd.teiseks ( ) , DEC ) ;
Serial.println ( ) ;
viivitus ( 1000 ) ;
}

See kood kasutab RTClib raamatukogu liidestamiseks DS1307 reaalajas kellamooduliga, mis jälgib kuupäeva ja kellaaega.

The seadistamine funktsioon algas edastuskiiruse lähtestamisega. Pärast seda määratlesime selles jaotises funktsiooni arvuti kuupäeva ja kellaaja sünkroonimiseks anduriga DS1307. See laadib RTC andurisse üles koodi koostamise aja.

Võite kasutada silmus funktsioon, et saada RTC-st kuupäev ja kellaaeg. Seejärel saate seda jadamonitoril kuvada järgmiselt: aasta/kuu/päev (nädalapäev) tund:minut:sekund. Ärge unustage lisada pärast iga tsüklit ühesekundiline viivitus, et kood liiga kiiresti ei jookseks.

Kuva praegune kellaaeg OLED-ekraanil

Sama aja kuvamiseks OLED-ekraanil peame lisama OLED-ekraanile täiendava koodiosa. Lihtsalt laadige antud kood üles. See kood kuvab teie OLED-ekraanil praegust kellaaega.

Pidage meeles, et siin kasutame 0,96-tollist 128 × 64 I2C SSD OLED-ekraani moodulit. Kui kasutate mõnda muud suurust, muutke koodi vastavalt. Samuti kontrollige I2C aadressi ja muutke seda antud koodis. Meie puhul on meil OLED-ekraani jaoks I2C-aadress 0x3C.

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

Adafruit_SSD1306 ekraan ( SCREEN_WIDTH, SCREEN_HEIGHT, & traat, - 1 ) ;
RTC_DS1307 RTC;
char päevad [ 7 ] [ 12 ] = { 'pühapäev' , 'esmaspäev' , 'teisipäev' , 'kolmapäev' , 'neljapäev' , 'reede' , 'laupäev' } ;
tühine seadistus ( ) {
Serial.begin ( 115 200 ) ;
kui ( ! RTC.begin ( ) ) {
Serial.println ( 'RTC-d ei leitud' ) ;
samal ajal ( 1 ) ;
}
RTC.reguleerida ( Kuupäev Kellaaeg ( F ( __DATE__ ) , F ( __TIME__ ) ) ) ;
kui ( ! kuva.alusta ( SSD1306_SWITCHCAPVCC, 0x3C ) ) {
Serial.println ( F ( 'SSD1306 eraldamine nurjus' ) ) ;
jaoks ( ;; ) ;
}
viivitus ( 1000 ) ;
display.clearDisplay ( ) ;
display.setTextSize ( 2 ) ;
display.setTextColor ( VALGE ) ;
display.setCursor ( 30 , kakskümmend ) ;
display.println ( 'Linux' ) ;
kuva.kuva ( ) ;
viivitus ( 3000 ) ;
display.clearDisplay ( ) ;
}
tühi silmus ( ) {
DateTime now = RTC.now ( ) ;
display.clearDisplay ( ) ;
display.setTextSize ( 2 ) ;
display.setCursor ( 0 , 0 ) ;
kuva.print ( nüüd.päev ( ) ) ;
kuva.print ( '/' ) ;
kuva.print ( nüüd.kuu ( ) ) ;
kuva.print ( '/' ) ;
kuva.print ( nüüd.aasta ( ) ) ;
display.println ( päevadel [ now.dayOfTheWeek ( ) ] ) ;
display.println ( '' ) ;
display.setCursor ( 0 , 40 ) ;
kui ( nüüd.tund ( ) < 10 )
kuva.print ( '0' ) ;
kuva.print ( nüüd.tund ( ) ) ;
kuva.print ( ':' ) ;
kui ( nüüd.minut ( ) < 10 )
kuva.print ( '0' ) ;
kuva.print ( nüüd.minut ( ) ) ;
kuva.print ( ':' ) ;
kui ( nüüd.teiseks ( ) < 10 )
kuva.print ( '0' ) ;
display.println ( nüüd.teiseks ( ) ) ;
kuva.kuva ( ) ;
}

Kood algas raamatukogudest, mille me RTC ja ekraani jaoks installisime. Pärast seda määrab see ekraani suuruse ja kuva aadressi. See initsialiseerib massiivi nädalapäevade nimedega.

The seadistamine osa algab jadakommunikatsiooniga. See kontrollib, kas RTC ja ekraan töötavad või mitte. Pärast seda oleme määratlenud stringi teksti 'Linuxhint', mis kuvatakse 3 sekundit. See on ainult ava- või käivitussõnum, saate seda sõnumit ka kohandatud tekstiga muuta.

The silmus funktsioon saab DS1307 mooduli kuupäeva ja kellaaja. Pärast seda tühjendab see ekraani ning prindib kuupäeva ja kellaaja vormindatud viisil. Kood lisab ka algusnullid tundidele, minutitele ja sekunditele, kui nende väärtused on väiksemad kui 10.

7. Riistvara

Pärast koodi ESP32 plaadile üleslaadimist näete OLED-ekraanil järgmist väljundit. Riistvara jaoks oleme kasutanud OLED-ekraani ja I2C RTC DS1307 moodulit. Kasutatakse 30 kontaktiga ESP32 plaati. Võite katsetada ka mis tahes muu ESP32 plaadiga, kuid veenduge, et ühendaksite I2C tihvtid õigesti.

Järeldus

RTC DS1307-l on 56-baidine SRAM koos aku varundamise toega. See on 8-pin seade, mis kasutab I2C sideprotokolli. DS1307 RTC mooduli liidestamiseks ESP32-ga saate kasutada ESP32 plaadi I2C kontakte (GPIO 22 (SCL) ja GPIO 21 (SDA)). Saate printida kellaaega Arduino IDE-konsoolil või kasutada kellaaja kuvamiseks mis tahes ekraani (nt OLED või I2C LCD). DS1307 RTC moodul on kasulik seade kellaaja ja kuupäeva jälgimiseks erinevates rakendustes. Mõned peamised rakendused hõlmavad andmesalvestajaid, digitaalseid kellasid ja nutikellasid.