Turinys:

„NODEMCU Lua ESP8266“su laikrodžiu realiuoju laiku (RTC) ir EEPROM: 7 žingsniai
„NODEMCU Lua ESP8266“su laikrodžiu realiuoju laiku (RTC) ir EEPROM: 7 žingsniai

Video: „NODEMCU Lua ESP8266“su laikrodžiu realiuoju laiku (RTC) ir EEPROM: 7 žingsniai

Video: „NODEMCU Lua ESP8266“su laikrodžiu realiuoju laiku (RTC) ir EEPROM: 7 žingsniai
Video: LDmicro 14: ЖК-дисплей I2C и часы реального времени DS3231 (программирование лестничной схемы ПЛК микроконтроллера с помощью LDmicro) 2024, Liepa
Anonim
„NODEMCU Lua ESP8266“su laikrodžiu realiuoju laiku (RTC) ir EEPROM
„NODEMCU Lua ESP8266“su laikrodžiu realiuoju laiku (RTC) ir EEPROM

Tinkamo laiko nustatymas yra labai svarbus, jei norite vesti duomenų žurnalą. Yra įvairių būdų, kaip gauti laiko iš šaltinių internete.

Galite paklausti, kodėl nepasinaudojus ESP8266, kad sugaištumėte laiko sau? Jūs galite, jis turi savo vidinį RTC (realaus laiko laikrodį), tačiau ESP8266 turi 3 skirtingus veikimo laikrodžio dažnius - 52MHz, kai jis paleidžiamas, 80MHz įprasto darbo metu ir 160MHz, jei padidinamas. Jei jums reikia tikslesnio laiko, ypač ilgesniam laikui, sprendimas gali būti išorinis RTC. Šie moduliai taip pat turi akumuliatoriaus atsarginę kopiją dingus elektrai. RTC nėra baisiai tikslus, nes skaičiuojamas laikas, praėjęs nuo jo nustatymo, ir nors tai gali būti padaryta daugumai programų, jis gali būti nepakankamai geras kritiniam laikui. Tikslų laiką galima gauti iš SNTP laiko serverio, iš kurio prireikus galima reguliariai atnaujinti RTC.

„DS1307 Tiny RTC I2C“modulis (aukščiau) yra šių elementų pavyzdys ir jį galima įsigyti „Ebay“ir kituose tiekėjams už mažiau nei 2 svarus. Taip pat yra kitų, tokių kaip DS1302 ir DS3231, kurie veikia panašiai ir kainuoja nuo 99 p.

DS1307 modulis naudoja I2C sąsają, o ESP-01 turi būti prijungtas taip:

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

SDA ir SCL galima prijungti prie bet kurio didesnio ESP8266 įvesties/išvesties kaiščio (atitinkamai pakeiskite kodą). Prie šio modulio reikia prijungti tik kairės pusės kaiščius.

1 veiksmas: „Google“laikas

„Google“laikas
„Google“laikas

Yra daug pavyzdžių, kaip gauti laiko iš „Google“ir atrodyti maždaug taip. Vykdydami programą „GoogleTime.lua“gausite tokį rezultatą:

dofile ("GoogleTime.lua")> Laikas: penktadienis, 2017 m. gruodžio 15 d. 11:19:45 GMT

Šio metodo problema yra ta, kad jūs gaunate laiką eilutės formatu ir turite padalinti eilutę į atskirus bitus valandoms, minutėms, sekundėms ir tt. RTC priima laiką specialiu formatu, ty UNIX laiko žyma. Pasaulietis tai sekundžių skaičius, praėjęs nuo 1970 m. Sausio 1 d. Ketvirtadienio iki šių dienų. UNIX Epochą (1970/01/01 00:00:00) naudoja dauguma kompiuterių operacinių sistemų, o praėjęs laikas saugomas kaip pasirašytas 32 bitų skaičius. Tai reiškia, kad ši sistema veiks iki 2038 m. Sausio 19 d., Kai skaičius taps per didelis, kad būtų galima saugoti. Vienas iš sprendimų yra išsaugoti skaičių 64 bitais, tačiau kol kas pakaks 32 bitų metodo.

Norėdami nustatyti laiką iki 2015 m. Liepos 9 d., 18:29:49 vidiniame RTC, naudokite šią kodo eilutę:

rtctime.set (1436430589, 0)

Du parametrai yra sekundės ir mikrosekundės.

Daugiau informacijos rasite skaitydami „NodeMCU“dokumentaciją.

2 žingsnis: SNTP laiko serveriai

SNTP laiko serveriai
SNTP laiko serveriai

Paprastas tinklo laiko protokolas (SNTP) teikiamas iš daugelio interneto šaltinių, ir daugelis pasaulio šalių turi šią paslaugą.

Programa SNTPTime2.lua nustato vidinio RTC laiką. Turite turėti rtctime & sntp modulius, kai paleidžiate ESP8266. Programa gauna laiką iš serverio sekundėmis ir mikrosekundėmis ir nustato vidinį RTC su rtctime.set (sec, usec).

Tada programa rodo datą ir laiką įvairiais formatais.

Visame pasaulyje yra daug SNTP serverių, o kai kurie yra tokie:

  • 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"},

Visos aukščiau pateiktos kodo eilutės gali būti pakeistos į SNTPTime2.lua programą.

Žemiau esančiais adresais yra daugiau SNTP serverių, kuriuos vėl galima naudoti programoje.

93.170.62.252, 130.88.202.49, 79.135.97.79, ntp.exnet.com

„Google“taip pat teikia laiko serverius šiais adresais:

216.239.35.0, 216.239.35.4, 216.239.35.8, 216.239.35.12

Turite nepamiršti gauti laiko iš šalies, kurioje esate, arba gali tekti jį pakeisti skirtingoms pasaulio laiko juostoms. Be to, kai kuriose šalyse yra vasaros laikas, todėl gali tekti susidurti ir su tuo.

3 žingsnis: Gaukite laiko iš RTC modulio

Laiko gavimas iš RTC modulio
Laiko gavimas iš RTC modulio

Programa „GetRTCTime.lua“nuskaito laiką iš vidinio RTC.

Pirmoje dalyje skaitomas laikas ir rodomas sekundėmis ir mikrosekundėmis.

Antroji dalis paverčia ją labiau žmonėms suprantamu formatu.

skambinant tm = rtctime.epoch2cal (rtctime.get ()), jis grąžina:

  • metai - 1970 ~ 2038 m
  • 1–12 mėnesių einamaisiais metais
  • diena - einamojo mėnesio 1–31 diena
  • valandą
  • min
  • sek
  • diena - einamųjų metų 1 ~ 366 diena
  • wday - 1–7 diena dabartinę savaitę (sekmadienis yra 1)

Prie kiekvieno elemento galima prisijungti kaip tm ["diena"], tm ["metai"]…

Daugiau informacijos rasite skaitydami „NodeMCU“dokumentaciją.

„DisplaySNTPtime.lua“yra sudėtingesnis būdas rodyti datą ir laiką LCD 128 x 64 OLED ekrane, nes yra lengvai prijungiamas ir gali būti naudojamas su šiomis programomis.

4 žingsnis: RTC vartotojo atmintis

Šiek tiek nukrypstant nuo laiko laikymo, vidinis ESP8266 RTC turi 128 x 32 bitų atminties adresus, kuriuos gali pasiekti programuotojas. Jie yra ypač naudingi, nes gali išgyventi ESP8266 gilaus miego ciklą. Programuotojas turi kontroliuoti jų naudojimą ir užtikrinti, kad jie nebūtų perrašyti atsitiktinai.

Įtraukiau RTCmem.lua, paprastą programą, kuri parodo jos naudojimą. Savo kūrinyje turite turėti rtcmem modulį.

5 žingsnis: išoriniai RTC moduliai

Išoriniai RTC moduliai
Išoriniai RTC moduliai

Išoriniai RTC moduliai jungiasi prie ESP8266 per I2C sąsają, kuri naudoja tik du įvesties/išvesties kaiščius, todėl veikia su ESP-01 ir dauguma kitų ESP8266 įrenginių.

RTC modulio adresas yra 0x68 ir pasiekiamas naudojant įprastas I2C komandas. Tačiau reikia nepamiršti, kad RTC registrų duomenys saugomi BCD formatu (16 bazė), todėl jūsų programos turi tai spręsti. Laikas ir data saugomi 7 RTC registruose. Vidiniame RTC BCD konvertavimu pasirūpina rtctime modulis.

„SetExtRTC.lua“konvertuoja duomenis į BCD ir nustato laiką.

„ReadExtRTC.lua“nuskaito laiko duomenis ir juos išspausdina. PASTABA: duomenys spausdinami šešioliktainiais skaičiais.

Aš neskiriau daug laiko ekrano formatavimui, nes galbūt turite savo idėjų apie tai, ką norite daryti su data ir laiku. Tai yra paprasčiausias pagrindinis variklis, kad, jei norite, galėtumėte jį toliau plėtoti.

6 veiksmas: duomenų registravimas

Duomenų registravimas
Duomenų registravimas

Jei atidžiai pažvelgsite į RTC modulius, pastebėsite, kad juose yra įmontuotas AT24C32 EEPROM IC arba panašus, arba galite naudoti 24C256 plokštę, kaip aprašyta aukščiau. Dauguma šių EEPROM IC turi panašius kaiščius, kaip nurodyta aukščiau. Juose yra įvairių saugojimo vietų, tačiau visi jie pasiekiami vienodai. Kadangi AT24C32 jau yra prilituotas prie plokštės, jį galima naudoti tiesiai iš išorinio RTC I2C.

Jei turite tik 24C256 IC ar panašų, galite jį nustatyti duonos lentoje, prijunkite A1, A2 ir A3 prie Gnd, Vcc prie 3.3V ir SDA IR SCL prie I2C, WP gali būti plaukiojantis. Kai kurie EEPROM IC veikia tik esant 5 V įtampai, todėl pirmiausia patikrinkite atitinkamą duomenų lapą.

ByteWR.lua įrašo 1 baitą duomenų į EEPROM atminties vietą 0x00 ir perskaito.

Desiderata.lua parašo keletą eilučių nuo garsaus teksto iki EEPROM.

„eeRead.lua“skaito duomenis iš EEPROM ir juos išspausdina.

PASTABA: Šios programos turėtų veikti ir su kitomis EEPROM plokštėmis.

7 žingsnis: Išvada

Bandžiau parodyti, kaip RTC ir EEPROM veikia duomenų registravimui. Tai tik pradžia jums tobulėti toliau. Prie I2C magistralės galite prijungti įvairius įrenginius, pavyzdžiui, šviesos jutiklius, barometrinio slėgio jutiklius, temperatūros ir drėgmės jutiklius ir įrašyti duomenis į EEPROM.

Rekomenduojamas: