Përmbajtje:

NODEMCU Lua ESP8266 Me orë në kohë reale (RTC) & EEPROM: 7 hapa
NODEMCU Lua ESP8266 Me orë në kohë reale (RTC) & EEPROM: 7 hapa

Video: NODEMCU Lua ESP8266 Me orë në kohë reale (RTC) & EEPROM: 7 hapa

Video: NODEMCU Lua ESP8266 Me orë në kohë reale (RTC) & EEPROM: 7 hapa
Video: FLProg9: Будильник RTC | ESP32 NodeMCU | Визуальное программирование для Arduino 2024, Korrik
Anonim
NODEMCU Lua ESP8266 Me orë në kohë reale (RTC) & EEPROM
NODEMCU Lua ESP8266 Me orë në kohë reale (RTC) & EEPROM

Marrja e kohës së duhur është thelbësore nëse doni të mbani një regjistër të të dhënave. Ka mënyra të ndryshme për të marrë kohë nga burimet në internet.

Ju mund të pyesni pse të mos përdorni ESP8266 për të mbajtur kohë për ju? Epo, mundeni, ai ka RTC -në e tij të brendshme (Ora në kohë reale), por ESP8266 ka 3 frekuenca të ndryshme të orës së funksionimit - 52MHz kur fillon, 80MHz gjatë funksionimit të rregullt dhe 160MHz nëse rritet. Nëse keni nevojë për ruajtje më të saktë të kohës, veçanërisht për periudha më të gjata, atëherë një RTC e jashtme mund të japë një zgjidhje. Këto module gjithashtu kanë një rezervë të baterisë në rast të humbjes së energjisë. Një RTC nuk është jashtëzakonisht e saktë pasi numëron kohën e kaluar që kur është vendosur dhe megjithëse mund të jetë për shumicën e aplikacioneve, mund të mos jetë mjaft e mirë për mbajtjen e kohës kritike. Isshtë e mundur të merrni një kohë të saktë nga një server kohor SNTP nga i cili RTC mund të përditësohet në intervale të rregullta nëse kërkohet.

Moduli DS1307 Tiny RTC I2C (lart) është një shembull i këtyre artikujve dhe mund të blihet në Ebay dhe furnizues të tjerë për më pak se 2. Ka edhe të tjerë si DS1302 dhe DS3231 të cilët punojnë në mënyrë të ngjashme dhe kushtojnë nga 99p e lart.

Moduli DS1307 përdor një ndërfaqe I2C dhe për një ESP-01 duhet të lidhet si:

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

SDA dhe SCL mund të lidhen me ndonjë nga kunjat I/O në ESP8266 më të mëdhenj (ndryshoni kodin në përputhje me rrethanat). Vetëm kunjat e anës së majtë duhet të lidhen në këtë modul.

Hapi 1: Koha e Google

Koha e Google
Koha e Google

Ka shumë shembuj të marrjes së kohës nga Google dhe të duket diçka e tillë. Kur drejtoni programin GoogleTime.lua ju merrni një rezultat si ky:

dofile ("GoogleTime.lua")> Koha: e Premte, 15 Dhjetor 2017 11:19:45 GMT

Problemi me këtë metodë është se ju merrni kohën në formatin e vargut dhe ju duhet ta ndani vargun në copat e tij individuale për orë, minuta, sekonda etj. RTC pranon kohën në një format të veçantë, domethënë vulën kohore UNIX. Në terma laikë, ky është numri i sekondave që kanë kaluar që nga e enjtja 1 janar 1970 e deri në ditët dhe orët e sotme. Epoka UNIX (1970/01/01 00:00:00) përdoret nga shumica e sistemeve operative të kompjuterit dhe koha e kaluar ruhet si një numër i nënshkruar 32 bit. Kjo do të thotë se ky sistem do të funksionojë deri më 19 janar 2038 kur numri do të bëhet shumë i madh për tu ruajtur në këtë mënyrë. Një zgjidhje është ruajtja e numrit si 64 bit, por tani për tani metoda 32 bit do të jetë e mjaftueshme.

Për të caktuar kohën në 2015 9 korrik, 18:29:49 në RTC të brendshme ju do të përdorni këtë linjë kodi:

rtctime.set (1436430589, 0)

2 parametrat janë sekonda dhe mikro sekonda.

Mund të gjeni më shumë informacion duke lexuar Dokumentacionin NodeMCU.

Hapi 2: Serverët e kohës SNTP

Serverat e kohës SNTP
Serverat e kohës SNTP

Protokolli i thjeshtë i kohës së rrjetit (SNTP) ofrohet nga shumë burime në internet, dhe shumë vende në të gjithë botën e kanë këtë shërbim.

Programi, SNTPTime2.lua cakton kohën në RTC të brendshme. Ju duhet të keni modulet rtctime & sntp në ndërtimin tuaj kur ndizni ESP8266 tuaj. Programi merr kohën nga serveri në sekonda dhe mikro sekonda dhe vendos RTC -në e brendshme me rtctime.set (sec, usec).

Programi pastaj shfaq datën dhe kohën në formate të ndryshme.

Ka shumë serverë SNTP në të gjithë botën dhe disa janë si më poshtë:

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

Të gjitha linjat e mësipërme të kodit mund të zëvendësohen në programin SNTPTime2.lua.

Ka më shumë serverë SNTP në adresat më poshtë të cilat përsëri mund të përdoren në program.

93.170.62.252, 130.88.202.49, 79.135.97.79, ntp.exnet.com

Google gjithashtu ofron serverë të kohës në këto adresa:

216.239.35.0, 216.239.35.4, 216.239.35.8, 216.239.35.12

Ju duhet të mbani mend që të merrni kohën nga vendi ku jeni ose mund t'ju duhet ta modifikoni atë për zonat e ndryshme kohore të botës. Gjithashtu disa vende kanë kohë për të kursyer ditën, kështu që ju mund të duhet të merreni edhe me këtë.

Hapi 3: Marrja e kohës nga moduli RTC

Marrja e kohës nga moduli RTC
Marrja e kohës nga moduli RTC

Programi GetRTCTime.lua lexon kohën nga RTC e brendshme.

Pjesa e parë lexon kohën dhe e shfaq atë në sekonda dhe mikrosekonda.

Pjesa e dytë e shndërron atë në një format më të lexueshëm nga njerëzit.

kur thërret tm = rtctime.epoch2cal (rtctime.get ()) kthen:

  • viti - 1970 ~ 2038
  • një muaj - 1 ~ 12 në vitin aktual
  • ditë - ditë 1 ~ 31 në muajin aktual
  • orë
  • min
  • sek
  • ditë - ditë 1 ~ 366 në vitin aktual
  • ditë - ditë 1 ~ 7 në javën aktuale (e diela është 1)

Çdo artikull mund të arrihet si tm ["ditë"], tm ["vit"]…

Mund të gjeni më shumë informacion duke lexuar Dokumentacionin NodeMCU.

DisplaySNTPtime.lua është një mënyrë më e përpunuar për të treguar datën dhe orën në një ekran LCD OLED 128 x 64, pasi lidhet lehtësisht dhe mund të përdoret me këto programe.

Hapi 4: RTC Memory User

Një devijim i vogël nga mbajtja e kohës është RTC e brendshme në ESP8266 ka 128 x 32 bit adresa kujtese që mund të arrihen nga programuesi. Ato janë veçanërisht të dobishme pasi mund t'i mbijetojnë ciklit të gjumit të thellë të ESP8266. I takon programuesit të kontrollojë përdorimin e tyre dhe të sigurohet që ato të mos rishkruhen rastësisht.

Unë kam përfshirë RTCmem.lua, një program i thjeshtë i cili demonstron përdorimin e tij. Ju duhet të keni modul rtcmem në ndërtimin tuaj.

Hapi 5: Modulet e jashtme RTC

Modulet e jashtme RTC
Modulet e jashtme RTC

Modulet e jashtme RTC lidhen me ESP8266 përmes ndërfaqes I2C, e cila përdor vetëm dy kunja I/O dhe kështu punon me ESP-01 si dhe shumicën e pajisjeve të tjera ESP8266.

Adresa e modulit RTC është 0x68 dhe arrihet duke përdorur komandat normale I2C. Sidoqoftë, ka diçka për të pasur parasysh, të dhënat në regjistrat RTC ruhen në formatin BCD (baza 16), kështu që programet tuaja duhet të merren me këtë. Koha dhe data ruhen në 7 regjistra brenda RTC. Në RTC të brendshme, konvertimet BCD kujdesen nga moduli rtctime.

SetExtRTC.lua konverton të dhënat në BCD dhe cakton kohën.

ReadExtRTC.lua lexon të dhënat e kohës dhe i printon ato. SH NOTNIM: të dhënat shtypen në formë gjashtëmbëdhjetë.

Unë nuk kam kaluar shumë kohë duke formatuar ekranin pasi ju mund të keni idetë tuaja për atë që dëshironi të bëni me datën dhe kohën. Ky është motori bazë në formën e tij më të thjeshtë, në mënyrë që ta zhvilloni më tej nëse dëshironi.

Hapi 6: Regjistrimi i të dhënave

Regjistrimi i të dhënave
Regjistrimi i të dhënave

Nëse shikoni nga afër modulet RTC, do të vini re se ato kanë një IC AT24C32 EEPROM ose të ngjashme të ndërtuara në to, ose mund të përdorni një tabelë 24C256 si më sipër. Shumica e këtyre IC EEPROM kanë dalje të ngjashme pin si më sipër. Ato vijnë me sasi të ndryshme magazinimi, por të gjitha arrihen në të njëjtën mënyrë. Meqenëse AT24C32 është ngjitur tashmë në tabelë, mund të përdoret direkt nga I2C i RTC të jashtëm.

Nëse keni vetëm një IC 24C256 ose të ngjashme, mund ta vendosni në një dërrasë buke, të lidhni A1, A2 dhe A3 me Gnd, Vcc në 3.3V dhe SDA DHE SCL në I2C, WP mund të lihet të lundrojë. Disa IC të EEPROM funksionojnë vetëm në 5V, prandaj kontrolloni së pari fletën e të dhënave përkatëse.

ByteWR.lua shkruan 1 bajt të dhëna në vendndodhjen e kujtesës 0x00 të EEPROM dhe i lexon ato përsëri.

Desiderata.lua shkruan disa rreshta nga teksti i famshëm në EEPROM.

eeRead.lua lexon të dhëna nga EEPROM dhe i printon ato.

SHENIM: Këto programe duhet të punojnë edhe me bordet e tjera të EEPROM.

Hapi 7: Përfundimi

Unë jam përpjekur të tregoj se si funksionon RTC dhe EEPROM për regjistrimin e të dhënave. Ky është vetëm një fillestar për ju që të zhvilloheni më tej. Mund të lidhni pajisje të ndryshme me autobusin I2C siç janë sensorët e dritës, sensorët e presionit barometrik, sensorët e temperaturës dhe lagështisë dhe të regjistroni të dhënat në EEPROM.

Recommended: