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, Juli
Anonim
NODEMCU Lua ESP8266 sa satom u realnom vremenu (RTC) i EEPROM -om
NODEMCU Lua ESP8266 sa satom u realnom vremenu (RTC) i EEPROM -om

Dobijanje tačnog vremena je bitno 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 svoj vlastiti interni RTC (sat u stvarnom vremenu), ali ESP8266 ima 3 različite radne frekvencije takta - 52 MHz pri pokretanju, 80 MHz tokom redovnog rada i 160 MHz ako je pojačan. Ako vam je potrebno preciznije vođenje vremena, posebno na duže periode, 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 precizan 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 tačno vrijeme sa SNTP vremenskog servera sa kojeg se RTC može ažurirati u redovnim intervalima ako je potrebno.

DS1307 Sitni RTC I2C modul (gore) je primjer ovih artikala 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 I2C sučelje i za ESP-01 bi trebao biti povezan kao:

Vcc - 3.3v, 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). Samo lijevi bočni pinovi moraju biti povezani na ovaj modul.

Korak 1: Google Time

Google Time
Google Time

Postoji mnogo primjera da dobijete vrijeme od Googlea i izgledate ovako. Kada pokrenete program GoogleTime.lua, dobit ćete ovakav rezultat:

dofile ("GoogleTime.lua")> Vrijeme: Pet, 15. decembar 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 oznaci vremena. Laički rečeno, ovo je broj sekundi koje su protekle od četvrtka 1. januara 1970. do danas i vremena. UNIX Epoch (1970/01/01 00:00:00) koristi većina računarskih operativnih sistema, a proteklo vrijeme se pohranjuje kao potpisan 32 -bitni broj. To znači da će ovaj sistem raditi do 19. januara 2038. godine kada će broj postati prevelik za pohranu na ovaj način. Jedno rješenje je spremanje broja kao 64 bita, ali za sada će biti dovoljna metoda od 32 bita.

Da biste postavili vrijeme na 9. jul 2015. godine, 18:29:49 na internom RTC -u, koristili biste ovu liniju 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 serveri

SNTP vremenski serveri
SNTP vremenski serveri

Jednostavni mrežni vremenski protokol (SNTP) pruža se iz mnogih izvora na Internetu, a mnoge zemlje širom svijeta imaju ovu 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 sa servera u sekundama i mikro sekundama i postavlja interni RTC sa rtctime.set (sec, usec).

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

U svijetu postoji mnogo SNTP servera, 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 ima još SNTP servera koji se opet mogu koristiti u programu.

93.170.62.252, 130.88.202.49, 79.135.97.79, ntp.exnet.com

Google takođe pruža vremenske servere 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: Dobijanje vremena od RTC modula

Dobijanje vremena od RTC modula
Dobijanje vremena od RTC modula

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
  • sec
  • dan - dan 1 ~ 366 u tekućoj godini
  • wday - dan 1 ~ 7 u tekućoj sedmici (nedjelja je 1)

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

Više informacija možete pronaći čitajući NodeMCU dokumentaciju.

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

Korak 4: Korisnička memorija RTC -a

Malo odstupanja od mjerenja vremena je to š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 programerima je da kontroliraju njihovu upotrebu i osiguraju da se slučajno ne prepišu.

Uključio sam RTCmem.lua, jednostavan program koji demonstrira 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 internom 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 mnogo vremena na formatiranje ekrana jer možda imate vlastite ideje o tome šta želite raditi 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 24C256 ploču kao gore. Većina ovih EEPROM IC -ova ima slične pin -ove kao gore. Dolaze s različitim količinama prostora za pohranu, ali svima im se pristupa na isti način. Kako 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 EEPROM IC -ovi rade samo na 5V, pa prvo provjerite odgovarajuću listu s podacima.

ByteWR.lua zapisuje 1 bajt podataka na memorijsku lokaciju 0x00 EEPROM -a i čita ih nazad.

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

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

NAPOMENA: Ovi programi bi trebali 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, senzora temperature i vlažnosti i snimiti podatke na EEPROM.

Preporučuje se: