Sisukord:

NODEMCU Lua ESP8266 reaalajas kellaga (RTC) ja EEPROM: 7 sammu
NODEMCU Lua ESP8266 reaalajas kellaga (RTC) ja EEPROM: 7 sammu

Video: NODEMCU Lua ESP8266 reaalajas kellaga (RTC) ja EEPROM: 7 sammu

Video: NODEMCU Lua ESP8266 reaalajas kellaga (RTC) ja EEPROM: 7 sammu
Video: LDmicro 14: ЖК-дисплей I2C и часы реального времени DS3231 (программирование лестничной схемы ПЛК микроконтроллера с помощью LDmicro) 2024, November
Anonim
NODEMCU Lua ESP8266 reaalajas kella (RTC) ja EEPROM -iga
NODEMCU Lua ESP8266 reaalajas kella (RTC) ja EEPROM -iga

Andmepäeviku pidamiseks on oluline õige aja leidmine. Internetis olevatest allikatest saab aega mitmel viisil.

Võite küsida, miks mitte kasutada ESP8266, et teie jaoks aega hoida? Saate seda teha, sellel on oma sisemine RTC (reaalajas kell), kuid ESP8266 -l on 3 erinevat töötavat taktsagedust - käivitamisel 52 MHz, tavalise töö ajal 80 MHz ja võimenduse korral 160 MHz. Kui vajate täpsemat ajaarvestust, eriti pikema aja jooksul, võib lahendus olla väline RTC. Nendel moodulitel on ka voolukatkestuse korral aku varukoopia. RTC ei ole kohutavalt täpne, kuna see loeb seadistamisest möödunud aega ja kuigi see võib toimuda enamiku rakenduste puhul, ei pruugi see kriitilise aja hoidmiseks piisavalt hea olla. SNTP ajaserverist on võimalik saada täpne aeg, kust RTC -d saab vajadusel korrapäraste ajavahemike järel värskendada.

DS1307 Tiny RTC I2C moodul (ülal) on nende kaupade näide ja seda saab osta Ebayst ja teistelt tarnijatelt vähem kui 2 naela eest. On ka teisi, näiteks DS1302 ja DS3231, mis töötavad sarnaselt ja maksavad alates 99p.

DS1307 moodul kasutab I2C liidest ja ESP-01 jaoks tuleks see ühendada järgmiselt:

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

SDA ja SCL saab ühendada suuremate ESP8266 -de mis tahes I/O -pistikutega (muutke koodi vastavalt). Selle mooduli külge tuleb ühendada ainult vasakpoolsed tihvtid.

Samm: Google'i aeg

Google'i aeg
Google'i aeg

On palju näiteid, kuidas Google'ilt aega saada ja midagi sellist välja näha. Kui käivitate programmi GoogleTime.lua, saate sellise tulemuse:

dofile ("GoogleTime.lua")> Aeg: reede, 15. detsember 2017 11:19:45 GMT

Selle meetodi probleem on see, et saate aja stringivormingus ja peate stringi jagama üksikuteks bittideks tundideks, minutiteks, sekunditeks jne. RTC aktsepteerib aega erivormingus, st UNIX -i ajatempliga. Võhiku mõistes on see sekundite arv, mis on möödunud neljapäevast 1. jaanuarist 1970 kuni tänapäevani. UNIX Epoch (1970/01/01 00:00:00) on kasutusel enamikus arvuti opsüsteemides ja möödunud aeg salvestatakse allkirjastatud 32 -bitise numbrina. See tähendab, et see süsteem töötab kuni 19. jaanuarini 2038, kui number muutub selliseks salvestamiseks liiga suureks. Üks lahendus on salvestada number 64 -bitiseks, kuid praegu piisab 32 -bitisest meetodist.

Sisemises RTC -s aja määramiseks 2015. aasta 9. juulile 18:29:49 peaksite kasutama järgmist koodirida:

rtctime.set (1436430589, 0)

2 parameetrit on sekundid ja mikrosekundid.

Lisateavet leiate NodeMCU dokumentatsioonist.

2. samm: SNTP ajaserverid

SNTP ajaserverid
SNTP ajaserverid

Lihtsat võrguajaprotokolli (SNTP) pakuvad paljud Interneti -allikad ja paljudes riikides üle maailma on see teenus saadaval.

Programm SNTPTime2.lua määrab sisemise RTC aja. ESP8266 välgutamisel peab teie ehituses olema rtctime & sntp moodul. Programm saab serverilt aega sekundites ja mikrosekundites ning määrab sisemise RTC väärtuseks rtctime.set (sec, usec).

Seejärel kuvab programm kuupäeva ja kellaaja erinevates vormingutes.

Kogu maailmas on palju SNTP -servereid ja mõned neist on järgmised:

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

Kõik ülaltoodud koodiridad saab asendada programmiga SNTPTime2.lua.

Allolevatel aadressidel on rohkem SNTP -servereid, mida saab programmis uuesti kasutada.

93.170.62.252, 130.88.202.49, 79.135.97.79, ntp.exnet.com

Google pakub ka ajaservereid järgmistel aadressidel:

216.239.35.0, 216.239.35.4, 216.239.35.8, 216.239.35.12

Peate meeles pidama, et saate aja oma riigist, kus viibite, või peate seda muutma erinevate maailma ajavööndite jaoks. Samuti on mõnes riigis suveaeg, nii et peate võib -olla ka sellega tegelema.

3. samm: RTC -moodulist aja hankimine

RTC moodulist aja saamine
RTC moodulist aja saamine

Programm GetRTCTime.lua loeb aega sisemiselt RTC -lt.

Esimene osa loeb aega ja kuvab selle sekundites ja mikrosekundites.

Teine osa muudab selle inimloetavamaks.

helistamisel tm = rtctime.epoch2cal (rtctime.get ()) tagastab:

  • aasta - 1970 ~ 2038
  • esmakuu 1–12 jooksval aastal
  • päev - jooksva kuu 1 ~ 31 päev
  • tund
  • min
  • sek
  • päev - päev 1 ~ 366 jooksval aastal
  • wday - jooksva nädala 1–7 päev (pühapäev on 1)

Igale üksusele pääseb juurde kui tm ["päev"], tm ["aasta"]…

Lisateavet leiate NodeMCU dokumentatsioonist.

DisplaySNTPtime.lua on keerukam viis kuupäeva ja kellaaja kuvamiseks LCD 128 x 64 OLED -ekraanil, kuna see on hõlpsasti ühendatav ja seda saab nende programmidega kasutada.

Samm: RTC kasutaja mälu

Väike kõrvalekalle aja arvestamisest on ESP8266 sisemisel RTC -l on 128 x 32 -bitised mäluaadressid, millele programmeerija pääseb juurde. Need on eriti kasulikud, kuna suudavad ESP8266 sügava une tsükli üle elada. Programmeerija ülesanne on kontrollida nende kasutamist ja tagada, et neid kogemata üle ei kirjutataks.

Olen lisanud RTCmem.lua, lihtsa programmi, mis näitab selle kasutamist. Teil peab olema rtcmem moodul.

5. samm: välised RTC -moodulid

Välised RTC moodulid
Välised RTC moodulid

Välised RTC-moodulid ühenduvad ESP8266-ga I2C-liidese kaudu, mis kasutab ainult kahte I/O-kontakti ja töötab nii ESP-01 kui ka enamiku teiste ESP8266-seadmetega.

RTC mooduli aadress on 0x68 ja sellele pääseb juurde tavaliste I2C käskude abil. Siiski tuleb midagi meeles pidada: RTC -registrite andmed salvestatakse BCD -vormingus (alus 16), nii et teie programmid peavad sellega tegelema. Kellaaeg ja kuupäev salvestatakse RTC seitsmes registris. Sisemises RTC -s hoolitseb BCD teisenduste eest rtctime moodul.

SetExtRTC.lua teisendab andmed BCD -ks ja määrab aja.

ReadExtRTC.lua loeb ajaandmeid ja prindib need välja. MÄRKUS. Andmed prinditakse kuueteistkümnendsüsteemis.

Ma ei ole kulutanud palju aega ekraani vormindamisele, kuna teil võib olla oma ideid selle kohta, mida soovite kuupäeva ja kellaajaga teha. See on põhimootor kõige lihtsamal kujul, nii et saate seda soovi korral edasi arendada.

6. samm: andmete logimine

Andmete logimine
Andmete logimine

Kui vaatate RTC mooduleid tähelepanelikult, märkate, et neil on sisseehitatud AT24C32 EEPROM IC või muu sarnane, või võite kasutada 24C256 tahvlit, nagu eespool kirjeldatud. Enamikul neist EEPROM -i IC -dest on sarnased nööpnõelad nagu eespool. Need on varustatud erineva kogusega salvestusruumiga, kuid neile kõigile on juurdepääs ühtemoodi. Kuna AT24C32 on plaadile juba joodetud, saab seda kasutada otse välise RTC I2C -st.

Kui teil on ainult 24C256 IC või sarnane, saate selle seadistada leivalauale, ühendada A1, A2 ja A3 Gnd, Vcc to 3.3V ja SDA AND SCL I2C -ga, WP võib jätta vedelema. Mõned EEPROM -i IC -d töötavad ainult 5 V pingel, seega kontrollige kõigepealt vastavat andmelehte.

ByteWR.lua kirjutab 1 baidi andmeid EEPROM -i mälupaika 0x00 ja loeb need tagasi.

Desiderata.lua kirjutab paar rida kuulsast tekstist EEPROM -i.

eeRead.lua loeb EEPROMi andmeid ja prindib need välja.

MÄRKUS. Need programmid peaksid töötama ka teiste EEPROM -tahvlitega.

Samm 7: Järeldus

Olen proovinud näidata, kuidas RTC ja EEPROM töötavad andmete logimisel. See on alles alustuseks, et saaksite edasi areneda. Saate ühendada I2C siiniga mitmesuguseid seadmeid, nagu valgusandurid, õhurõhu andurid, temperatuuri ja niiskuse andurid ning salvestada andmed EEPROM -i.

Soovitan: