NODEMCU Lua ESP8266 Met Real Time Clock (RTC) en EEPROM: 7 stappe
NODEMCU Lua ESP8266 Met Real Time Clock (RTC) en EEPROM: 7 stappe
Anonim
NODEMCU Lua ESP8266 Met Real Time Clock (RTC) en EEPROM
NODEMCU Lua ESP8266 Met Real Time Clock (RTC) en EEPROM

Dit is noodsaaklik om die regte tyd te kry as u 'n datalogboek wil byhou. Daar is verskillende maniere om tyd uit bronne op die internet te kry.

U kan vra waarom u nie die ESP8266 gebruik om tyd vir u te hou nie? U kan wel, dit het sy eie interne RTC (Real Time Clock), maar die ESP8266 het 3 verskillende werkklokfrekwensies - 52MHz wanneer dit opstart, 80MHz tydens gereelde werking en 160MHz as dit verhoog word. As u meer akkurate tydsberekening benodig, veral oor langer periodes, kan 'n eksterne RTC moontlik 'n oplossing bied. Hierdie modules het ook 'n battery -rugsteun in geval van kragverlies. 'N RTC is nie baie akkuraat nie, want dit tel die tyd wat verloop het sedert dit opgestel is, en hoewel dit vir die meeste toepassings moontlik is, is dit moontlik nie goed genoeg vir kritieke tydsberekening nie. Dit is moontlik om 'n akkurate tyd van 'n SNTP -tydbediener te kry, waarvandaan die RTC gereeld kan opgedateer word.

Die DS1307 Tiny RTC I2C -module (hierbo) is 'n voorbeeld van hierdie items en kan vir minder as £ 2 op Ebay en ander verskaffers gekoop word. Daar is ook ander, soos die DS1302 en DS3231, wat op 'n soortgelyke manier werk en van 99p af kos.

Die DS1307-module gebruik 'n I2C-koppelvlak en moet vir 'n ESP-01 gekoppel word as:

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

SDA en SCL kan aan enige van die I/O -penne op die groter ESP8266's gekoppel word (verander die kode dienooreenkomstig). Slegs die penne aan die linkerkant hoef op hierdie module gekoppel te word.

Stap 1: Google Time

Google Tyd
Google Tyd

Daar is baie voorbeelde om tyd by Google te kry en so te lyk. As u die GoogleTime.lua -program uitvoer, kry u 'n resultaat soos volg:

dofile ("GoogleTime.lua")> Tyd: Vrydag, 15 Desember 2017 11:19:45 GMT

Die probleem met hierdie metode is dat u die tyd in stringformaat kry en dat u die string ure, minute, sekondes, ens. In die individuele stukkies moet verdeel. Die RTC aanvaar die tyd in 'n spesiale formaat, dit wil sê UNIX -tydstempel. In leketaal is dit die aantal sekondes wat sedert Donderdag 1 Januarie 1970 tot die huidige tyd en tyd verloop het. Die UNIX -tydperk (1970/01/01 00:00:00) word deur die meeste rekenaarbedryfstelsels gebruik en die verloopte tyd word gestoor as 'n getekende 32 bis -nommer. Dit beteken dat hierdie stelsel tot 19 Januarie 2038 sal werk wanneer die nommer te groot sal word om op hierdie manier te stoor. Een oplossing is om die nommer as 64 bis te stoor, maar vir eers is die 32 bis metode voldoende.

Om die tyd op 9 Julie 2015, 18:29:49 op die interne RTC in 2015 te stel, gebruik u hierdie reël kode:

rtctime.set (1436430589, 0)

Die 2 parameters is sekondes en mikro sekondes.

U kan meer inligting vind oor die lees van die NodeMCU -dokumentasie.

Stap 2: SNTP -tydbedieners

SNTP -tydbedieners
SNTP -tydbedieners

Simple Network Time Protocol (SNTP) word uit baie bronne op die internet verskaf, en baie lande regoor die wêreld het hierdie diens.

Die program, SNTPTime2.lua, stel die tyd op die interne RTC in. U moet die rtctime & sntp -modules in u bou hê as u u ESP8266 flits. Die program kry die tyd van die bediener in sekondes en mikrosekondes en stel die interne RTC in met rtctime.set (sek, usec).

Die program wys dan die datum en tyd in verskillende formate.

Daar is baie SNTP -bedieners regoor die wêreld en sommige is soos volg:

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

Al die bogenoemde kode kan in die SNTPTime2.lua -program vervang word.

Daar is meer SNTP -bedieners op die onderstaande adresse wat weer in die program gebruik kan word.

93.170.62.252, 130.88.202.49, 79.135.97.79, ntp.exnet.com

Google verskaf ook tydbedieners by hierdie adresse:

216.239.35.0, 216.239.35.4, 216.239.35.8, 216.239.35.12

U moet onthou om die tyd te kry uit die land waarin u is, of u moet dit dalk vir die verskillende tydsones in die wêreld aanpas. Sommige lande het ook sommertyd, dus u moet dit moontlik ook hanteer.

Stap 3: Kry die tyd vanaf die RTC -module

Kry die tyd vanaf die RTC -module
Kry die tyd vanaf die RTC -module

Die program GetRTCTime.lua lees die tyd van die interne RTC.

Die eerste deel lees die tyd en wys dit in sekondes en mikrosekondes.

Die tweede deel omskep dit in 'n meer leesbare formaat.

as u tm = rtctime.epoch2cal (rtctime.get ()) bel, kom dit terug:

  • jaar - 1970 ~ 2038
  • ma - maand 1 ~ 12 in die huidige jaar
  • dag - dag 1 ~ 31 in die huidige maand
  • uur
  • min
  • sek
  • dag - dag 1 ~ 366 in die huidige jaar
  • wday - dag 1 ~ 7 in die huidige week (Sondag is 1)

Elke item kan verkry word as tm ["dag"], tm ["jaar"] …

U kan meer inligting vind oor die lees van die NodeMCU -dokumentasie.

DisplaySNTPtime.lua is 'n meer uitgebreide manier om die datum en tyd op 'n LCD 128 x 64 OLED -skerm te wys, aangesien dit maklik verbind kan word en saam met hierdie programme gebruik kan word.

Stap 4: RTC -gebruikersgeheue

'N Bietjie afwyking van die tydsberekening is dat die interne RTC op die ESP8266 128 x 32 bit geheue -adresse het wat deur die programmeerder verkry kan word. Dit is veral nuttig omdat dit die diep slaap siklus van die ESP8266 kan oorleef. Dit is aan die programmeerder om die gebruik daarvan te beheer en te verseker dat dit nie per ongeluk oorgeskryf word nie.

Ek het RTCmem.lua ingesluit, 'n eenvoudige program wat die gebruik daarvan demonstreer. U moet 'n rtcmem -module in u bou hê.

Stap 5: Eksterne RTC -modules

Eksterne RTC -modules
Eksterne RTC -modules

Die eksterne RTC-modules maak verbinding met die ESP8266 via die I2C-koppelvlak, wat slegs twee I/O-penne gebruik en dus werk met die ESP-01 sowel as met die meeste ander ESP8266-toestelle.

Die adres van die RTC -module is 0x68 en word verkry met die normale I2C -opdragte. Daar is egter iets om in gedagte te hou; die data in die RTC -registers word in BCD -formaat (basis 16) gestoor, sodat u programme dit moet hanteer. Die tyd en datum word in 7 registers binne die RTC gestoor. Op die interne RTC word die BCD -omskakelings deur die tydstipmodule versorg.

SetExtRTC.lua skakel die data om na BCD en stel die tyd in.

ReadExtRTC.lua lees die tyddata en druk dit uit. LET WEL: die data word in heksadesimaal gedruk.

Ek het nie baie tyd spandeer om die skerm te formateer nie, aangesien u u eie idees het oor wat u met datum en tyd wil doen. Dit is die basiese enjin in sy eenvoudigste vorm, sodat u dit verder kan ontwikkel as u wil.

Stap 6: Data -aanmelding

Data -aanmelding
Data -aanmelding

As u die RTC -modules noukeurig bekyk, sal u agterkom dat hulle 'n AT24C32 EEPROM IC of soortgelyke ingebou het, of u kan 'n 24C256 -bord soos hierbo gebruik. Die meeste van hierdie EEPROM IC's het soortgelyke pin -outs as hierbo. Daar is verskillende hoeveelhede berging, maar almal is op dieselfde manier verkrygbaar. Aangesien die AT24C32 reeds op die bord gesoldeer is, kan dit direk vanaf die I2C van die eksterne RTC gebruik word.

As u slegs 'n 24C256 IC of soortgelyk het, kan u dit in 'n broodbord opstel, A1, A2 en A3 aan Gnd, Vcc aan 3.3V en SDA EN SCL na I2C koppel, WP kan dryf. Sommige EEPROM IC's werk slegs op 5V, dus kyk eers na die relevante gegewensblad.

ByteWR.lua skryf 1 greep data na geheue plek 0x00 van die EEPROM en lees dit terug.

Desiderata.lua skryf 'n paar reëls van bekende teks na die EEPROM.

eeRead.lua lees data van die EEPROM af en druk dit uit.

OPMERKING: Hierdie programme moet ook met ander EEPROM -borde werk.

Stap 7: Gevolgtrekking

Ek het probeer wys hoe die RTC en EEPROM werk vir data -aanmelding. Dit is net 'n voorgereg om verder te ontwikkel. U kan verskillende toestelle aan die I2C -bus koppel, soos ligsensors, barometriese druksensors, temperatuur- en humiditeitsensors en die data op die EEPROM opneem.

Aanbeveel: