NODEMCU Lua ESP8266 s hodinami v reálnom čase (RTC) a EEPROM: 7 krokov
NODEMCU Lua ESP8266 s hodinami v reálnom čase (RTC) a EEPROM: 7 krokov
Anonim
NODEMCU Lua ESP8266 s hodinami v reálnom čase (RTC) a EEPROM
NODEMCU Lua ESP8266 s hodinami v reálnom čase (RTC) a EEPROM

Ak chcete viesť denník údajov, je dôležité získať správny čas. Existujú rôzne spôsoby, ako získať čas zo zdrojov na internete.

Môžete sa opýtať, prečo nevyužiť ESP8266, aby vám zostal čas? Môžete, má svoj vlastný interný RTC (hodiny v reálnom čase), ale ESP8266 má 3 rôzne frekvencie prevádzkových hodín - 52 MHz pri štarte, 80 MHz pri bežnej prevádzke a 160 MHz, ak je posilnený. Ak potrebujete presnejšie sledovanie času, najmä počas dlhších období, riešenie môže poskytnúť externý RTC. Tieto moduly majú tiež záložnú batériu pre prípad straty napájania. RTC nie je veľmi presný, pretože počíta čas, ktorý uplynul od jeho nastavenia, a hoci to môže fungovať pre väčšinu aplikácií, nemusí byť dosť dobrý na udržanie kritického času. Presný čas je možné získať z časového servera SNTP, z ktorého je možné v prípade potreby v pravidelných intervaloch aktualizovať RTC.

Modul DS1307 Tiny RTC I2C (vyššie) je príkladom týchto položiek a je možné ho zakúpiť na Ebay a u iných dodávateľov za menej ako 2 libry. Existujú aj ďalšie, ako napríklad DS1302 a DS3231, ktoré fungujú podobným spôsobom a stoja od 99 p.

Modul DS1307 používa rozhranie I2C a pre ESP-01 by mal byť pripojený ako:

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

SDA a SCL je možné pripojiť k akémukoľvek z I/O pinov na väčších ESP8266 (zodpovedajúcim spôsobom zmeňte kód). K tomuto modulu je potrebné pripojiť iba kolíky na ľavej strane.

Krok 1: Čas Google

Čas Google
Čas Google

Existuje mnoho príkladov, ako získať čas od Googlu a vyzerať takto. Keď spustíte program GoogleTime.lua, získate nasledujúci výsledok:

dofile ("GoogleTime.lua")> Čas: Pia, 15. decembra 2017 11:19:45 GMT

Problém pri tejto metóde je ten, že získate čas vo formáte reťazca a budete musieť reťazec rozdeliť na jeho jednotlivé bity na hodiny, minúty, sekundy atď. RTC akceptuje čas v špeciálnom formáte, tj. Časovú pečiatku UNIX. Laicky povedané, je to počet sekúnd, ktoré uplynuli od štvrtka 1. januára 1970 do súčasnosti a času. Epochu UNIX (01/01/01 00:00:00) používa väčšina počítačových operačných systémov a uplynulý čas je uložený ako podpísané 32 -bitové číslo. To znamená, že tento systém bude fungovať do 19. januára 2038, keď bude číslo príliš veľké na uloženie týmto spôsobom. Jedným z riešení je uložiť číslo ako 64 bitov, ale zatiaľ bude stačiť 32 -bitová metóda.

Na nastavenie času na 9. júla 2015, 18:29:49 vo vnútornom RTC, by ste použili tento riadok kódu:

rtctime.set (1436430589, 0)

Dva parametre sú sekundy a mikro sekundy.

Ďalšie informácie nájdete v dokumentácii NodeMCU.

Krok 2: Časové servery SNTP

Časové servery SNTP
Časové servery SNTP

Simple Network Time Protocol (SNTP) je poskytovaný z mnohých zdrojov na internete a túto službu má mnoho krajín po celom svete.

Program SNTPTime2.lua nastavuje čas na vnútornom RTC. Keď flashujete ESP8266, musíte mať vo svojej zostave moduly rtctime & sntp. Program získa čas zo servera v sekundách a mikro sekundách a nastaví interný RTC pomocou rtctime.set (sec, usec).

Program potom zobrazí dátum a čas v rôznych formátoch.

Na celom svete je veľa serverov SNTP a niektoré z nich sú nasledujúce:

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

Všetky vyššie uvedené riadky kódu je možné nahradiť programom SNTPTime2.lua.

Na nižšie uvedených adresách je viac serverov SNTP, ktoré je možné v programe opäť použiť.

93.170.62.252, 130.88.202.49, 79.135.97.79, ntp.exnet.com

Google tiež poskytuje časové servery na týchto adresách:

216.239.35.0, 216.239.35.4, 216.239.35.8, 216.239.35.12

Musíte si vziať čas z krajiny, v ktorej sa nachádzate, alebo ho budete musieť upraviť pre rôzne svetové časové pásma. Niektoré krajiny majú aj letný čas, takže sa s tým možno budete musieť vyrovnať aj vy.

Krok 3: Získanie času z modulu RTC

Získanie času z modulu RTC
Získanie času z modulu RTC

Program GetRTCTime.lua číta čas z interného RTC.

Prvá časť číta čas a zobrazuje ho v sekundách a mikrosekundách.

Druhá časť ho prevádza do ľudsky čitateľnejšieho formátu.

pri volaní tm = rtctime.epoch2cal (rtctime.get ()) vráti:

  • rok - 1970 ~ 2038
  • mesiac - 1 ~ 12 v aktuálnom roku
  • deň - deň 1 ~ 31 v aktuálnom mesiaci
  • hodinu
  • min
  • sek
  • deň - deň 1 ~ 366 v aktuálnom roku
  • deň - deň 1 ~ 7 v aktuálnom týždni (nedeľa je 1)

Ku každej položke je možné pristupovať ako tm ["deň"], tm ["rok"]…

Ďalšie informácie nájdete v dokumentácii NodeMCU.

DisplaySNTPtime.lua je prepracovanejší spôsob zobrazovania dátumu a času na LCD displeji 128 x 64 OLED, pretože je ľahko pripojiteľný a je možné ho používať s týmito programami.

Krok 4: Užívateľská pamäť RTC

Trochu odklonom od udržiavania času je interný RTC na ESP8266 s adresami pamäte 128 x 32 bitov, ku ktorým má prístup programátor. Sú obzvlášť užitočné, pretože môžu prežiť cyklus hlbokého spánku ESP8266. Je na programátorovi, aby kontroloval ich používanie a zaistil, aby neboli omylom prepísané.

Zahrnul som RTCmem.lua, jednoduchý program, ktorý ukazuje jeho použitie. Vo svojej zostave musíte mať modul rtcmem.

Krok 5: Externé moduly RTC

Externé moduly RTC
Externé moduly RTC

Externé moduly RTC sa k ESP8266 pripájajú prostredníctvom rozhrania I2C, ktoré používa iba dva I/O piny a funguje tak s ESP-01, ako aj s väčšinou ostatných zariadení ESP8266.

Adresa modulu RTC je 0x68 a je k nej prístup pomocou bežných príkazov I2C. Je však potrebné mať na pamäti, že údaje v registroch RTC sú uložené vo formáte BCD (základňa 16), takže vaše programy sa s tým musia vyrovnať. Čas a dátum sú uložené v 7 registroch v rámci RTC. Na internom RTC sa o konverzie BCD stará modul rtctime.

SetExtRTC.lua prevádza údaje na BCD a nastavuje čas.

ReadExtRTC.lua načíta časové údaje a vytlačí ich. POZNÁMKA: údaje sa vytlačia v hexadecimálnom formáte.

Nestrávil som veľa času formátovaním displeja, pretože môžete mať svoje vlastné predstavy o tom, čo chcete s dátumom a časom robiť. Toto je základný motor v najjednoduchšej forme, takže ho môžete podľa potreby ďalej rozvíjať.

Krok 6: Záznam údajov

Záznam údajov
Záznam údajov

Ak sa pozriete pozorne na moduly RTC, všimnete si, že majú v sebe integrovaný integrovaný obvod EEPROM AT24C32 alebo podobný modul, alebo môžete použiť dosku 24C256, ako je uvedené vyššie. Väčšina týchto integrovaných obvodov EEPROM má podobné vývody ako vyššie. Dodávajú sa s rôznym objemom úložiska, ale ku všetkým sa pristupuje rovnakým spôsobom. Pretože AT24C32 je už spájkovaný na doske, môže byť použitý priamo z I2C externého RTC.

Ak máte iba 24C256 IC alebo podobný, môžete ho nastaviť na doske s chlebom, pripojiť A1, A2 a A3 na Gnd, Vcc na 3,3 V a SDA A SCL na I2C, WP môžete nechať plávajúce. Niektoré integrované obvody EEPROM fungujú iba pri 5 V, preto si najskôr overte príslušný list s údajmi.

ByteWR.lua zapíše 1 bajt údajov do pamäte 0x00 pamäte EEPROM a načíta ich späť.

Desiderata.lua napíše niekoľko riadkov zo slávneho textu do EEPROM.

eeRead.lua načíta údaje z EEPROM a vytlačí ich.

POZNÁMKA: Tieto programy by mali fungovať aj s inými doskami EEPROM.

Krok 7: Záver

Pokúsil som sa ukázať, ako RTC a EEPROM fungujú na zaznamenávanie údajov. Je to len začiatok, ktorý môžete ďalej rozvíjať. K zbernici I2C môžete pripojiť rôzne zariadenia, ako sú svetelné senzory, senzory barometrického tlaku, snímače teploty a vlhkosti a zaznamenávať údaje na EEPROM.

Odporúča: