Obsah:

NODEMCU Lua ESP8266 s hodinami reálného času (RTC) a EEPROM: 7 kroků
NODEMCU Lua ESP8266 s hodinami reálného času (RTC) a EEPROM: 7 kroků

Video: NODEMCU Lua ESP8266 s hodinami reálného času (RTC) a EEPROM: 7 kroků

Video: NODEMCU Lua ESP8266 s hodinami reálného času (RTC) a EEPROM: 7 kroků
Video: LDmicro 14: I2C LCD & DS3231 Real-Time Clock (Microcontroller PLC Ladder Programming with LDmicro) 2024, Listopad
Anonim
NODEMCU Lua ESP8266 s hodinami reálného času (RTC) a EEPROM
NODEMCU Lua ESP8266 s hodinami reálného času (RTC) a EEPROM

Získání správného času je zásadní, pokud si chcete vést protokol dat. Existují různé způsoby, jak získat čas ze zdrojů na internetu.

Můžete se zeptat, proč nevyužít ESP8266, aby vám zůstal čas? Můžete, má svůj vlastní interní RTC (hodiny reálného času), ale ESP8266 má 3 různé frekvence provozních hodin - 52 MHz při spuštění, 80 MHz při běžném provozu a 160 MHz, pokud je posílen. Pokud potřebujete přesnější sledování času, zejména v delších obdobích, může řešení nabídnout externí RTC. Tyto moduly mají také záložní baterii pro případ ztráty napájení. RTC není příliš přesný, protože počítá čas, který uplynul od jeho nastavení, a přestože se může hodit pro většinu aplikací, nemusí být dost dobrý na udržení kritického času. Přesný čas je možné získat z časového serveru SNTP, ze kterého lze v případě potřeby v pravidelných intervalech aktualizovat RTC.

Modul DS1307 Tiny RTC I2C (výše) je příkladem těchto položek a lze jej zakoupit na Ebay a u jiných dodavatelů za méně než 2 libry. Existují také další, jako jsou DS1302 a DS3231, které fungují podobným způsobem a stojí od 99 p výše.

Modul DS1307 používá rozhraní I2C a pro ESP-01 by měl být připojen jako:

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

SDA a SCL lze připojit k jakémukoli I/O pinům na větších ESP8266 (odpovídajícím způsobem změňte kód). K tomuto modulu je třeba připojit pouze kolíky na levé straně.

Krok 1: Google Time

Čas Google
Čas Google

Existuje mnoho příkladů, jak získat čas od Googlu a vypadat nějak takto. Když spustíte program GoogleTime.lua, získáte následující výsledek:

dofile ("GoogleTime.lua")> Čas: Pá, 15. prosince 2017 11:19:45 GMT

Problém této metody spočívá v tom, že získáte čas ve formátu řetězců a musíte řetězec rozdělit na jeho jednotlivé bity na hodiny, minuty, sekundy atd. RTC přijímá čas ve speciálním formátu, tj. Časové razítko UNIX. Laicky řečeno je to počet sekund, které uplynuly od čtvrtka 1. ledna 1970 do současnosti a času. Epochu UNIX (1970/01/01 00:00:00) používá většina počítačových operačních systémů a uplynulý čas je uložen jako podepsané 32bitové číslo. To znamená, že tento systém bude fungovat až do 19. ledna 2038, kdy bude číslo příliš velké na to, aby se mohlo ukládat tímto způsobem. Jedním z řešení je uložit číslo jako 64 bitů, ale prozatím bude stačit 32bitová metoda.

Chcete -li nastavit čas na 9. července 2015, 18:29:49 na interní RTC, použijte tento řádek kódu:

rtctime.set (1436430589, 0)

Tyto 2 parametry jsou sekundy a mikro sekundy.

Další informace najdete v dokumentaci NodeMCU.

Krok 2: Časové servery SNTP

Časové servery SNTP
Časové servery SNTP

Simple Network Time Protocol (SNTP) je poskytován z mnoha zdrojů na internetu a tuto službu má mnoho zemí po celém světě.

Program SNTPTime2.lua nastavuje čas na interním RTC. Když flashujete ESP8266, musíte mít ve své sestavě moduly rtctime & sntp. Program získá čas ze serveru v sekundách a mikro sekundách a nastaví interní RTC pomocí rtctime.set (sec, usec).

Program poté zobrazí datum a čas v různých formátech.

Po celém světě existuje mnoho serverů SNTP a některé jsou následující:

  • 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šechny výše uvedené řádky kódu lze nahradit programem SNTPTime2.lua.

Na níže uvedených adresách je více serverů SNTP, které lze v programu znovu použít.

93.170.62.252, 130.88.202.49, 79.135.97.79, ntp.exnet.com

Google také 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 zapamatovat, abyste získali čas ze země, ve které se nacházíte, nebo jej budete muset upravit pro různá světová časová pásma. Také některé země mají letní čas, takže se s tím možná budete muset vypořádat také.

Krok 3: Získání času z modulu RTC

Získání času z modulu RTC
Získání času z modulu RTC

Program GetRTCTime.lua čte čas z interního RTC.

První část čte čas a zobrazuje jej v sekundách a mikrosekundách.

Druhá část jej převádí do lidštěji čitelného formátu.

při volání tm = rtctime.epoch2cal (rtctime.get ()) vrátí:

  • rok - 1970 ~ 2038
  • 1 měsíc - 12 v aktuálním roce
  • den - den 1 ~ 31 v aktuálním měsíci
  • hodina
  • min
  • sek
  • den - den 1 ~ 366 v aktuálním roce
  • wday - den 1 ~ 7 v aktuálním týdnu (neděle je 1)

Ke každé položce lze přistupovat jako tm ["den"], tm ["rok"]…

Další informace najdete v dokumentaci NodeMCU.

DisplaySNTPtime.lua je propracovanější způsob zobrazení data a času na displeji LCD 128 x 64 OLED, protože je snadno připojitelný a lze jej použít s těmito programy.

Krok 4: Uživatelská paměť RTC

Trochu odklonění od udržování času je, že vnitřní RTC na ESP8266 má adresy 128 x 32 bitové paměti, ke kterým má přístup programátor. Jsou obzvláště užitečné, protože mohou přežít cyklus hlubokého spánku ESP8266. Je na programátorovi, aby kontroloval jejich používání a zajistil, aby nebyly omylem přepsány.

Zahrnul jsem RTCmem.lua, jednoduchý program, který ukazuje jeho použití. Ve své sestavě musíte mít modul rtcmem.

Krok 5: Externí moduly RTC

Externí moduly RTC
Externí moduly RTC

Externí moduly RTC se k ESP8266 připojují přes rozhraní I2C, které využívá pouze dva I/O piny a funguje tak s ESP-01 i většinou ostatních zařízení ESP8266.

Adresa modulu RTC je 0x68 a je přístupná pomocí běžných příkazů I2C. Je však třeba mít na paměti, že data v registrech RTC jsou uložena ve formátu BCD (základna 16), takže se s tím vaše programy musí vypořádat. Čas a datum jsou uloženy v 7 registrech v rámci RTC. Na interním RTC se o převody BCD stará modul rtctime.

SetExtRTC.lua převádí data na BCD a nastavuje čas.

ReadExtRTC.lua přečte časové údaje a vytiskne je. POZNÁMKA: data jsou vytištěna v šestnáctkové soustavě.

Nestrávil jsem mnoho času formátováním displeje, protože můžete mít vlastní představy o tom, co chcete s datem a časem dělat. Toto je základní motor v jeho nejjednodušší podobě, takže jej můžete dále rozvíjet, pokud si budete přát.

Krok 6: Protokolování dat

Protokolování dat
Protokolování dat

Pokud se podíváte pozorně na moduly RTC, všimnete si, že mají integrovaný EEPROM IC AT24C32 nebo podobný, nebo můžete použít desku 24C256, jak je uvedeno výše. Většina těchto integrovaných obvodů EEPROM má podobné vývody jako výše. Přicházejí s různým množstvím úložiště, ale ke všem se přistupuje stejným způsobem. Protože je AT24C32 již připájen na desku, lze jej použít přímo z I2C externího RTC.

Pokud máte pouze 24C256 IC nebo podobný, můžete jej nastavit v chlebové desce, připojit A1, A2 a A3 na Gnd, Vcc na 3,3 V a SDA A SCL na I2C, WP lze nechat plovoucí. Některé integrované obvody EEPROM fungují pouze na 5 V, proto si nejprve zkontrolujte příslušný datový list.

ByteWR.lua zapíše 1 bajt dat do paměťového místa 0x00 EEPROM a načte je zpět.

Desiderata.lua napíše několik řádků ze slavného textu do EEPROM.

eeRead.lua čte data z EEPROM a vytiskne je.

POZNÁMKA: Tyto programy by měly fungovat i s jinými deskami EEPROM.

Krok 7: Závěr

Pokusil jsem se ukázat, jak RTC a EEPROM fungují pro protokolování dat. Je to jen začátek, který můžete dále rozvíjet. Ke sběrnici I2C můžete připojit různá zařízení, jako jsou světelná čidla, čidla barometrického tlaku, čidla teploty a vlhkosti a zaznamenávat data na EEPROM.

Doporučuje: