Tartalomjegyzék:

NODEMCU Lua ESP8266 valós idejű órával (RTC) és EEPROM: 7 lépés
NODEMCU Lua ESP8266 valós idejű órával (RTC) és EEPROM: 7 lépés

Videó: NODEMCU Lua ESP8266 valós idejű órával (RTC) és EEPROM: 7 lépés

Videó: NODEMCU Lua ESP8266 valós idejű órával (RTC) és EEPROM: 7 lépés
Videó: FLProg9: Будильник RTC | ESP32 NodeMCU | Визуальное программирование для Arduino 2024, Július
Anonim
NODEMCU Lua ESP8266 valós idejű órával (RTC) és EEPROM -mal
NODEMCU Lua ESP8266 valós idejű órával (RTC) és EEPROM -mal

A helyes idő megadása elengedhetetlen, ha adatnaplót szeretne vezetni. Különféle módon lehet időt szerezni az internetes forrásokból.

Megkérdezheti, hogy miért nem használja az ESP8266 -t, hogy időt szakítson magára? Nos, megteheti, rendelkezik saját belső RTC -vel (Real Time Clock), de az ESP8266 -nak 3 különböző órajel -frekvenciája van - 52MHz indításkor, 80MHz normál működés közben és 160MHz, ha növelik. Ha pontosabb időtartásra van szüksége, különösen hosszabb időszakokra, akkor egy külső RTC nyújthat megoldást. Ezek a modulok akkumulátor -mentéssel is rendelkeznek áramkimaradás esetén. Az RTC nem rettenetesen pontos, mivel számolja a beállítás óta eltelt időt, és bár a legtöbb alkalmazásnál igen, előfordulhat, hogy nem elég jó a kritikus időtartáshoz. Lehetséges pontos időt kapni egy SNTP időkiszolgálóról, ahonnan az RTC szükség esetén rendszeres időközönként frissíthető.

A DS1307 Tiny RTC I2C modul (fent) egy példa ezekre az elemekre, és megvásárolható az Ebay -en és más szállítóknál kevesebb mint 2 fontért. Vannak olyanok is, mint a DS1302 és a DS3231, amelyek hasonló módon működnek, és 99p felől fizetnek.

A DS1307 modul I2C interfészt használ, és az ESP-01 esetében a következőképpen kell csatlakoztatni:

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

Az SDA és az SCL a nagyobb ESP8266 -ok bármelyik I/O csatlakozójához csatlakoztatható (ennek megfelelően módosítsa a kódot). Ehhez a modulhoz csak a bal oldali csapokat kell csatlakoztatni.

1. lépés: Google Time

Google Time
Google Time

Sok példa van arra, hogy időt kap a Google -tól, és így néz ki. A GoogleTime.lua program futtatásakor a következő eredményt kapja:

dofile ("GoogleTime.lua")> Idő: péntek, 2017. december 15., 11:19:45 GMT

Ezzel a módszerrel az a probléma, hogy az időt karakterlánc formátumban kapja meg, és órákra, percekre, másodpercekre stb. Fel kell osztania a karakterláncot az egyes bitekre. Az RTC elfogadja az időt egy speciális formátumban, azaz UNIX időbélyegben. Laikus értelemben ez az a másodperc, amely 1970. január 1. csütörtöktől napjainkig eltelt. A UNIX Epoch -ot (1970/01/01 00:00:00) a legtöbb számítógépes operációs rendszer használja, és az eltelt időt aláírt 32 bites számként tárolja. Ez azt jelenti, hogy ez a rendszer 2038. január 19 -ig működik, amikor a szám túl nagy lesz az ilyen módon történő tároláshoz. Az egyik megoldás a szám 64 bites tárolása, de egyelőre elegendő a 32 bites módszer.

Az idő beállításához 2015. július 9., 18:29:49 a belső RTC -n a következő kódsor használatával kell történnie:

rtctime.set (1436430589, 0)

A 2 paraméter másodperc és mikroszekundum.

További információkat a NodeMCU dokumentációjában talál.

2. lépés: SNTP időkiszolgálók

SNTP időkiszolgálók
SNTP időkiszolgálók

Az egyszerű hálózati időprotokollt (SNTP) számos internetes forrás biztosítja, és a világ számos országában van ez a szolgáltatás.

Az SNTPTime2.lua program beállítja az időt a belső RTC -n. Az ESP8266 frissítésekor rendelkeznie kell az rtctime & sntp modulokkal. A program másodpercben és mikroszekundumban kapja meg az időt a szervertől, és beállítja a belső RTC -t az rtctime.set (sec, usec) paraméterrel.

Ezután a program megjeleníti a dátumot és az időt különböző formátumokban.

Világszerte sok SNTP -kiszolgáló létezik, és néhány a következő:

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

A fenti kódsorok mindegyike behelyettesíthető az SNTPTime2.lua programba.

Az alábbi címeken több SNTP -kiszolgáló található, amelyek ismét használhatók a programban.

93.170.62.252, 130.88.202.49, 79.135.97.79, ntp.exnet.com

A Google időszervereket is biztosít ezeken a címeken:

216.239.35.0, 216.239.35.4, 216.239.35.8, 216.239.35.12

Emlékeznie kell arra, hogy az időt abból az országból szerezze be, amelyben tartózkodik, vagy módosítania kell azt a különböző világ időzónák szerint. Egyes országokban is van nyári időszámítás, ezért előfordulhat, hogy ezzel is foglalkoznia kell.

3. lépés: Az idő lekérése az RTC modulból

Az idő megszerzése az RTC modulból
Az idő megszerzése az RTC modulból

A GetRTCTime.lua program beolvassa az időt a belső RTC -ből.

Az első rész az időt olvassa, és másodpercekben és mikroszekundumokban jeleníti meg.

A második rész ember által olvashatóbb formátumba konvertálja.

a tm = rtctime.epoch2cal (rtctime.get ()) hívásakor visszatér:

  • év - 1970 ~ 2038
  • hét - 1-12 hónap a tárgyévben
  • nap - 1–31. nap az aktuális hónapban
  • óra
  • min
  • mp
  • nap - 1. nap ~ 366 a tárgyévben
  • wday - az aktuális hét 1–7. napja (vasárnap 1)

Minden elem elérhető tm ["nap"], tm ["év"] formában …

További információkat a NodeMCU dokumentációjában talál.

A DisplaySNTPtime.lua egy bonyolultabb módja annak, hogy a dátumot és az időt 128 x 64 méretű OLED kijelzőn jelenítse meg, mivel könnyen csatlakoztatható és használható ezekkel a programokkal.

4. lépés: RTC felhasználói memória

Az ESP8266 belső RTC -je 128 x 32 bites memóriacímekkel rendelkezik, amelyekhez a programozó hozzáférhet. Különösen hasznosak, mivel túl tudják élni az ESP8266 mély alvási ciklusát. A programozó feladata, hogy ellenőrizze használatukat, és ügyeljen arra, hogy véletlenül ne írják felül.

Az RTCmem.lua -t, egy egyszerű programot, amely bemutatja használatát. Az rtcmem modulnak rendelkeznie kell a buildben.

5. lépés: Külső RTC modulok

Külső RTC modulok
Külső RTC modulok

A külső RTC modulok az I2C interfészen keresztül csatlakoznak az ESP8266-hoz, amely csak két I/O érintkezőt használ, és így működik az ESP-01-vel, valamint a többi ESP8266 eszközzel.

Az RTC modul címe 0x68, és a normál I2C parancsokkal érhető el. Van azonban valami, amit szem előtt kell tartani, az RTC regiszterek adatai BCD formátumban vannak tárolva (16. bázis), ezért a programoknak ezzel foglalkozniuk kell. Az időt és a dátumot 7 regiszter tárolja az RTC -n belül. A belső RTC -n a BCD konverziókról az rtctime modul gondoskodik.

A SetExtRTC.lua konvertálja az adatokat BCD -re és beállítja az időt.

A ReadExtRTC.lua beolvassa az időadatokat és kinyomtatja azokat. MEGJEGYZÉS: az adatok hexadecimális formában kerülnek kinyomtatásra.

Nem sok időt töltöttem a kijelző formázásával, mivel elképzelései lehetnek arról, hogy mit szeretne csinálni a dátummal és az idővel. Ez az alapmotor a legegyszerűbb formában, így tovább fejlesztheti, ha szeretné.

6. lépés: Adatnaplózás

Adatnaplózás
Adatnaplózás

Ha alaposan megnézi az RTC modulokat, észre fogja venni, hogy AT24C32 EEPROM IC vagy hasonló van beépítve, vagy használhat egy 24C256 kártyát a fentiek szerint. Az EEPROM IC -k többségének hasonló tűkimenetei vannak, mint a fentiekben. Különböző mennyiségű tárolóval rendelkeznek, de mindegyik ugyanúgy elérhető. Mivel az AT24C32 már forrasztva van a kártyára, közvetlenül használható a külső RTC I2C -jéből.

Ha csak 24C256 IC -je vagy hasonlója van, beállíthatja egy kenyértáblán, csatlakoztathatja az A1, A2 és A3 csatlakozókat a Gnd, Vcc a 3.3V és az SDA AND SCL csatlakozókat az I2C -hez, a WP lebeghet. Néhány EEPROM IC csak 5V -ról működik, ezért először ellenőrizze a vonatkozó adatlapot.

A ByteWR.lua 1 bájt adatot ír az EEPROM 0x00 memóriahelyére, és visszaolvassa.

A Desiderata.lua néhány sort ír a híres szövegből az EEPROM -ba.

Az eeRead.lua beolvassa az EEPROM adatait és kinyomtatja azokat.

MEGJEGYZÉS: Ezeknek a programoknak más EEPROM kártyákkal is együtt kell működniük.

7. lépés: Következtetés

Megpróbáltam megmutatni, hogyan működik az RTC és az EEPROM az adatnaplózáshoz. Ez csak egy kezdő lépés a további fejlődéshez. Különféle eszközöket csatlakoztathat az I2C buszhoz, például fényérzékelőket, légnyomás -érzékelőket, hőmérséklet- és páratartalom -érzékelőket, és rögzítheti az adatokat az EEPROM -on.

Ajánlott: