ЕСП32 Сат реалног времена (РТЦ) који користи ДС1307 и ОЛЕД екран

Esp32 Sat Realnog Vremena Rtc Koji Koristi Ds1307 I Oled Ekran



ЕСП32 долази са уграђеним РТЦ модулом, али то ради само када постоји напајање. Ако дође до губитка струје, сат ће се ресетовати и неће моћи да одржи тачно време. Дакле, ако желите да пратите време или да контролишете било који уређај заснован на времену, испробајте ДС1307 РТЦ сензор. Међутим, можда размишљате о повезивању резервне батерије са ЕСП32 плочом, али то није најбољи сценарио ако имате несташицу струје. Најбоља алтернатива је коришћење сензора ДС1307, јер долази са уграђеном батеријом која може да траје најмање годину дана.

Да би ствари биле јасне, унутрашњи сат реалног времена (РТЦ) ЕСП32 може да прати време чак и када је главни процесор искључен или у дубоком спавању. Можете да користите ЕСП32 РТЦ да бисте пратили време без коришћења много енергије или утицаја на главни процесор. Али и даље је потребна снага за рад, не толико, али је потребна минимална количина енергије да би интерни РТЦ радио.

Дакле, са овим нам остаје само решење коришћења екстерног РТЦ модула. Хајде да погледамо кораке повезивања ЕСП32 плоче са ДС1307 РТЦ модулом.







Садржај:

1. Шта је РТЦ ДС1307 модул

ДС1307 је уређај мале снаге који може тачно да прати време и датум. Користи бинарно кодиран децимални (БЦД) формат. Може вам рећи време у детаљном формату као што су секунде, минуте, па чак и сати и дани. Такође можете одштампати датум у пуном формату као што су месец и година. Такође зна када је преступна година, до 2100. Да бисте комуницирали са ДС1307, можете користити И2Ц протокол.





ДС1307 има уграђену батерију која може да га напаја око годину дана без екстерног извора од 5В. Користећи ову резервну батерију, може задржати време чак и када је главно напајање искључено. Такође има 56 бајтова СРАМ меморије за складиштење неких података. ДС1307 је згодан уређај који има много апликација када се комбинује са Ардуино или ЕСП32 плочом. На пример, ови подаци могу бити од помоћи у евидентирању података, алармним системима или индустријској контроли. Ако вам је потребно поуздано мерење времена, ДС1307 је одлична опција.





Спецификације модула РТЦ ДС1307

РТЦ ДС1307 модул се састоји од РТЦ ИЦ-а, ЕЕПРОМ-а, кристалног осцилатора и држача батерије за резервну копију.



Испод су детаљи ових делова:

ДС1307 РТЦ ИЦ : ДС1307 РТЦ ИЦ је 8-пински чип који прати време и датум користећи И2Ц протокол. Користи врло мало енергије, мање од 500нА. Може да прикаже време у секундама, минутима и сатима, а датум у данима, месецима и годинама. Такође може да прелази између 24-часовног и 12-часовног формата.

24Ц32 ​​ЕЕПРОМ ИЦ : 24Ц32 ​​ЕЕПРОМ ИЦ је 32-бајтни чип компаније Атмел који чува подешавања, време и датум. Такође користи И2Ц протокол.

32,768 кХз Цристал : Кристални осцилатор од 32,768 кХз обезбеђује фреквенцију такта за ДС1307 РТЦ ИЦ.

Држач батерије : Држач батерије држи ЦР2032 батерију. То је 3В литијумска кованица. Пружа континуирано напајање ДС1307 РТЦ ИЦ.

Обезбеђење сензора ДС18Б20 : Обезбеђење сензора ДС18Б20 вам омогућава да лемите и користите сензор температуре ДС18Б20. Није претходно залемљен. Можете залемити пакет кроз отвор и добити температуру са ДС пина модула.

Доња листа даје неке брзе спецификације ДС1307 РТЦ сензора:

  • Радни напон: 4,5–5,5 В, обично 5 В
  • Потрошња струје : Мање од 1,5 мА
  • Прецизност : 0–40 °Ц, зависи од кристала
  • Батерија : ЦР2032 (3 В новчић)
  • Меморија : 56 бајтова непроменљиве РАМ меморије
  • Интерфејс : Двожични (И2Ц) серијски интерфејс
  • Излаз : 1 Хз излазни пин
  • Програмабилни излаз квадратног таласа : Троши мање од 500 нА у режиму резервне батерије
  • Детекција нестанка струје : Аутоматска детекција нестанка струје и склоп за пребацивање
  • Снажно-сензорско коло : Може се аутоматски пребацити на резервно напајање у случају недостатка струје
  • Надокнада за преступну годину : Важи до 2100. године

Пиноут модула РТЦ ДС1307

Модул има неколико пинова са различитим функцијама.

  • ВЦЦ је пин коме је потребан једносмерни напон између 3,3В и 5,5В за напајање модула.
  • ГНД је пин за ниски напон или уземљење.
  • СДА и СЦЛ су пинови који комуницирају податке и сигнале такта преко И2Ц магистрале.
  • ДС је пин који мери температуру са ДС1307 сензором ако га имате на РТЦ модулу.
  • СК је пин који генерише сигнал правокутног таласа са фреквенцијом од 1 Хз, 4 кХз, 8 кХз или 32 кХз, у зависности од тога како га програмирате.
  • ЈЕДАН је пин који користи батерију од 3В да би време био тачан када је главно напајање искључено.

2. Како повезати РТЦ ДС1307 и ОЛЕД екран са ЕСП32

За повезивање ЕСП32 са ДС1307 и ОЛЕД екраном, можете користити уграђене И2Ц пинове ЕСП32 плоче. И ДС1307 и ОЛЕД екран су уређаји засновани на И2Ц. Затим може комуницирати користећи И2Ц мастер славе протокол преко И2Ц магистрале.

Пре него што пређемо на повезивање ЕСП32 са ДС1307 и ОЛЕД екраном, прво морате да инсталирате неке потребне библиотеке.

Инсталирање потребних библиотека

Требаће вам две библиотеке, једна за РТЦ модул и једна за ОЛЕД екран. Користећи ОЛЕД са РТЦ модулом, можете креирати невероватне и интерактивне прегледе сата. Ако немате план за приказивање времена на екрану, можете прескочити ову инсталацију библиотеке.

Следе две библиотеке које ће вам требати:

  • РТЦлиб (од Адафруит) је Ардуино ИДЕ библиотека за подешавање и добијање времена од РТЦ-а. Такође пружа часове за манипулисање датумима, временом и трајањем. Користећи ову библиотеку, можете да повежете и програмирате модуле сата реалног времена (РТЦ), као што су ДС1307 и ДС3231.
  • С СД1306 (од Адафруит) је библиотека за Ардуино, помоћу које можете да повежете и програмирате ОЛЕД екране са Ардуином или било којом другом микроконтролерском плочом.

Да бисте преузели и инсталирали обе ове библиотеке у Ардуино ИДЕ, прво отворите Управник библиотеке потражите РТЦлиб библиотеку и кликните Инсталирај :

Добићете опцију да инсталирате само библиотеку или њене зависности. Кликните Инсталирај све дугме да бисте у потпуности инсталирали библиотеку. На овај начин нећете добити никакву грешку ако измените код који зависи од зависности ове библиотеке.

Слично, потражите библиотеку ССД1306. Ова библиотека је потребна за ОЛЕД екран. Кликните Инсталирај да наставите.

Овај пут ћете такође добити исту поруку потврде. Кликните на Инсталирај све опција.

Сада су обе библиотеке за ОЛЕД и ДС1307 инсталиране и спремне за употребу. Али пре тога, прво сазнајте И2Ц адресу за ОЛЕД екран.

3. Проналажење И2Ц адресе ОЛЕД екрана

И2Ц адреса је јединствени идентификатор за сваки уређај на И2Ц магистрали. Омогућава главном уређају да комуницира са одређеним славе уређајем тако што шаље податке на његову адресу. Сврха И2Ц адресе је да избегне сукобе и забуну између више уређаја на истој магистрали.

Да бисте добили адресу И2Ц уређаја, можете користити а једноставна скица која скенира магистралу и штампа адресе уређаја које пронађе. Алтернативно, можете да проверите листу података уређаја да видите његову подразумевану или конфигурабилну адресу.

Овде у нашем случају након покретања кода И2Ц скенера следећа И2Ц адреса ОЛЕД екрана се приказује на Ардуино ИДЕ терминалу.

Већину времена постоји велика шанса да ћете и ви добити исто 0к3Ц адресу за ваш ОЛЕД екран.

4. Повезивање ОЛЕД и РТЦ ДС1307 модула са ЕСП32

1. Повежите пинове СДА и СЦЛ на ДС1307 модулу и на ОЛЕД екран на И2Ц пинове оф ЕСП32. обично, ово су ГПИО 21 и ГПИО 22 , али можете доделити било које друге пинове такође у коду ако је потребно.

2. Повежите и ВЦЦ и ГНД на ДС1307 и ОЛЕД екран на 3,3В и ГНД пинове ЕСП32.

3. Уметните дугмасту батерију ЦР2032 у модул ДС1307 да бисте обезбедили резервно напајање за сат реалног времена.

4. Отпремите пример кода из овог упутства на вашу ЕСП32 плочу. Измените код за прилагођене излазе.

Након отпремања, сат ће почети од подешеног времена и приказати време на ОЛЕД екрану.

5. Дијаграм струјног кола

Шема кола ЕСП32 са ДС1307 је једноставна, са само четири жице које је потребно повезати. Можете скратити И2Ц жице СДА и СЦЛ и ОЛЕД и ДС1307 сензора. Слично томе, за напајање оба ова сензора, могу се користити 3В3 и ГНД пин ЕСП32 плоче. Такође можете напајати из засебног извора ако је потребно.

Белешка : Безбедно је напајати РТЦ ДС1307 са 3,3 В пина ЕСП32 ако није прекорачена тренутна граница ЕСП32. Али ако желите да будете на безбедном месту, можете или да користите посебан извор напајања за РТЦ модул или да испробате сензор мале снаге ДС3231 чији је радни опсег између 3,3 до 5,5 ВДЦ.

Слика испод илуструје везу ЕСП32 са РТЦ ДС1307 сензором.

Слично томе, ако желите да повежете ОЛЕД екран за приказ времена, можете користити исте И2Ц пинове и пинове за напајање ЕСП32 плоче.

6. Код

Користећи код испод, поставићемо тренутни датум и време на РТЦ-у. Након подешавања времена, код ће приказати време на Ардуино ИДЕ терминалу. Пре него што отпремите код, потребно је да га ажурирате тренутним датумом и временом.

#инцлуде 'РТЦлиб.х'
РТЦ_ДС1307 ДС1307_РТЦ;
цхар Веек_даис [ 7 ] [ 12 ] = { 'недеља' , 'Понедељак' , 'уторак' , 'Среда' , 'четвртак' , 'петак' , 'субота' } ;
празнина подешавања ( ) {
Сериал.бегин ( 115200 ) ;
#ифндеф ЕСП8266
док ( ! Сериал ) ;
#ендиф
ако ( ! ДС1307_РТЦ.бегин ( ) ) {
Сериал.принтлн ( „Нисам могао да пронађем РТЦ“ ) ;
док ( 1 ) ;
}
ДС1307_РТЦ.адјуст ( Датум време ( Ф ( __ДАТЕ__ ) , Ф ( __ВРЕМЕ__ ) ) ) ;
}
празнина петља ( ) {
Датум и време сада = ДС1307_РТЦ.нов ( ) ;
Сериал.принт ( сада.године ( ) , ДЕЦ ) ;
Сериал.принт ( '/' ) ;
Сериал.принт ( сада.месец ( ) , ДЕЦ ) ;
Сериал.принт ( '/' ) ;
Сериал.принт ( сада.дан ( ) , ДЕЦ ) ;
Сериал.принт ( '(' ) ;
Сериал.принт ( Веек_даис [ нов.даиОфТхеВеек ( ) ] ) ;
Сериал.принт ( ') ' ) ;
Сериал.принт ( сада.час ( ) , ДЕЦ ) ;
Сериал.принт ( ':' ) ;
Сериал.принт ( сада.минута ( ) , ДЕЦ ) ;
Сериал.принт ( ':' ) ;
Сериал.принт ( сада.друго ( ) , ДЕЦ ) ;
Сериал.принтлн ( ) ;
кашњење ( 1000 ) ;
}

Овај код користи РТЦлиб библиотека да се повеже са ДС1307 модулом сата у реалном времену који прати датум и време.

Тхе подесити функција започета иницијализацијом брзине преноса. Након тога, унутар овог одељка, дефинисали смо функцију за синхронизацију датума и времена рачунара са сензором ДС1307. Ово ће учитати време компилације кода на РТЦ сензор.

Можете користити петља функција за добијање датума и времена из РТЦ-а. Затим га можете приказати на серијском монитору овако: година/месец/дан (дан у недељи) сат:минута:секунда. Не заборавите да додате кашњење од једне секунде након сваке петље, тако да код не ради пребрзо.

Прикажите тренутно време на ОЛЕД екрану

Да бисмо приказали исто време на ОЛЕД екрану, морамо да додамо додатни део кода за ОЛЕД екран. Једноставно отпремите дати код. Овај код ће приказати тренутно време на вашем ОЛЕД екрану.

Запамтите, овде користимо 0,96-инчни 128×64 И2Ц ССД ОЛЕД екран. Ако користите било коју другу величину, измените код у складу са тим. Такође, проверите И2Ц адресу и измените је у датом коду. У нашем случају имамо И2Ц адресу 0к3Ц за ОЛЕД екран.

#инцлуде <Вире.х>
#инцлуде <Адафруит_ГФКС.х>
#инцлуде <Адафруит_ССД1306.х>
#инцлуде 'РТЦлиб.х'
#дефине СЦРЕЕН_ВИДТХ 128
#дефине СЦРЕЕН_ХЕИГХТ 64

Адафруит_ССД1306 дисплеј ( СЦРЕЕН_ВИДТХ, СЦРЕЕН_ХЕИГХТ, & жица, - 1 ) ;
РТЦ_ДС1307 РТЦ;
цхар дана [ 7 ] [ 12 ] = { 'недеља' , 'Понедељак' , 'уторак' , 'Среда' , 'четвртак' , 'петак' , 'субота' } ;
празнина подешавања ( ) {
Сериал.бегин ( 115200 ) ;
ако ( ! РТЦ.бегин ( ) ) {
Сериал.принтлн ( „Нисам могао да пронађем РТЦ“ ) ;
док ( 1 ) ;
}
РТЦ.адјуст ( Датум време ( Ф ( __ДАТЕ__ ) , Ф ( __ВРЕМЕ__ ) ) ) ;
ако ( ! приказ.почети ( ССД1306_СВИТЦХЦАПВЦЦ, 0к3Ц ) ) {
Сериал.принтлн ( Ф ( „ССД1306 алокација није успела“ ) ) ;
за ( ;; ) ;
}
кашњење ( 1000 ) ;
дисплаи.цлеарДисплаи ( ) ;
дисплаи.сетТектСизе ( 2 ) ;
дисплаи.сетТектЦолор ( БЕО ) ;
дисплаи.сетЦурсор ( 30 , двадесет ) ;
дисплаи.принтлн ( 'Линукс' ) ;
дисплеј.дисплеј ( ) ;
кашњење ( 3000 ) ;
дисплаи.цлеарДисплаи ( ) ;
}
празнина петља ( ) {
Датум и време сада = РТЦ.сада ( ) ;
дисплаи.цлеарДисплаи ( ) ;
дисплаи.сетТектСизе ( 2 ) ;
дисплаи.сетЦурсор ( 0 , 0 ) ;
дисплаи.принт ( сада.дан ( ) ) ;
дисплаи.принт ( '/' ) ;
дисплаи.принт ( сада.месец ( ) ) ;
дисплаи.принт ( '/' ) ;
дисплаи.принт ( сада.године ( ) ) ;
дисплаи.принтлн ( дана [ нов.даиОфТхеВеек ( ) ] ) ;
дисплаи.принтлн ( '' ) ;
дисплаи.сетЦурсор ( 0 , 40 ) ;
ако ( сада.час ( ) < 10 )
дисплаи.принт ( '0' ) ;
дисплаи.принт ( сада.час ( ) ) ;
дисплаи.принт ( ':' ) ;
ако ( сада.минут ( ) < 10 )
дисплаи.принт ( '0' ) ;
дисплаи.принт ( сада.минут ( ) ) ;
дисплаи.принт ( ':' ) ;
ако ( сада.друго ( ) < 10 )
дисплаи.принт ( '0' ) ;
дисплаи.принтлн ( сада.друго ( ) ) ;
дисплеј.дисплеј ( ) ;
}

Код је почео са библиотекама које смо инсталирали за РТЦ и екран. Након тога, дефинише величину екрана и адресу приказа. Иницијализује низ са именима радних дана.

Тхе подесити део почиње серијском комуникацијом. Проверава да ли РТЦ и екран раде или не. Након тога, дефинисали смо стринг текст „Линукхинт“ који ће се приказати 3 секунде. Ово је само почетна или почетна порука, ову поруку такође можете модификовати својим прилагођеним текстом.

Тхе петља функција добија датум и време модула ДС1307. Након тога брише екран и штампа датум и време на форматиран начин. Код такође додаје водеће нуле сатима, минутима и секундама, у случају да су њихове вредности мање од 10.

7. Хардвер

Након учитавања кода на ЕСП32 плочу, видећете следећи излаз на ОЛЕД екрану. За хардвер смо користили ОЛЕД екран и И2Ц РТЦ ДС1307 модул. Користи се ЕСП32 плоча са 30 пинова. Такође можете експериментисати са било којом другом ЕСП32 плочом, али водите рачуна да правилно повежете И2Ц пинове.

Закључак

РТЦ ДС1307 има 56-бајтни СРАМ са подршком за резервну батерију. То је 8-пински уређај који користи И2Ц комуникациони протокол. За повезивање ДС1307 РТЦ модула са ЕСП32, можете користити И2Ц пинове (ГПИО 22 (СЦЛ) и ГПИО 21 (СДА)) на ЕСП32 плочи. Можете одштампати време на Ардуино ИДЕ конзоли или користити било који екран као што је ОЛЕД или И2Ц ЛЦД за приказ времена. ДС1307 РТЦ модул је користан уређај за праћење времена и датума у ​​различитим апликацијама. Неке главне апликације укључују регистраторе података, дигиталне сатове и паметне сатове.