Мазмуну:

NODEMCU Lua ESP8266 реалдуу убакыт сааты менен (RTC) & EEPROM: 7 кадам
NODEMCU Lua ESP8266 реалдуу убакыт сааты менен (RTC) & EEPROM: 7 кадам

Video: NODEMCU Lua ESP8266 реалдуу убакыт сааты менен (RTC) & EEPROM: 7 кадам

Video: NODEMCU Lua ESP8266 реалдуу убакыт сааты менен (RTC) & EEPROM: 7 кадам
Video: FLProg7: часы реального времени и температура | ESP32 NodeMCU | Визуальное программирование для 2024, Май
Anonim
NODEMCU Lua ESP8266 реалдуу убакыт сааты менен (RTC) & EEPROM
NODEMCU Lua ESP8266 реалдуу убакыт сааты менен (RTC) & EEPROM

Туура убакытты алуу, эгерде сиз маалымат журналын сактоону кааласаңыз. Убакытты интернеттеги булактардан алуунун ар кандай жолдору бар.

Сиз эмне үчүн ESP8266ди колдонуп, убактыңызды бөлбөйсүз деп сурашыңыз мүмкүн? Мүмкүн, анын өзүнүн ички RTC (Real Time Clock) бар, бирок ESP8266да 3 башка иштөө жыштыгы бар - ал жүктөлгөндө 52 МГц, үзгүлтүксүз иштөө учурунда 80 МГц, ал эми күчөтүлгөндө 160 МГц. Эгерде сизге так убакытты сактоо керек болсо, айрыкча узак мезгилдерде, анда тышкы РТК чечимди бериши мүмкүн. Бул модулдарда кубаттуулук жоголгон учурда батарейканын камдык көчүрмөсү да бар. RTC өтө так эмес, анткени ал орнотулган убакыттан кийин эсептелет жана көпчүлүк колдонмолор үчүн жасалышы мүмкүн, бирок бул маанилүү убакытты сактоо үчүн жетишсиз болушу мүмкүн. Туура убакытты SNTP убакыт серверинен алса болот, андан RTC үзгүлтүксүз жаңыртылышы мүмкүн.

DS1307 Tiny RTC I2C Module (жогоруда) бул нерселердин мисалы болуп саналат жана аларды Ebayден жана башка жеткирүүчүлөрдөн 2 фунт стерлингге сатып алууга болот. DS1302 жана DS3231 сыяктуу башкалар да бар, алар ушундай жол менен иштейт жана баасы 99pдан жогору.

DS1307 модулу I2C интерфейсин колдонот жана ESP-01 үчүн төмөнкүдөй туташуу керек:

Vcc - 3.3v, Gnd - Gnd, SDA - D3, SCL - D4

SDA жана SCL чоңураак ESP8266'дагы I/O казыктарына туташтырылышы мүмкүн (кодду ошого жараша өзгөртүңүз). Бул модулда бир гана сол колу бар казыктарды туташтыруу керек.

1 -кадам: Google убактысы

Google убактысы
Google убактысы

Googleдан убакыт алуунун көптөгөн мисалдары бар жана ушул сыяктуу көрүнөт. GoogleTime.lua программасын иштеткенде, сиз мындай натыйжага ээ болосуз:

dofile ("GoogleTime.lua")> Убактысы: Жума, 15 Дек 2017 11:19:45 GMT

Бул методдун көйгөйү сиз убакыт форматында убакытты аласыз жана сапты анын жеке биттерине бир нече саат, мүнөт, секундага бөлүшүңүз керек. РТК убакытты өзгөчө форматта, башкача айтканда UNIX убакыт штампында кабыл алат. Жөнөкөй сөз менен айтканда, бул 1970 -жылдын 1 -январынан бейшембиден ушул күнгө чейин өткөн секунддардын саны. UNIX доору (1970/01/01 00:00:00) көпчүлүк компьютердик операциялык тутумдарда колдонулат жана өткөн убакыт 32 биттик номер катары сакталат. Бул бул система 2038 -жылдын 19 -январына чейин иштей турганын билдирет, анткени бул жол менен сактоо үчүн бул номер өтө чоң болуп калат. Бир чечим - бул санды 64 бит катары сактоо, бирок азырынча 32 бит ыкмасы жетиштүү болот.

Убакытты 2015 -жылдын 9 -июлуна, 18:29:49 ички RTCде коюу үчүн, сиз бул коддун линиясын колдонмоксуз:

rtctime.set (1436430589, 0)

2 параметр секунд жана микро секунд болуп саналат.

Көбүрөөк маалыматты NodeMCU документтерин окуудан таба аласыз.

2 -кадам: SNTP убакыт серверлери

SNTP убакыт серверлери
SNTP убакыт серверлери

Жөнөкөй Network Time Protocol (SNTP) Интернеттеги көптөгөн булактардан берилет жана дүйнөнүн көптөгөн өлкөлөрүндө бул кызмат бар.

Программа, SNTPTime2.lua ички RTC боюнча убакытты белгилейт. ESP8266 жарк эткенде, сизде rtctime & sntp модулдары болушу керек. Программа серверден убакытты секунданын ичинде жана микро секундада алат жана ички RTC rtctime.set (sec, usec) менен орнотот.

Андан кийин программа күндү жана убакытты ар кандай форматта көрсөтөт.

Дүйнө жүзү боюнча көптөгөн SNTP серверлери бар жана кээ бирлери төмөнкүлөр:

  • sntp.sync ({"216.239.35.0"},
  • sntp.sync ({"0.uk.pool.ntp.org", "0.uk.pool.ntp.org"},
  • sntp.sync ({"3.uk.pool.ntp.org", "143.210.16.201"}},
  • sntp.sync ({"0.uk.pool.ntp.org", "1.uk.pool.ntp.org", "3.uk.pool.ntp.org"},

Жогорудагы бардык коддорду SNTPTime2.lua программасына алмаштырса болот.

Төмөнкү даректерде дагы SNTP серверлери бар, аларды кайра программада колдонсо болот.

93.170.62.252, 130.88.202.49, 79.135.97.79, ntp.exnet.com

Google ошондой эле бул даректер боюнча убакыт серверлерин берет:

216.239.35.0, 216.239.35.4, 216.239.35.8, 216.239.35.12

Сиз турган өлкөдөн убакытты алууну унутпашыңыз керек же аны ар кандай дүйнөлүк убакыт алкактары үчүн өзгөртүүгө туура келиши мүмкүн. Ошондой эле кээ бир өлкөлөрдө жазгы убакыт бар, андыктан сиз да аны менен күрөшүүгө туура келет.

3 -кадам: RTC модулунан убакыт алуу

Убакытты RTC модулунан алуу
Убакытты RTC модулунан алуу

GetRTCTime.lua программасы ички RTCден убакытты окуйт.

Биринчи бөлүк убакытты окуйт жана секундада жана микросекундада көрсөтөт.

Экинчи бөлүк аны адам окуй турган форматка айлантат.

tm = rtctime.epoch2cal (rtctime.get ()) деп атаганда, ал кайра кайтарат:

  • жыл - 1970 ~ 2038
  • пн - ушул жылдын 1-12 айы
  • күн - учурдагы айда 1 ~ 31 күн
  • саат
  • мүн
  • сек
  • күн - ушул жылы 1 ~ 366 -күн
  • wday - учурдагы жумада 1 ~ 7 күн (жекшемби 1)

Ар бир пунктка tm ["day"], tm ["year"] катары кирүүгө болот …

Көбүрөөк маалыматты NodeMCU документтерин окуудан таба аласыз.

DisplaySNTPtime.lua - бул күндү жана убакытты ЖК 128 x 64 OLED дисплейде көрсөтүүнүн эң татаал жолу, анткени ал оңой туташып турат жана бул программалар менен колдонсо болот.

4 -кадам: RTC Колдонуучунун эс тутуму

Убакыттын сакталышынан бир аз алыстоо - бул ESP8266дагы ички RTC, 128 х 32 биттик эс тутум даректерине ээ, аларга программист кире алат. Алар өзгөчө пайдалуу, анткени алар ESP8266нын терең уйку циклинен аман калышат. Алардын колдонулушун көзөмөлдөө жана кокусунан жазылып калбашын камсыздоо программисттин колунда.

Мен анын колдонулушун көрсөткөн жөнөкөй программа RTCmem.lua коштум. Сизде rtcmem модулу болушу керек.

5 -кадам: Тышкы RTC модулдары

Тышкы RTC модулдары
Тышкы RTC модулдары

Тышкы RTC модулдары ESP8266га I2C интерфейси аркылуу туташат, ал эки гана I/O казыгын колдонот, ошондуктан ESP-01 жана башка ESP8266 түзмөктөрүнүн көбү менен иштейт.

RTC модулунун дареги 0x68 жана кадимки I2C буйруктары аркылуу жетилет. Бирок, бир нерсени эстен чыгарбоо керек, RTC реестриндеги маалыматтар BCD форматында сакталат (база 16), андыктан сиздин программаларыңыз бул менен күрөшүшү керек. Убакыт жана күн РТКнын ичинде 7 реестрде сакталат. Ички RTCде, BCD конверсиялары rtctime модулу тарабынан каралат.

SetExtRTC.lua маалыматтарды BCDге айландырат жана убакытты белгилейт.

ReadExtRTC.lua убакыт маалыматын окуйт жана басып чыгарат. ЭСКЕРТҮҮ: маалыматтар он алтылык басылып чыгарылат.

Мен дисплейди форматтоого көп убакыт короткон жокмун, анткени сизде датасы жана убактысы менен эмне кылгыңыз келгени жөнүндө өз пикириңиз болушу мүмкүн. Бул эң негизги түрдөгү негизги кыймылдаткыч, эгер кааласаңыз, аны андан ары өнүктүрө аласыз.

6 -кадам: Маалыматтарды каттоо

Маалыматтарды каттоо
Маалыматтарды каттоо

Эгерде сиз RTC модулдарын жакшылап карасаңыз, анда аларда AT24C32 EEPROM IC же окшоштору бар экенин байкайсыз, же жогоруда көрсөтүлгөндөй 24C256 тактасын колдоно аласыз. Бул EEPROM ICлеринин көбү жогорудагыдай окшош пин чыгууларга ээ. Алар ар кандай көлөмдөгү сактагычтар менен келет, бирок алардын баарына бирдей жол менен кирүүгө болот. AT24C32 тактага ээригендиктен, аны тышкы RTC I2Cден түз колдонсо болот.

Эгерде сизде 24C256 IC же ушуга окшош болсо, аны нан тактасына орнотсоңуз болот, A1, A2 жана A3ты Gndге, Vccти 3.3Vга жана SDA AND SCLди I2Cге туташтырсаңыз болот, WP калкып кете берет. Кээ бир EEPROM ICлери 5Vда гана иштейт, андыктан биринчи тиешелүү маалымат баракчасын текшериңиз.

ByteWR.lua EEPROMдун 0x00 эс тутумуна 1 байт маалыматтарды жазат жана кайра окуйт.

Desiderata.lua белгилүү тексттен EEPROMга бир нече сап жазат.

eeRead.lua EEPROMдан маалыматтарды окуп, басып чыгарат.

ЭСКЕРТҮҮ: Бул программалар башка EEPROM такталары менен иштеши керек.

7 -кадам: Жыйынтык

Мен маалыматтарды каттоо үчүн RTC жана EEPROM кандай иштээрин көрсөтүүгө аракет кылдым. Бул сизди андан ары өнүктүрүү үчүн жөн гана баштоочу. Сиз I2C автобусуна жарык сенсорлору, барометрдик басым сенсорлору, температура жана нымдуулук сенсорлору сыяктуу ар кандай түзмөктөрдү туташтырып, маалыматтарды EEPROMго жаздыра аласыз.

Сунушталууда: