Obsah:
- Krok 1: Google Time
- Krok 2: Časové servery SNTP
- Krok 3: Získání času z modulu RTC
- Krok 4: Uživatelská paměť RTC
- Krok 5: Externí moduly RTC
- Krok 6: Protokolování dat
- Krok 7: Závěr
Video: NODEMCU Lua ESP8266 s hodinami reálného času (RTC) a EEPROM: 7 kroků
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:21
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
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
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
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 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
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:
Internetové hodiny: Zobrazení data a času pomocí OLED pomocí ESP8266 NodeMCU s protokolem NTP: 6 kroků
Internetové hodiny: Zobrazení data a času pomocí OLED pomocí ESP8266 NodeMCU s protokolem NTP: Ahoj kluci v tomto návodu, postavíme internetové hodiny, které získají čas z internetu, takže tento projekt ke spuštění nebude potřebovat žádný RTC, bude k tomu potřebovat pouze funkční připojení k internetu A pro tento projekt potřebujete esp8266, který bude mít
Získání času z internetu pomocí ESP8266 - Projekt hodin NTP s ESP8266 Nodemcu: 5 kroků
Získání času z internetu pomocí ESP8266 | Projekt hodin NTP s ESP8266 Nodemcu: V tomto tutoriálu uvidíme, jak získat čas pomocí ESP8266/nodemcu s Arduino IDE. Získání času je užitečné zejména při protokolování dat k časovému razítku vašich naměřených hodnot. Pokud má váš projekt ESP8266 přístup k internetu, můžete získat čas pomocí Network T
Hodiny reálného času DS1307 RTC s Arduino: 4 kroky
Hodiny reálného času DS1307 RTC s Arduinem: V tomto tutoriálu se seznámíme s hodinami reálného času (RTC) a jak Arduino & Hodiny reálného času IC DS1307 jsou sestaveny jako časovací zařízení. Hodiny reálného času (RTC) slouží k monitorování času a udržování kalendáře. Chcete -li použít RTC
Hodiny založené na Arduinu využívající modul hodin reálného času DS1307 (RTC) a 0,96: 5 kroků
Hodiny založené na Arduinu využívající modul hodin reálného času DS1307 (RTC) & 0,96: Ahoj, v tomto tutoriálu uvidíme, jak vytvořit pracovní hodiny pomocí modulu hodin reálného času DS1307 & OLED displeje. Takže budeme číst čas z hodinového modulu DS1307. A vytiskněte si jej na OLED obrazovce
Hodiny okolního reálného času: 4 kroky
Ambient Real Time Clock: Aim Vytvořil jsem tyto hodiny, protože mám kolem sebe adresovatelný LED pás a chci ho použít. Pak jsem viděl, že můj pokoj nemá dobré hodiny, které by odpovídaly jeho stěnám. Rozhodl jsem se tedy vyrobit hodiny, které mohou měnit své barvy podle nálady uživatelů nebo