ESP32 reaaliaikainen kello (RTC) DS1307:llä ja OLED-näytöllä

Esp32 Reaaliaikainen Kello Rtc Ds1307 Lla Ja Oled Naytolla



ESP32:ssa on sisäänrakennettu RTC-moduuli, mutta se toimii vain, kun virtaa on. Jos virta katkeaa, kello nollataan eikä pysty pitämään oikeaa aikaa. Joten jos haluat seurata aikaa tai ohjata mitä tahansa aikapohjaista laitetta, kokeile DS1307 RTC -anturia. Saatat kuitenkin harkita vara-akun liittämistä ESP32-korttiin, mutta se ei ole paras tapaus tehdä, jos sinulla on virranpuute. Paras vaihtoehto on käyttää DS1307-anturia, sillä sen mukana tulee sisäänrakennettu akku, joka kestää vähintään vuoden.

Asioiden selventämiseksi ESP32:n sisäinen reaaliaikainen kello (RTC) voi seurata aikaa, vaikka pääprosessori on sammutettuna tai syvässä unessa. ESP32 RTC:n avulla voit seurata aikaa kuluttamatta paljon virtaa tai vaikuttamatta pääprosessoriin. Mutta se vaatii silti virtaa toimiakseen, ei niin paljon, mutta vähimmäismäärä tehoa tarvitaan sisäiseen RTC:hen.

Joten tässä meillä on vain ratkaisu ulkoisen RTC-moduulin käyttämisestä. Katsotaanpa ESP32-kortin liittämisen vaiheet DS1307 RTC-moduuliin.







Sisällys:

1. Mikä on RTC DS1307 -moduuli?

DS1307 on vähän virtaa kuluttava laite, joka voi seurata kellonaikaa ja päivämäärää tarkasti. Se käyttää binäärikoodattua desimaalimuotoa (BCD). Se voi kertoa sinulle ajan yksityiskohtaisessa muodossa, kuten sekunteina, minuutteina ja jopa tunteina ja päivinä. Voit myös tulostaa päivämäärän täydessä muodossa, kuten kuukauden ja vuoden. Se tietää myös, milloin on karkausvuosi, aina vuoteen 2100 asti. Voit käyttää I2C-protokollaa kommunikoidaksesi DS1307:n kanssa.





DS1307:ssä on sisäänrakennettu akku, joka voi toimia noin vuoden ajan ilman ulkoista 5 V lähdettä. Käyttämällä tätä vara-akkua se voi säilyttää ajan, vaikka päävirta on pois päältä. Siinä on myös 56 tavua SRAM-muistia joidenkin tietojen tallentamiseen. DS1307 on kätevä laite, jolla on monia sovelluksia yhdistettynä Arduino- tai ESP32-korttiin. Nämä tiedot voivat olla hyödyllisiä esimerkiksi tiedonkeruussa, hälytysjärjestelmissä tai teollisessa ohjauksessa. Jos tarvitset luotettavaa ajanottoa, DS1307 on loistava vaihtoehto.





RTC DS1307 -moduulin tekniset tiedot

RTC DS1307 -moduuli koostuu RTC IC:stä, EEPROM:ista, kristallioskillaattorista ja paristotelineestä varmuuskopiointia varten.



Alla on näiden osien yksityiskohdat:

DS1307 RTC IC : DS1307 RTC IC on 8-nastainen siru, joka pitää kirjaa kellonajasta ja päivämäärästä I2C-protokollan avulla. Se käyttää hyvin vähän virtaa, alle 500 nA. Se voi näyttää ajan sekunteina, minuutteina ja tunteina ja päivämäärän päivinä, kuukausina ja vuosina. Se voi myös vaihtaa 24 tunnin ja 12 tunnin formaattien välillä.

24C32 EEPROM IC : 24C32 EEPROM IC on Atmelin 32-tavuinen siru, joka tallentaa asetukset, kellonajan ja päivämäärän. Se käyttää myös I2C-protokollaa.

32,768 kHz kristalli : 32,768 kHz:n kideoskillaattori tarjoaa kellotaajuuden DS1307 RTC IC:lle.

Akun pidike : Paristoteline pitää sisällään CR2032-pariston. Se on 3V litiumkolikkokenno. Se tarjoaa jatkuvaa virtaa DS1307 RTC IC:lle.

DS18B20 anturin tarjonta : DS18B20-anturin ansiosta voit juottaa ja käyttää DS18B20-lämpötila-anturia. Sitä ei ole valmiiksi juotettu. Voit juottaa läpireiän paketin ja saada lämpötilan moduulin DS-nastasta.

Alla olevassa luettelossa on joitain DS1307 RTC -anturin tietoja:

  • Käyttöjännite: 4,5–5,5 V, tyypillisesti 5 V
  • Nykyinen kulutus : Alle 1,5 mA
  • Tarkkuus : 0–40 °C, riippuu kiteestä
  • Akku : CR2032 (3 V kolikko)
  • Muisti : 56 tavua haihtumatonta RAM-muistia
  • Käyttöliittymä : Kaksijohtiminen (I2C) sarjaliitäntä
  • Lähtö : 1 Hz lähtönasta
  • Ohjelmoitava neliöaaltolähtö : Kuluttaa alle 500 nA akkuvaratilassa
  • Virtakatkon tunnistus : Automaattinen virtakatkon tunnistus ja kytkinpiirit
  • Power-sense piiri : Se voi vaihtaa automaattisesti varalähteen virran puutteen yhteydessä
  • Karkausvuoden korvaus : Voimassa vuoteen 2100 asti

RTC DS1307 -moduulin liitäntä

Moduulissa on useita nastoja eri toiminnoilla.

  • VCC on nasta, joka tarvitsee 3,3–5,5 V:n tasajännitteen moduulin syöttämiseksi.
  • GND on nasta matalajännitteelle tai maadoitukselle.
  • SDA ja SCL ovat nastat, jotka välittävät dataa ja kellosignaaleja I2C-väylän kautta.
  • DS on tappi, joka mittaa lämpötilaa DS1307-anturin kanssa, jos sinulla on sellainen RTC-moduulissa.
  • SQ on nasta, joka tuottaa neliöaaltosignaalin taajuudella 1 Hz, 4 kHz, 8 kHz tai 32 kHz, riippuen siitä, miten sen ohjelmoit.
  • YKSI on nasta, joka käyttää 3 V akkua pitääkseen ajan tarkana, kun päävirta on katkaistu.

2. RTC DS1307:n ja OLED-näytön liittäminen ESP32:n kanssa

ESP32:n liittämiseen DS1307:n ja OLED-näytön kanssa voit käyttää ESP32-kortin sisäänrakennettuja I2C-nastoja. Sekä DS1307- että OLED-näyttö ovat I2C-pohjaisia ​​laitteita. Sitten voi kommunikoida käyttämällä I2C-master-slave-protokollaa I2C-väylän kautta.

Ennen kuin siirrymme kohti ESP32:n liitäntää DS1307:n ja OLED-näytön kanssa, sinun on ensin asennettava joitain vaadittuja kirjastoja.

Vaadittujen kirjastojen asentaminen

Tarvitset kaksi kirjastoa, yhden RTC-moduulia ja toisen OLED-näyttöä varten. Käyttämällä OLEDiä RTC-moduulin kanssa voit luoda upeita ja interaktiivisia kellon esikatseluja. Jos sinulla ei ole suunnitelmaa näyttää aikaa näytöllä, voit ohittaa tämän kirjaston asennuksen.

Tarvitset seuraavat kaksi kirjastoa:

  • RTClib (Adafruit) on Arduino IDE -kirjasto, jonka avulla voit määrittää ja saada aikaa RTC:stä. Se tarjoaa myös luokkia päivämäärien, aikojen ja kestojen muokkaamiseen. Tämän kirjaston avulla voit liittää ja ohjelmoida reaaliaikakellon (RTC) moduuleja, kuten DS1307 ja DS3231.
  • S SD1306 (by Adafruit) on Arduino-kirjasto, jonka avulla voit liittää ja ohjelmoida OLED-näyttöjä Arduinon tai minkä tahansa muun mikro-ohjainkortin kanssa.

Lataa ja asenna molemmat kirjastot Arduino IDE:ssä avaamalla ensin Kirjaston johtaja etsi RTClib-kirjasto ja napsauta Asentaa :

Saat mahdollisuuden asentaa vain kirjasto tai sen riippuvuudet. Klikkaa Asenna kaikki -painiketta asentaaksesi kirjaston kokonaan. Tällä tavalla et saa virhettä, jos muokkaat koodia, joka riippuu tämän kirjaston riippuvuuksista.

Etsi samalla tavalla SSD1306-kirjasto. Tätä kirjastoa tarvitaan OLED-näytölle. Klikkaus Asentaa edetä.

Tällä kertaa saat myös saman vahvistusviestin. Klikkaa Asenna kaikki vaihtoehto.

Nyt sekä OLED- että DS1307-kirjastot on asennettu ja valmiina käyttöön. Mutta ennen sitä, selvitä ensin OLED-näytön I2C-osoite.

3. OLED-näytön I2C-osoitteen löytäminen

I2C-osoite on yksilöllinen tunniste jokaiselle I2C-väylällä olevalle laitteelle. Sen avulla isäntälaite voi kommunikoida tietyn orjalaitteen kanssa lähettämällä tietoja sen osoitteeseen. I2C-osoitteen tarkoitus on välttää ristiriidat ja sekaannukset useiden samassa väylässä olevien laitteiden välillä.

Voit saada I2C-laitteen osoitteen käyttämällä a yksinkertainen luonnos, joka skannaa väylän ja tulostaa osoitteet löytämistä laitteista. Vaihtoehtoisesti voit tarkistaa laitteen datalehdestä sen oletus- tai määritettävän osoitteen.

Tässä tapauksessamme I2C-skannerikoodin suorittamisen jälkeen seuraava OLED-näytön I2C-osoite näkyy Arduino IDE -päätteessä.

Suurimman osan ajasta on suuri mahdollisuus, että myös sinä saat saman 0x3C OLED-näytön osoite.

4. OLED- ja RTC DS1307 -moduulin liittäminen ESP32:een

1. Liitä sekä DS1307-moduulin että moduulin SDA- ja SCL-nastat OLED-näyttö I2C-nastoihin ESP32. Yleensä, nämä ovat GPIO 21 ja GPIO 22 , mutta voit määrittää koodiin myös muita nastaja tarvittaessa.

2. Liitä DS1307:n VCC ja GND sekä OLED-näyttö ESP32:n 3,3 V- ja GND-nastoihin.

3. Aseta CR2032-nappiparisto DS1307-moduuliin antaaksesi varavirtaa reaaliaikakellolle.

4. Lataa esimerkkikoodi tästä opetusohjelmasta ESP32-kortille. Muokkaa mukautettujen tulosteiden koodia.

Latauksen jälkeen kello alkaa asetetusta ajasta ja näyttää ajan OLED-näytöllä.

5. Piirikaavio

ESP32:n ja DS1307:n piirikaavio on yksinkertainen, sillä vain neljä johtoa on kytkettävä. Voit lyhentää sekä OLED- että DS1307-anturien I2C-johtoja SDA ja SCL. Samoin molempien antureiden käynnistämiseen voidaan käyttää ESP32-kortin 3V3- ja GND-nastaa. Virran saa tarvittaessa myös erillisestä lähteestä.

Huomautus : RTC DS1307 on turvallista syöttää virtaa ESP32:n 3,3 V nastasta, jos ESP32:n virtaraja ei ylity. Mutta jos haluat olla turvallisella paikalla, voit joko käyttää erillistä virtalähdettä RTC-moduulille tai kokeilla pienitehoista DS3231-anturia, jonka toiminta-alue on 3,3–5,5 VDC.

Alla oleva kuva havainnollistaa ESP32:n liittämistä RTC DS1307 -anturiin.

Vastaavasti, jos haluat liittää OLED-näytön kellonajan näyttämiseen, voit käyttää samoja I2C-nastoja ja ESP32-kortin virtanastoja.

6. Koodi

Alla olevan koodin avulla asetamme nykyisen päivämäärän ja kellonajan RTC:hen. Kellonajan asettamisen jälkeen koodi näyttää kellonajan Arduino IDE -päätteessä. Ennen kuin lataat koodin, sinun on päivitettävä siihen nykyinen päivämäärä ja kellonaika.

#include 'RTClib.h'
RTC_DS1307 DS1307_RTC;
char Week_days [ 7 ] [ 12 ] = { 'Sunnuntai' , 'Maanantai' , 'Tiistai' , 'Keskiviikko' , 'Torstai' , 'Perjantai' , 'lauantai' } ;
tyhjä asetus ( ) {
Serial.begin ( 115 200 ) ;
#ifndef ESP8266
sillä aikaa ( ! Sarja ) ;
#loppu Jos
jos ( ! DS1307_RTC.begin ( ) ) {
Serial.println ( 'RTC:tä ei löytynyt' ) ;
sillä aikaa ( 1 ) ;
}
DS1307_RTC.adjust ( Treffiaika ( F ( __PÄIVÄMÄÄRÄ__ ) , F ( __AIKA__ ) ) ) ;
}
tyhjä silmukka ( ) {
DateTime now = DS1307_RTC.now ( ) ;
Serial.print ( nyt.vuosi ( ) , DEC ) ;
Serial.print ( '/' ) ;
Serial.print ( nyt.kuukausi ( ) , DEC ) ;
Serial.print ( '/' ) ;
Serial.print ( nyt.päivä ( ) , DEC ) ;
Serial.print ( '(' ) ;
Serial.print ( Arkisin [ now.dayOfTheWeek ( ) ] ) ;
Serial.print ( ')' ) ;
Serial.print ( nyt.tunti ( ) , DEC ) ;
Serial.print ( ':' ) ;
Serial.print ( nyt.minuutti ( ) , DEC ) ;
Serial.print ( ':' ) ;
Serial.print ( nyt.toiseksi ( ) , DEC ) ;
Serial.println ( ) ;
viive ( 1000 ) ;
}

Tämä koodi käyttää RTClib-kirjasto liitäntään DS1307-reaaliaikakellomoduuliin, joka pitää kirjaa päivämäärästä ja kellonajasta.

The perustaa toiminto aloitettiin siirtonopeuden alustamisella. Tämän jälkeen määritimme tässä osiossa toiminnon, jolla synkronoidaan tietokoneen päivämäärä ja kellonaika DS1307-anturin kanssa. Tämä lataa koodin kokoamisajan RTC-anturiin.

Voit käyttää silmukka toiminto saadaksesi päivämäärän ja kellonajan RTC:ltä. Sitten voit näyttää sen sarjanäytössä seuraavasti: vuosi/kuukausi/päivä (viikonpäivä) tunti:minuutti:sekunti. Muista lisätä yhden sekunnin viive jokaisen silmukan jälkeen, jotta koodi ei toimi liian nopeasti.

Näytä nykyinen aika OLED-näytössä

Jos haluat näyttää saman ajan OLED-näytöllä, meidän on lisättävä ylimääräinen koodiosa OLED-näytölle. Lataa vain annettu koodi. Tämä koodi näyttää kellonajan OLED-näytölläsi.

Muista, että käytämme tässä 0,96 tuuman 128×64 I2C SSD OLED -näyttömoduulia. Jos käytät jotain muuta kokoa, muokkaa koodia vastaavasti. Tarkista myös I2C-osoite ja muokkaa sitä annetussa koodissa. Meidän tapauksessamme meillä on I2C-osoite 0x3C OLED-näytölle.

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

Adafruit_SSD1306 näyttö ( SCREEN_WIDTH, SCREEN_HEIGHT, & lanka, - 1 ) ;
RTC_DS1307 RTC;
char päivää [ 7 ] [ 12 ] = { 'Sunnuntai' , 'Maanantai' , 'Tiistai' , 'Keskiviikko' , 'Torstai' , 'Perjantai' , 'lauantai' } ;
tyhjä asetus ( ) {
Serial.begin ( 115 200 ) ;
jos ( ! RTC.begin ( ) ) {
Serial.println ( 'RTC:tä ei löytynyt' ) ;
sillä aikaa ( 1 ) ;
}
RTC.adjust ( Treffiaika ( F ( __PÄIVÄMÄÄRÄ__ ) , F ( __AIKA__ ) ) ) ;
jos ( ! display.begin ( SSD1306_SWITCHCAPVCC, 0x3C ) ) {
Serial.println ( F ( 'SSD1306-allokointi epäonnistui' ) ) ;
varten ( ;; ) ;
}
viive ( 1000 ) ;
display.clearNäyttö ( ) ;
display.setTextSize ( 2 ) ;
display.setTextColor ( VALKOINEN ) ;
display.setCursor ( 30 , kaksikymmentä ) ;
display.println ( 'Linux' ) ;
näyttö.näyttö ( ) ;
viive ( 3000 ) ;
display.clearNäyttö ( ) ;
}
tyhjä silmukka ( ) {
DateTime now = RTC.now ( ) ;
display.clearNäyttö ( ) ;
display.setTextSize ( 2 ) ;
display.setCursor ( 0 , 0 ) ;
display.print ( nyt.päivä ( ) ) ;
display.print ( '/' ) ;
display.print ( nyt.kuukausi ( ) ) ;
display.print ( '/' ) ;
display.print ( nyt.vuosi ( ) ) ;
display.println ( päivää [ now.dayOfTheWeek ( ) ] ) ;
display.println ( '' ) ;
display.setCursor ( 0 , 40 ) ;
jos ( nyt.tunti ( ) < 10 )
display.print ( '0' ) ;
display.print ( nyt.tunti ( ) ) ;
display.print ( ':' ) ;
jos ( nyt.minuutti ( ) < 10 )
display.print ( '0' ) ;
display.print ( nyt.minuutti ( ) ) ;
display.print ( ':' ) ;
jos ( nyt.toiseksi ( ) < 10 )
display.print ( '0' ) ;
display.println ( nyt.toiseksi ( ) ) ;
näyttö.näyttö ( ) ;
}

Koodi alkoi RTC:tä ja näyttöä varten asentamistamme kirjastoista. Sen jälkeen se määrittää näytön koon ja näyttöosoitteen. Se alustaa taulukon viikonpäivän nimillä.

The perustaa osa alkaa sarjaviestinnällä. Se tarkistaa, toimivatko RTC ja näyttö vai eivät. Sen jälkeen olemme määrittäneet merkkijonotekstin 'Linuxhint', joka näkyy 3 sekunnin ajan. Tämä on vain avaus- tai käynnistysviesti, voit muokata tätä viestiä myös mukautetulla tekstilläsi.

The silmukka toiminto saa DS1307-moduulin päivämäärän ja kellonajan. Tämän jälkeen se tyhjentää näytön ja tulostaa päivämäärän ja kellonajan muotoillulla tavalla. Koodi lisää myös alkunollat ​​tunteihin, minuutteihin ja sekunteihin, jos niiden arvot ovat pienempiä kuin 10.

7. Laitteisto

Kun olet ladannut koodin ESP32-kortille, näet seuraavan lähdön OLED-näytöllä. Laitteistossa olemme käyttäneet OLED-näyttöä ja I2C RTC DS1307 -moduulia. Käytössä on 30 nastainen ESP32-kortti. Voit kokeilla myös millä tahansa muulla ESP32-kortilla, mutta varmista, että liität I2C-nastat oikein.

Johtopäätös

RTC DS1307:ssä on 56-tavuinen SRAM-muisti, joka tukee akun varmuuskopiointia. Se on 8-nastainen laite, joka käyttää I2C-tiedonsiirtoprotokollaa. Voit liittää DS1307 RTC -moduulin ESP32:een käyttämällä ESP32-kortin I2C-nastoja (GPIO 22 (SCL) ja GPIO 21 (SDA)). Voit tulostaa ajan Arduino IDE -konsolille tai käyttää mitä tahansa näyttöä, kuten OLED- tai I2C LCD -näyttöä ajan näyttämiseen. DS1307 RTC-moduuli on hyödyllinen laite ajan ja päivämäärän seuraamiseen eri sovelluksissa. Joitakin pääsovelluksia ovat dataloggerit, digitaaliset kellot ja älykellot.