Мазмұны:

NODEMCU Lua ESP8266 нақты уақыттағы сағаты бар (RTC) және EEPROM: 7 қадам
NODEMCU Lua ESP8266 нақты уақыттағы сағаты бар (RTC) және EEPROM: 7 қадам

Бейне: NODEMCU Lua ESP8266 нақты уақыттағы сағаты бар (RTC) және EEPROM: 7 қадам

Бейне: NODEMCU Lua ESP8266 нақты уақыттағы сағаты бар (RTC) және EEPROM: 7 қадам
Бейне: FLProg9: RTC оятқышы | ESP32 NodeMCU | Arduino визуалды енгізілген бағдарламалау 2024, Шілде
Anonim
NODEMCU Lua ESP8266 нақты уақыттағы сағаты бар (RTC) және EEPROM
NODEMCU Lua ESP8266 нақты уақыттағы сағаты бар (RTC) және EEPROM

Деректер журналын жүргізгіңіз келсе, дұрыс уақытты алу өте маңызды. Уақытты Интернеттегі дереккөздерден алудың түрлі әдістері бар.

Сіз өзіңізге уақыт бөлу үшін ESP8266 неге пайдаланбайсыз деп сұрауыңыз мүмкін? Сіз жасай аласыз, оның ішкі RTC (нақты уақыт сағаты) бар, бірақ ESP8266 -де 3 түрлі жұмыс жиілігі бар - ол қосылу кезінде 52 МГц, тұрақты жұмыс кезінде 80 МГц және күшейтілгенде 160 МГц. Егер сізге дәлірек уақытты сақтау қажет болса, әсіресе ұзақ уақыт ішінде, сыртқы RTC шешімді ұсына алады. Бұл модульдерде қуат жоғалған жағдайда батареяның резервтік көшірмесі бар. RTC өте дәл емес, өйткені ол орнатылғаннан бері өткен уақытты есептейді және бұл көптеген қосымшалар үшін жасалуы мүмкін, бірақ ол уақытты маңызды сақтау үшін жеткіліксіз болуы мүмкін. SNTP уақыт серверінен дәл уақытты алуға болады, егер қажет болса, РТК уақыт аралығы жаңартылуы мүмкін.

DS1307 Tiny RTC I2C модулі (жоғарыда) осы заттардың мысалы болып табылады және оларды Ebay мен басқа жеткізушілерден 2 фунт стерлингке сатып алуға болады. DS1302 және DS3231 сияқты басқалары бар, олар ұқсас жұмыс істейді және бағасы 99p -ден жоғары.

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

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

SDA мен SCL үлкен ESP8266 құрылғысындағы кез келген енгізу -шығару түйреуіштеріне қосылуы мүмкін (сәйкесінше кодты өзгертіңіз). Бұл модульге тек сол жақ түйреуіштерді қосу қажет.

1 -қадам: Google уақыты

Google уақыты
Google уақыты

Google -ден уақытты алудың көптеген мысалдары бар және осындай көрінеді. GoogleTime.lua бағдарламасын іске қосқан кезде сіз келесі нәтижені аласыз:

dofile («GoogleTime.lua»)> Уақыт: жұма, 15 желтоқсан 2017 жыл 11:19:45 GMT

Бұл әдістің мәселесі мынада: сіз уақытты жол форматында аласыз және жолды оның биттеріне сағаттарға, минуттарға, секундтарға бөлуге тура келеді. РТЖ уақытты арнайы форматта, яғни UNIX уақыт белгісінде қабылдайды. Қарапайым тілмен айтқанда, бұл 1970 жылдың 1 қаңтарынан бейсенбіден қазіргі уақытқа дейін өткен секундтар саны. UNIX Epoch (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 уақыт серверлері

Қарапайым желілік уақыт протоколы (SNTP) Интернеттің көптеген көздерінен қамтамасыз етілген және әлемнің көптеген елдерінде бұл қызмет бар.

SNTPTime2.lua бағдарламасы ішкі RTC уақытты орнатады. ESP8266 жыпылықтаған кезде сізде rtctime & sntp модульдері болуы керек. Бағдарлама серверден уақытты секундтар мен микро секундтарда алады және rtctime.set (sec, usec) көмегімен ішкі RTC орнатады.

Содан кейін бағдарлама күн мен уақытты әр түрлі форматта көрсетеді.

Бүкіл әлемде көптеген 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 х 64 OLED дисплейінде күн мен уақытты көрсетудің неғұрлым күрделі әдісі, себебі ол оңай қосылады және оны осы бағдарламалармен қолдануға болады.

4 -қадам: RTC пайдаланушы жады

Уақытты сақтаудан сәл ауытқу - бұл ESP8266 ішіндегі ішкі RTC, бағдарламашы қол жеткізе алатын 128 х 32 биттік жады адрестері. Олар әсіресе пайдалы, өйткені олар ESP8266 терең ұйқы циклінен шыға алады. Оларды қолдануды бақылау және олардың кездейсоқ қайта жазылмауын қамтамасыз ету бағдарламашыға байланысты.

Мен оны қолдануды көрсететін қарапайым бағдарлама RTCmem.lua қостым. Құрылымда rtcmem модулі болуы керек.

5 -қадам: Сыртқы RTC модульдері

Сыртқы RTC модульдері
Сыртқы RTC модульдері

Сыртқы RTC модульдері ESP8266-ға I2C интерфейсі арқылы қосылады, ол тек екі енгізу-шығару түйреуішін қолданады, сондықтан 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 тек 5В жұмыс істейді, сондықтан алдымен тиісті деректер парағын тексеріңіз.

ByteWR.lua EEPROM -дің 0x00 жад орнына 1 байт дерек жазады және оны кері оқиды.

Desiderata.lua әйгілі мәтіннен EEPROM -ге бірнеше жолдар жазады.

eeRead.lua EEPROM деректерін оқиды және оны басып шығарады.

ЕСКЕРТПЕ: Бұл бағдарламалар басқа EEPROM тақталарымен жұмыс істеуі керек.

7 -қадам: Қорытынды

Мен деректерді тіркеу үшін RTC және EEPROM қалай жұмыс істейтінін көрсетуге тырыстым. Бұл сізге одан әрі даму үшін бастама. I2C шинасына әр түрлі құрылғыларды қосуға болады, мысалы, жарық сенсорлары, барометрлік қысым датчиктері, температура мен ылғалдылық сенсорлары және EEPROM -ге деректерді жазу.

Ұсынылған: