NODEMCU Lua ESP8266 ar reālā laika pulksteni (RTC) un EEPROM: 7 soļi
NODEMCU Lua ESP8266 ar reālā laika pulksteni (RTC) un EEPROM: 7 soļi
Anonim
NODEMCU Lua ESP8266 ar reālā laika pulksteni (RTC) un EEPROM
NODEMCU Lua ESP8266 ar reālā laika pulksteni (RTC) un EEPROM

Pareiza laika iegūšana ir būtiska, ja vēlaties saglabāt datu žurnālu. Ir dažādi veidi, kā iegūt laiku no avotiem internetā.

Jūs varat jautāt, kāpēc neizmantot ESP8266, lai saglabātu laiku jums? Jūs varat, tam ir savs iekšējais RTC (reālā laika pulkstenis), bet ESP8266 ir 3 dažādas darba pulksteņa frekvences - 52MHz, kad tas tiek palaists, 80MHz regulāras darbības laikā un 160MHz, ja tiek palielināts. Ja jums ir nepieciešama precīzāka laika uzskaite, īpaši ilgākā laika posmā, risinājums var būt ārējs RTC. Šiem moduļiem ir arī akumulatora rezerves strāvas zuduma gadījumā. RTC nav šausmīgi precīzs, jo tajā tiek skaitīts laiks, kas pagājis kopš tā iestatīšanas, un, lai gan tas var notikt lielākajā daļā lietojumprogrammu, tas var nebūt pietiekami labs kritiskajam laika saglabāšanai. Precīzu laiku ir iespējams iegūt no SNTP laika servera, no kura RTC vajadzības gadījumā var regulāri atjaunināt.

DS1307 Tiny RTC I2C modulis (iepriekš) ir šo priekšmetu piemērs, un to var iegādāties vietnē Ebay un citiem piegādātājiem par mazāk nekā 2 sterliņu mārciņām. Ir arī citi, piemēram, DS1302 un DS3231, kas darbojas līdzīgi un maksā no 99p uz augšu.

DS1307 modulī tiek izmantota I2C saskarne, un ESP-01 ir jāpievieno šādi:

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

SDA un SCL var savienot ar jebkuru no lielākās ESP8266 I/O tapām (attiecīgi mainiet kodu). Šim modulim ir jāpievieno tikai kreisās puses tapas.

1. darbība. Google laiks

Google laiks
Google laiks

Ir daudz piemēru, kā iegūt laiku no Google un izskatīties apmēram šādi. Palaižot programmu GoogleTime.lua, jūs iegūstat šādu rezultātu:

dofile ("GoogleTime.lua")> Laiks: piektdiena, 2017. gada 15. decembris 11:19:45 GMT

Šīs metodes problēma ir tāda, ka jūs iegūstat laiku virknes formātā un virkne jāsadala atsevišķos bitos stundām, minūtēm, sekundēm utt. RTC pieņem laiku īpašā formātā, ti, UNIX laika zīmogā. Nespeciālistiski runājot, tas ir sekunžu skaits, kas pagājis kopš 1970. gada 1. janvāra līdz mūsdienām. UNIX Epoch (1970/01/01 00:00:00) izmanto lielākā daļa datoru operētājsistēmu, un pagājis laiks tiek saglabāts kā parakstīts 32 bitu numurs. Tas nozīmē, ka šī sistēma darbosies līdz 2038. gada 19. janvārim, kad skaitlis kļūs pārāk liels, lai to varētu uzglabāt šādā veidā. Viens risinājums ir saglabāt numuru kā 64 bitus, bet pagaidām pietiks ar 32 bitu metodi.

Lai iestatītu laiku uz 2015. gada 9. jūliju, 18:29:49 iekšējā RTC, izmantojiet šo koda rindu:

rtctime.set (1436430589, 0)

2 parametri ir sekundes un mikrosekundes.

Plašāku informāciju varat atrast, lasot NodeMCU dokumentāciju.

2. solis: SNTP laika serveri

SNTP laika serveri
SNTP laika serveri

Vienkāršais tīkla laika protokols (SNTP) tiek nodrošināts no daudziem interneta avotiem, un šis pakalpojums ir pieejams daudzās pasaules valstīs.

Programma SNTPTime2.lua nosaka laiku iekšējā RTC. Zibspuldzējot ESP8266, jūsu būvē jābūt rtctime & sntp moduļiem. Programma saņem laiku no servera sekundēs un mikrosekundēs un nosaka iekšējo RTC ar rtctime.set (sec, usec).

Pēc tam programma parāda datumu un laiku dažādos formātos.

Visā pasaulē ir daudz SNTP serveru, un daži ir šādi:

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

Visas iepriekš minētās koda rindas var aizstāt programmā SNTPTime2.lua.

Tālāk norādītajās adresēs ir vairāk SNTP serveru, kurus atkal var izmantot programmā.

93.170.62.252, 130.88.202.49, 79.135.97.79, ntp.exnet.com

Google nodrošina arī laika serverus šajās adresēs:

216.239.35.0, 216.239.35.4, 216.239.35.8, 216.239.35.12

Jums jāatceras iegūt laiku no valsts, kurā atrodaties, vai arī tas, iespējams, būs jāmaina dažādām pasaules laika zonām. Arī dažās valstīs ir vasaras laiks, tāpēc jums, iespējams, būs jārisina arī tas.

3. darbība. Laika iegūšana no RTC moduļa

Laika iegūšana no RTC moduļa
Laika iegūšana no RTC moduļa

Programma GetRTCTime.lua nolasa laiku no iekšējā RTC.

Pirmā daļa nolasa laiku un parāda to sekundēs un mikrosekundēs.

Otrā daļa pārvērš to cilvēkiem saprotamākā formātā.

izsaucot tm = rtctime.epoch2cal (rtctime.get ()), tas atgriež:

  • gads - 1970 ~ 2038
  • no mēneša 1. līdz 12. mēnesim kārtējā gadā
  • diena - 1. - 31. diena kārtējā mēnesī
  • stunda
  • min
  • sek
  • diena - 1. diena ~ 366 kārtējā gadā
  • wday - 1. līdz 7. diena pašreizējā nedēļā (svētdiena ir 1)

Katram vienumam var piekļūt kā tm ["diena"], tm ["gads"]…

Plašāku informāciju varat atrast, lasot NodeMCU dokumentāciju.

DisplaySNTPtime.lua ir sarežģītāks veids, kā parādīt datumu un laiku LCD 128 x 64 OLED displejā, jo tas ir viegli savienojams un to var izmantot kopā ar šīm programmām.

4. darbība: RTC lietotāja atmiņa

Neliela novirzīšanās no laika saglabāšanas ir ESP8266 iekšējā RTC, kurai ir 128 x 32 bitu atmiņas adreses, kurām var piekļūt programmētājs. Tie ir īpaši noderīgi, jo spēj izdzīvot ESP8266 dziļā miega ciklu. Programmētāja ziņā ir kontrolēt to izmantošanu un nodrošināt, ka tie netiek nejauši pārrakstīti.

Esmu iekļāvis vienkāršu programmu RTCmem.lua, kas parāda tās izmantošanu. Jūsu būvē jābūt rtcmem modulim.

5. darbība. Ārējie RTC moduļi

Ārējie RTC moduļi
Ārējie RTC moduļi

Ārējie RTC moduļi savienojas ar ESP8266, izmantojot I2C saskarni, kurā tiek izmantotas tikai divas I/O tapas, un tāpēc tā darbojas ar ESP-01, kā arī ar lielāko daļu citu ESP8266 ierīču.

RTC moduļa adrese ir 0x68, un tai var piekļūt, izmantojot parastās I2C komandas. Tomēr ir kas jāpatur prātā, dati RTC reģistros tiek glabāti BCD formātā (16. bāze), tāpēc jūsu programmām tas ir jārisina. Laiks un datums tiek saglabāti 7 reģistros RTC. Iekšējā RTC par BCD konvertēšanu rūpējas rtctime modulis.

SetExtRTC.lua pārvērš datus BCD un nosaka laiku.

ReadExtRTC.lua nolasa laika datus un izdrukā tos. PIEZĪME: dati tiek izdrukāti heksadecimālos skaitļos.

Es neesmu pavadījis daudz laika displeja formatēšanai, jo jums var būt savas idejas par to, ko vēlaties darīt ar datumu un laiku. Šis ir pamata dzinējs visvienkāršākajā veidā, lai jūs to varētu attīstīt tālāk, ja vēlaties.

6. darbība: datu reģistrēšana

Datu reģistrēšana
Datu reģistrēšana

Rūpīgi apskatot RTC moduļus, pamanīsit, ka tajos ir iebūvēts AT24C32 EEPROM IC vai līdzīgs, vai arī varat izmantot 24C256 plati, kā aprakstīts iepriekš. Lielākajai daļai šo EEPROM IC ir līdzīgi tapas kā iepriekš. Tie ir aprīkoti ar dažādiem uzglabāšanas apjomiem, taču tiem visiem piekļūst vienādi. Tā kā AT24C32 jau ir pielodēts pie tāfeles, to var izmantot tieši no ārējā RTC I2C.

Ja jums ir tikai 24C256 IC vai līdzīgs, varat to iestatīt maizes dēļā, savienot A1, A2 un A3 ar Gnd, Vcc līdz 3.3V un SDA UN SCL ar I2C, WP var atstāt peldošu. Daži EEPROM IC darbojas tikai pie 5 V sprieguma, tāpēc vispirms pārbaudiet attiecīgo datu lapu.

ByteWR.lua raksta 1 baitu datu uz EEPROM atmiņas vietu 0x00 un nolasa to atpakaļ.

Desiderata.lua uzraksta pāris rindiņas no slavenā teksta uz EEPROM.

eeRead.lua nolasa datus no EEPROM un izdrukā tos.

PIEZĪME. Šīm programmām vajadzētu darboties arī ar citām EEPROM plates.

7. solis. Secinājums

Esmu mēģinājis parādīt, kā RTC un EEPROM darbojas datu reģistrēšanai. Tas ir tikai iesācējs, lai jūs varētu attīstīties tālāk. I2C kopnei var pievienot dažādas ierīces, piemēram, gaismas sensorus, barometriskā spiediena sensorus, temperatūras un mitruma sensorus un ierakstīt datus EEPROM.

Ieteicams: