Sadržaj:

NODEMCU Lua ESP8266 sa satom u stvarnom vremenu (RTC) i EEPROM: 7 koraka
NODEMCU Lua ESP8266 sa satom u stvarnom vremenu (RTC) i EEPROM: 7 koraka

Video: NODEMCU Lua ESP8266 sa satom u stvarnom vremenu (RTC) i EEPROM: 7 koraka

Video: NODEMCU Lua ESP8266 sa satom u stvarnom vremenu (RTC) i EEPROM: 7 koraka
Video: Cara mengukur suhu kompor infrared dengan max6675 K-type Thermocoupler (Subtittled) 2024, Studeni
Anonim
NODEMCU Lua ESP8266 sa satom u stvarnom vremenu (RTC) i EEPROM -om
NODEMCU Lua ESP8266 sa satom u stvarnom vremenu (RTC) i EEPROM -om

Dobivanje točnog vremena bitno je ako želite voditi dnevnik podataka. Postoje različiti načini da dobijete vrijeme iz izvora na Internetu.

Možda ćete se upitati zašto ne biste koristili ESP8266 kako biste odvojili vrijeme za sebe? Pa možete, ima vlastiti interni RTC (sat u stvarnom vremenu), ali ESP8266 ima 3 različite radne frekvencije takta - 52 MHz pri pokretanju, 80 MHz tijekom redovnog rada i 160 MHz ako je pojačan. Ako vam je potrebno točnije zadržavanje vremena, osobito tijekom duljih razdoblja, tada bi vanjski RTC mogao pružiti rješenje. Ovi moduli također imaju rezervnu bateriju u slučaju gubitka napajanja. RTC nije strašno točan jer broji vrijeme koje je proteklo od postavljanja i iako može poslužiti za većinu aplikacija, možda nije dovoljno dobro za zadržavanje kritičnog vremena. Moguće je dobiti točno vrijeme sa SNTP vremenskog poslužitelja s kojeg se RTC može ažurirati u redovitim intervalima ako je potrebno.

DS1307 Sitni RTC I2C modul (gore) primjer je ovih stavki i može se kupiti na Ebayu i drugim dobavljačima za manje od 2 funte. Postoje i drugi poput DS1302 i DS3231 koji rade na sličan način i koštaju od 99p naviše.

Modul DS1307 koristi sučelje I2C i za ESP-01 trebao bi biti spojen kao:

Vcc - 3,3 V, Gnd - Gnd, SDA - D3, SCL - D4

SDA i SCL mogu se spojiti na bilo koji od I/O pinova na većim ESP8266 -ovima (prema tome promijenite kôd). Na ovaj modul moraju biti spojeni samo lijevi bočni pinovi.

1. korak: Google Time

Google Time
Google Time

Postoji mnogo primjera kako dobiti vrijeme od Googlea i izgledati ovako. Kada pokrenete program GoogleTime.lua, dobit ćete ovakav rezultat:

dofile ("GoogleTime.lua")> Vrijeme: pet, 15. prosinca 2017. 11:19:45 GMT

Problem s ovom metodom je što dobivate vrijeme u formatu niza i morate niz podijeliti na njegove pojedinačne bitove satima, minutama, sekundama itd. RTC prihvaća vrijeme u posebnom formatu, tj. UNIX vremenskoj oznaci. Laički rečeno, ovo je broj sekundi koje su protekle od četvrtka 1. siječnja 1970. do danas i vremena. UNIX Epoch (1970/01/01 00:00:00) koristi većina računalnih operativnih sustava, a proteklo se vrijeme pohranjuje kao 32 -bitni broj s predznakom. To znači da će ovaj sustav raditi do 19. siječnja 2038. kada će broj postati prevelik za pohranu na ovaj način. Jedno je rješenje pohraniti broj kao 64 bita, ali zasad će 32 -bitna metoda biti dovoljna.

Da biste postavili vrijeme na 9. srpnja 2015. u 18:29:49 na internom RTC -u, upotrijebili biste ovaj redak koda:

rtctime.set (1436430589, 0)

Dva parametra su sekunde i mikro sekunde.

Više informacija možete pronaći u dokumentaciji NodeMCU.

Korak 2: SNTP vremenski poslužitelji

SNTP poslužitelji vremena
SNTP poslužitelji vremena

Jednostavni mrežni vremenski protokol (SNTP) pruža se iz mnogih izvora na Internetu, a mnoge zemlje u svijetu imaju tu uslugu.

Program SNTPTime2.lua postavlja vrijeme na internom RTC -u. Morate imati rtctime & sntp module u svojoj verziji kada flešujete svoj ESP8266. Program dobiva vrijeme s poslužitelja u sekundama i mikro sekundama te postavlja interni RTC pomoću rtctime.set (sec, usec).

Program tada prikazuje datum i vrijeme u različitim formatima.

U svijetu postoji mnogo SNTP poslužitelja, a neki su sljedeći:

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

Svi gornji redovi koda mogu se zamijeniti u programu SNTPTime2.lua.

Na adresama ispod nalazi se još SNTP poslužitelja koji se opet mogu koristiti u programu.

93.170.62.252, 130.88.202.49, 79.135.97.79, ntp.exnet.com

Google također pruža vremenske poslužitelje na ovim adresama:

216.239.35.0, 216.239.35.4, 216.239.35.8, 216.239.35.12

Morate zapamtiti da dobijete vrijeme iz zemlje u kojoj se nalazite ili ćete ga možda morati promijeniti za različite svjetske vremenske zone. Također neke zemlje imaju ljetno računanje vremena, pa ćete se možda morati pozabaviti i time.

Korak 3: Dobivanje vremena od RTC modula

Dobivanje vremena od modula RTC
Dobivanje vremena od modula RTC

Program GetRTCTime.lua očitava vrijeme iz internog RTC -a.

Prvi dio čita vrijeme i prikazuje ga u sekundama i mikrosekundama.

Drugi dio pretvara ga u format čitljiviji za ljude.

pri pozivanju tm = rtctime.epoch2cal (rtctime.get ()) vraća:

  • godina - 1970. ~ 2038
  • pon - mjesec 1 ~ 12 u tekućoj godini
  • dan - dan 1 ~ 31 u tekućem mjesecu
  • sat
  • min
  • sek
  • dan - dan 1 ~ 366 u tekućoj godini
  • wday - dan 1 ~ 7 u tekućem tjednu (nedjelja je 1)

Svakoj stavci se može pristupiti kao tm ["dan"], tm ["godina"] …

Više informacija možete pronaći u dokumentaciji NodeMCU.

DisplaySNTPtime.lua je složeniji način prikazivanja datuma i vremena na LCD 128 x 64 OLED zaslonu, jer se lako povezuje i može se koristiti s tim programima.

Korak 4: Korisnička memorija RTC -a

Malo odstupanja od mjerenja vremena je što interni RTC na ESP8266 ima 128 x 32 bitne memorijske adrese kojima programer može pristupiti. Posebno su korisni jer mogu preživjeti ciklus dubokog sna ESP8266. Na programeru je da kontrolira njihovu upotrebu i osigura da se slučajno ne prepišu.

Uključio sam RTCmem.lua, jednostavan program koji dokazuje njegovu upotrebu. Morate imati rtcmem modul u svojoj verziji.

Korak 5: Vanjski RTC moduli

Vanjski RTC moduli
Vanjski RTC moduli

Vanjski RTC moduli povezuju se s ESP8266 putem I2C sučelja, koje koristi samo dva I/O pina, pa radi s ESP-01, kao i s većinom drugih ESP8266 uređaja.

Adresa RTC modula je 0x68 i pristupa joj se pomoću normalnih I2C naredbi. Postoji, međutim, nešto što treba imati na umu, podaci u RTC registrima pohranjeni su u BCD formatu (baza 16), pa se vaši programi moraju nositi s tim. Vrijeme i datum pohranjeni su u 7 registara unutar RTC -a. Na unutarnjem RTC -u za BCD konverzije brine modul rtctime.

SetExtRTC.lua pretvara podatke u BCD i postavlja vrijeme.

ReadExtRTC.lua čita vremenske podatke i ispisuje ih. NAPOMENA: podaci se ispisuju heksadecimalno.

Nisam potrošio puno vremena na oblikovanje zaslona jer možda imate vlastite ideje o tome što želite učiniti s datumom i vremenom. Ovo je osnovni motor u svom najjednostavnijem obliku, tako da ga možete dalje razvijati ako želite.

Korak 6: Zapisivanje podataka

Zapisivanje podataka
Zapisivanje podataka

Ako pomno pogledate RTC module, primijetit ćete da imaju ugrađen AT24C32 EEPROM IC ili sličan, ili možete koristiti gornju 24C256 ploču. Većina ovih EEPROM IC -ova ima slične pin ulaze kao gore. Dolaze s različitim količinama prostora za pohranu, ali svima im se pristupa na isti način. Budući da je AT24C32 već lemljen na ploči, može se koristiti izravno s I2C vanjskog RTC -a.

Ako imate samo 24C256 IC ili slično, možete ga postaviti na ploču za kruh, spojiti A1, A2 i A3 na Gnd, Vcc na 3,3 V i SDA I SCL na I2C, WP možete ostaviti plutajućim. Neki IC -ovi EEPROM -a rade samo na 5 V, stoga prvo provjerite odgovarajuću podatkovnu tablicu.

ByteWR.lua zapisuje 1 bajt podataka u memorijsko mjesto 0x00 EEPROM -a i čita ih natrag.

Desiderata.lua ispisuje nekoliko redaka iz poznatog teksta na EEPROM.

eeRead.lua čita podatke s EEPROM -a i ispisuje ih.

NAPOMENA: Ovi programi trebali bi raditi i s drugim EEPROM pločama.

Korak 7: Zaključak

Pokušao sam pokazati kako RTC i EEPROM rade za bilježenje podataka. Ovo vam je samo početak za daljnji razvoj. Na I2C sabirnicu možete spojiti razne uređaje, poput svjetlosnih senzora, senzora barometrijskog tlaka, osjetnika temperature i vlažnosti i snimiti podatke na EEPROM.

Preporučeni: