Kazalo:

NODEMCU Lua ESP8266 z uro v realnem času (RTC) in EEPROM: 7 korakov
NODEMCU Lua ESP8266 z uro v realnem času (RTC) in EEPROM: 7 korakov

Video: NODEMCU Lua ESP8266 z uro v realnem času (RTC) in EEPROM: 7 korakov

Video: NODEMCU Lua ESP8266 z uro v realnem času (RTC) in EEPROM: 7 korakov
Video: FLProg9: Будильник RTC | ESP32 NodeMCU | Визуальное программирование для Arduino 2024, November
Anonim
NODEMCU Lua ESP8266 z uro v realnem času (RTC) & EEPROM
NODEMCU Lua ESP8266 z uro v realnem času (RTC) & EEPROM

Če želite voditi dnevnik podatkov, je bistven pravilen čas. Obstajajo različni načini pridobivanja časa iz virov na internetu.

Lahko se vprašate, zakaj ne uporabite ESP8266, da bi si vzeli čas zase? No, lahko, ima svoj notranji RTC (ura realnega časa), vendar ima ESP8266 3 različne delovne frekvence - 52 MHz pri zagonu, 80 MHz med rednim delovanjem in 160 MHz, če je ojačan. Če potrebujete natančnejše merjenje časa, zlasti v daljših obdobjih, potem lahko rešitev ponudi zunanji RTC. Ti moduli imajo tudi rezervno baterijo v primeru izpada energije. RTC ni zelo natančen, saj šteje čas, ki je pretekel od njegove nastavitve, in čeprav je za večino aplikacij to morda dovolj, morda ni dovolj dober za kritično shranjevanje časa. Natančen čas je mogoče dobiti od časovnega strežnika SNTP, s katerega je mogoče po potrebi redno posodabljati RTC.

Modul DS1307 Tiny RTC I2C (zgoraj) je primer teh izdelkov in ga je mogoče kupiti na Ebayu in drugih dobaviteljih za manj kot 2 £. Obstajajo tudi drugi, kot sta DS1302 in DS3231, ki delujeta na podoben način in stanejo od 99p navzgor.

Modul DS1307 uporablja vmesnik I2C in za ESP-01 mora biti priključen kot:

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

SDA in SCL lahko priključite na kateri koli I/O zatič na večjih ESP8266 (ustrezno spremenite kodo). Na ta modul je treba priključiti le leve stranske zatiče.

1. korak: Google Time

Googlov čas
Googlov čas

Obstaja veliko primerov, kako si vzeti čas od Googla in izgledati nekako tako. Ko zaženete program GoogleTime.lua, dobite rezultat, kot je ta:

dofile ("GoogleTime.lua")> Čas: pet, 15. december 2017 11:19:45 GMT

Težava pri tej metodi je, da dobite čas v obliki niza in morate niz razdeliti na posamezne bite za ure, minute, sekunde itd. RTC sprejme čas v posebni obliki, to je časovni žig UNIX. Laično rečeno je to število sekund, ki so pretekle od četrtka, 1. januarja 1970, do danes in ure. UNIX Epoch (1970/01/01 00:00:00) uporablja večina računalniških operacijskih sistemov, pretečeni čas pa je shranjen kot podpisana 32 -bitna številka. To pomeni, da bo ta sistem deloval do 19. januarja 2038, ko bo število postalo preveliko za shranjevanje na ta način. Ena od rešitev je shranjevanje števila kot 64 bitov, zaenkrat pa zadošča 32 -bitna metoda.

Za nastavitev časa na 9. julij 2015, 18:29:49 v internem RTC, uporabite to vrstico kode:

rtctime.set (1436430589, 0)

Dva parametra sta sekundi in mikro sekunde.

Več informacij najdete v dokumentaciji NodeMCU.

Korak: Časovni strežniki SNTP

Časovni strežniki SNTP
Časovni strežniki SNTP

Enostavni protokol omrežnega časa (SNTP) je na voljo iz številnih virov na internetu in številne države po vsem svetu imajo to storitev.

Program SNTPTime2.lua nastavi čas na notranjem RTC -ju. Ko utripate svoj ESP8266, morate imeti v svoji zgradbi module rtctime & sntp. Program dobi čas od strežnika v sekundah in mikrosekundah ter nastavi notranji RTC z rtctime.set (sec, usec).

Program nato prikaže datum in čas v različnih oblikah.

Po vsem svetu obstaja veliko strežnikov SNTP, nekateri pa so naslednji:

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

Vse zgornje vrstice kode je mogoče nadomestiti s programom SNTPTime2.lua.

Na spodnjih naslovih je več strežnikov SNTP, ki jih lahko znova uporabite v programu.

93.170.62.252, 130.88.202.49, 79.135.97.79, ntp.exnet.com

Google ponuja tudi časovne strežnike na teh naslovih:

216.239.35.0, 216.239.35.4, 216.239.35.8, 216.239.35.12

Ne pozabite vzeti časa iz države, v kateri ste, ali pa ga boste morali spremeniti za različne svetovne časovne pasove. Tudi nekatere države imajo poletni čas, zato se boste morda morali spoprijeti tudi s tem.

3. korak: Pridobite čas od modula RTC

Pridobivanje časa iz modula RTC
Pridobivanje časa iz modula RTC

Program GetRTCTime.lua bere čas iz notranjega RTC.

Prvi del bere čas in ga prikazuje v sekundah in mikrosekundah.

Drugi del ga pretvori v bolj berljivo obliko.

pri klicu tm = rtctime.epoch2cal (rtctime.get ()) vrne:

  • leto - 1970 ~ 2038
  • pon - mesec 1 ~ 12 v tekočem letu
  • dan - dan 1 ~ 31 v tekočem mesecu
  • uro
  • min
  • sek
  • dan - dan 1 ~ 366 v tekočem letu
  • wday - dan 1 ~ 7 v tekočem tednu (nedelja je 1)

Do vsakega elementa je mogoče dostopati kot tm ["dan"], tm ["leto"] …

Več informacij najdete v dokumentaciji NodeMCU.

DisplaySNTPtime.lua je bolj izpopolnjen način prikaza datuma in časa na LCD -zaslonu 128 x 64 OLED, saj ga je enostavno povezati in ga je mogoče uporabljati s temi programi.

4. korak: Uporabniški pomnilnik RTC

Nekoliko odmik od merjenja časa je, da ima notranji RTC na ESP8266 128 x 32 -bitne pomnilniške naslove, do katerih lahko dostopa programer. Še posebej so uporabni, saj lahko preživijo cikel globokega spanja ESP8266. Programer mora nadzorovati njihovo uporabo in zagotoviti, da niso nenamerno prepisani.

Vključil sem preprost program RTCmem.lua, ki dokazuje njegovo uporabo. V svoji zgradbi morate imeti modul rtcmem.

5. korak: Zunanji moduli RTC

Zunanji moduli RTC
Zunanji moduli RTC

Zunanji moduli RTC se povežejo z ESP8266 prek vmesnika I2C, ki uporablja le dva V/I zatiča in tako deluje tako z ESP-01 kot tudi z večino drugih naprav ESP8266.

Naslov modula RTC je 0x68 in do njega dostopate z običajnimi ukazi I2C. Ne pozabite pa, da so podatki v registrih RTC shranjeni v formatu BCD (osnova 16), zato se morajo vaši programi spoprijeti s tem. Ura in datum sta shranjena v 7 registrih znotraj RTC. Na notranjem RTC -ju za pretvorbe BCD skrbi modul rtctime.

SetExtRTC.lua pretvori podatke v BCD in nastavi čas.

ReadExtRTC.lua bere časovne podatke in jih natisne. OPOMBA: podatki so natisnjeni v šestnajstiški številki.

Nisem porabil veliko časa za oblikovanje zaslona, saj imate morda svoje ideje o tem, kaj želite narediti z datumom in uro. To je osnovni motor v svoji najpreprostejši obliki, tako da ga lahko po želji še razvijate.

6. korak: beleženje podatkov

Zapisovanje podatkov
Zapisovanje podatkov

Če natančno pogledate module RTC, boste opazili, da imajo vgrajen integriran EEPROM IC AT24C32 ali podoben, ali pa uporabite ploščo 24C256, kot je opisano zgoraj. Večina teh mikrokontrolerjev EEPROM ima podobne izhode kot zgoraj. Prihajajo z različnimi količinami prostora za shranjevanje, do vseh pa se dostopa na enak način. Ker je AT24C32 že spajkan na ploščo, ga je mogoče uporabiti neposredno iz I2C zunanjega RTC.

Če imate samo 24C256 IC ali podobno, ga lahko nastavite na plošči za kruh, priključite A1, A2 in A3 na Gnd, Vcc na 3,3 V in SDA IN SCL na I2C, WP lahko pustite plavajoče. Nekateri IC -ji EEPROM delujejo samo pri 5V, zato najprej preverite ustrezen podatkovni list.

ByteWR.lua zapiše 1 bajt podatkov v pomnilniško mesto 0x00 EEPROM -a in jih prebere nazaj.

Desiderata.lua napiše nekaj vrstic iz znanega besedila v EEPROM.

eeRead.lua prebere podatke iz EEPROM -a in jih natisne.

OPOMBA: Ti programi bi morali delovati tudi z drugimi ploščami EEPROM.

7. korak: Zaključek

Poskušal sem pokazati, kako delujeta RTC in EEPROM za beleženje podatkov. To je samo začetek za nadaljnji razvoj. Na vodilo I2C lahko povežete različne naprave, kot so svetlobni senzorji, senzorji barometričnega tlaka, senzorji temperature in vlažnosti ter beležite podatke na EEPROM.

Priporočena: