NODEMCU Lua ESP8266 Իրական ժամանակի ժամացույցով (RTC) և EEPROM: 7 քայլ
NODEMCU Lua ESP8266 Իրական ժամանակի ժամացույցով (RTC) և EEPROM: 7 քայլ
Anonim
NODEMCU Lua ESP8266 Իրական ժամանակի ժամացույցով (RTC) և EEPROM
NODEMCU Lua ESP8266 Իրական ժամանակի ժամացույցով (RTC) և EEPROM

Youիշտ ժամանակ ստանալը էական նշանակություն ունի, եթե ցանկանում եք տվյալների մատյան պահել: Ինտերնետի աղբյուրներից ժամանակ ստանալու տարբեր եղանակներ կան:

Դուք կարող եք հարցնել, թե ինչու չօգտագործել ESP8266- ը ՝ ձեզ համար ժամանակ պահելու համար: Դե, կարող եք, այն ունի իր ներքին RTC (Իրական ժամանակի ժամացույց), բայց ESP8266- ն ունի 3 տարբեր աշխատանքային ժամացույցի հաճախականություններ `52 ՄՀց, երբ այն բեռնվում է, 80 ՄՀց սովորական աշխատանքի ընթացքում և 160 ՄՀց` ուժեղացման դեպքում: Եթե Ձեզ անհրաժեշտ է ավելի ճշգրիտ ժամանակի պահում, հատկապես ավելի երկար ժամանակահատվածներում, ապա արտաքին RTC- ն կարող է լուծում տալ: Այս մոդուլներն ունեն նաև մարտկոցի պահուստ ՝ էներգիայի կորստի դեպքում: RTC- ն սարսափելի ճշգրիտ չէ, քանի որ այն հաշվում է դրա ստեղծման պահից անցած ժամանակը, և չնայած դա կարող է անել շատ ծրագրերի դեպքում, այն կարող է բավականաչափ լավ չլինել կրիտիկական ժամանակը պահելու համար: Հնարավոր է ստանալ ճշգրիտ ժամանակը SNTP ժամանակային սերվերից, որից RTC- ն կարող է թարմացվել կանոնավոր պարբերականությամբ `անհրաժեշտության դեպքում:

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- ի I/O կապերին (համապատասխանաբար փոխել կոդը): Այս մոդուլին անհրաժեշտ է միացնել միայն ձախ կողմի կապում:

Քայլ 1: Google ամանակ

Google Time
Google Time

Բազմաթիվ օրինակներ կան ՝ Google- ից ժամանակ հատկացնելու և այսպիսի տեսք ունենալու համար: Երբ գործարկում եք GoogleTime.lua ծրագիրը, դուք ստանում եք այսպիսի արդյունք.

dofile ("GoogleTime.lua")> Timeամանակը `ուրբ., 15 դեկտեմբերի 2017 11:19:45 GMT

Այս մեթոդի խնդիրն այն է, որ դուք ստանում եք ժամանակը լարային ձևաչափով, և դուք պետք է տողը բաժանեք դրա առանձին բիթերի ժամերով, րոպեներով, վայրկյաններով և այլն: Աշխարհական լեզվով ասած, սա այն վայրկյանների թիվն է, որն անցել է 1970 թվականի հունվարի 1 -ից մինչև մեր օրերն ու օրերը: UNIX դարաշրջանը (1970/01/01 00:00:00) օգտագործվում է համակարգչային օպերացիոն համակարգերի մեծ մասի կողմից, իսկ անցած ժամանակը պահվում է որպես ստորագրված 32 բիթանոց համար: Սա նշանակում է, որ այս համակարգը կգործի մինչև 2038 թվականի հունվարի 19 -ը, երբ համարը չափազանց մեծ կդառնա այս կերպ պահելու համար: Մեկ լուծում է համարը պահել որպես 64 բիթ, բայց առայժմ 32 բիթ մեթոդը բավական կլինի:

Ներքին RTC- ում 2015 թվականի հուլիսի 9 -ը, 18:29:49 սահմանելու համար դուք կօգտագործեք այս տողի ծածկագիրը.

rtctime.set (1436430589, 0)

2 պարամետրերն են վայրկյան և միկրո վայրկյան:

Լրացուցիչ տեղեկություններ կարող եք գտնել NodeMCU փաստաթղթերի ընթերցմամբ:

Քայլ 2: SNTP ժամանակի սերվերներ

SNTP ժամանակի սերվերներ
SNTP ժամանակի սերվերներ

Simple Network Time Protocol (SNTP) տրամադրվում է ինտերնետի բազմաթիվ աղբյուրներից, և աշխարհի շատ երկրներ ունեն այս ծառայությունը:

SNTPTime2.lua ծրագիրը սահմանում է ժամանակը ներքին RTC- ում: ESP8266- ը բռնկելիս պետք է ունենաք rtctime & sntp մոդուլներ ձեր կառուցման մեջ: Programրագիրը սերվերից ստանում է ժամանակը վայրկյանների և միկրո վայրկյանների ընթացքում և սահմանում ներքին 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: tingամանակ ստանալը RTC մոդուլից

Tingամանակ ստանալ RTC մոդուլից
Tingամանակ ստանալ RTC մոդուլից

GetRTCTime.lua ծրագիրը կարդում է ժամանակը ներքին RTC- ից:

Առաջին մասը կարդում է ժամանակը և ցուցադրում այն վայրկյանների և միկրովայրկյանների ընթացքում:

Երկրորդ մասը այն փոխակերպում է ավելի ընթերցելի մարդկային ձևաչափի:

tm = rtctime.epoch2cal (rtctime.get ()) զանգահարելիս այն վերադարձնում է.

  • տարի - 1970 ~ 2038
  • երկու ամիս - ընթացիկ տարվա 1 ~ 12 ամիս
  • օր - օր 1 ~ 31 ընթացիկ ամսվա ընթացքում
  • ժամ
  • րոպե
  • վրկ
  • օր - օր 1 ~ 366 ընթացիկ տարում
  • օր - օր 1 ~ 7 ընթացիկ շաբաթում (կիրակի ՝ 1)

Յուրաքանչյուր տարր կարող է մուտք գործել tm [«օր»], tm [«տարի»]…

Լրացուցիչ տեղեկություններ կարող եք գտնել NodeMCU փաստաթղթերի ընթերցմամբ:

DisplaySNTPtime.lua- ն LCD- ի 128 x 64 OLED էկրանով ամսաթիվը և ժամը ցուցադրելու ավելի մշակված միջոց է, քանի որ այն հեշտությամբ միացված է և կարող է օգտագործվել այս ծրագրերի հետ:

Քայլ 4: RTC Օգտվողի հիշողություն

Մի փոքր շեղում ժամանակի պահպանումից `ներքին RTC- ն ESP8266- ում ունի 128 x 32 բիթանոց հիշողության հասցեներ, որոնցից կարող է օգտվել ծրագրավորողը: Նրանք հատկապես օգտակար են, քանի որ կարող են գոյատևել ESP8266- ի խոր քնի ցիկլից: Merրագրավորողը պետք է վերահսկի դրանց օգտագործումը և ապահովի, որ դրանք պատահաբար չգրվեն:

Ես ներառել եմ RTCmem.lua, մի պարզ ծրագիր, որը ցույց է տալիս դրա օգտագործումը: Ձեր կառուցվածքում դուք պետք է ունենաք rtcmem մոդուլ:

Քայլ 5. Արտաքին RTC մոդուլներ

Արտաքին RTC մոդուլներ
Արտաքին RTC մոդուլներ

Արտաքին RTC մոդուլները միանում են ESP8266- ին I2C ինտերֆեյսի միջոցով, որն օգտագործում է միայն երկու մուտք/ելք և աշխատում է ESP-01- ի, ինչպես նաև մյուս ESP8266 սարքերի մեծ մասի հետ:

RTC մոդուլի հասցեն 0x68 է և հասանելի է սովորական I2C հրամանների միջոցով: Այնուամենայնիվ, պետք է հիշել, որ RTC գրանցամատյաններում տվյալները պահվում են BCD ձևաչափով (հիմք 16), ուստի ձեր ծրագրերը պետք է զբաղվեն դրանով: Timeամանակն ու ամսաթիվը պահվում են 7 գրանցամատյանում RTC- ում: Ներքին 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- ն գրում է 1 բայթ տվյալներ EEPROM- ի 0x00 հիշողության վայրում և հետ կարդում դրանք:

Desiderata.lua- ն մի քանի տող է գրում հայտնի տեքստից մինչև EEPROM:

eeRead.lua- ն կարդում է EEPROM- ի տվյալները և տպում դրանք:

Նշում. Այս ծրագրերը պետք է աշխատեն նաև այլ EEPROM տախտակների հետ:

Քայլ 7: Եզրակացություն

Ես փորձել եմ ցույց տալ, թե ինչպես են աշխատում RTC- ն և EEPROM- ը տվյալների գրանցման համար: Սա պարզապես սկիզբ է ձեզ համար `հետագա զարգացման համար: I2C ավտոբուսին կարող եք միացնել տարբեր սարքեր, ինչպիսիք են լույսի տվիչները, բարոմետրիկ ճնշման տվիչները, ջերմաստիճանի և խոնավության տվիչները և գրանցել տվյալները EEPROM- ում:

Խորհուրդ ենք տալիս: