Sisällysluettelo:
- Vaihe 1: Googlen aika
- Vaihe 2: SNTP -aikapalvelimet
- Vaihe 3: Aika RTC -moduulista
- Vaihe 4: RTC -käyttäjän muisti
- Vaihe 5: Ulkoiset RTC -moduulit
- Vaihe 6: Tietojen kirjaaminen
- Vaihe 7: Johtopäätös
Video: NODEMCU Lua ESP8266, jossa on reaaliaikainen kello (RTC) ja EEPROM: 7 vaihetta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:01
Oikean ajan saaminen on välttämätöntä, jos haluat pitää datalokia. On useita tapoja saada aikaa Internetin lähteistä.
Voit kysyä, miksi et käytä ESP8266 -laitetta pitääksesi aikaa sinulle? Voit, sillä on oma sisäinen RTC (reaaliaikainen kello), mutta ESP8266: ssa on 3 erilaista kellotaajuutta - 52MHz käynnistettäessä, 80MHz normaalin käytön aikana ja 160MHz tehostettuna. Jos tarvitset tarkempaa ajankäyttöä, etenkin pidemmällä aikavälillä, ulkoinen RTC saattaa tarjota ratkaisun. Näissä moduuleissa on myös vara -akku virran katkeamisen varalta. RTC ei ole kauhean tarkka, koska se laskee sen asettamisesta kuluneen ajan, ja vaikka se voi toimia useimmissa sovelluksissa, se ei ehkä ole riittävän hyvä kriittiseen ajan pitämiseen. On mahdollista saada tarkka aika SNTP -aikapalvelimelta, josta RTC voidaan päivittää säännöllisin väliajoin tarvittaessa.
Esimerkki näistä tuotteista on DS1307 Tiny RTC I2C -moduuli (yllä), ja sen voi ostaa Ebaysta ja muilta toimittajilta alle 2 puntaa. On myös muita, kuten DS1302 ja DS3231, jotka toimivat samalla tavalla ja maksavat 99 p: stä ylöspäin.
DS1307-moduuli käyttää I2C-liitäntää, ja ESP-01-liitäntä on liitettävä seuraavasti:
Vcc - 3.3v, Gnd - Gnd, SDA - D3, SCL - D4
SDA ja SCL voidaan liittää mihin tahansa suurempien ESP8266 -laitteiden I/O -nastoihin (muuta koodia vastaavasti). Tähän moduuliin on liitettävä vain vasemmanpuoleiset tapit.
Vaihe 1: Googlen aika
On monia esimerkkejä ajan hankkimisesta Googlelta ja näyttää tältä. Kun suoritat GoogleTime.lua -ohjelman, saat seuraavanlaisen tuloksen:
dofile ("GoogleTime.lua")> Aika: pe, 15. joulu 2017 11:19:45 GMT
Tämän menetelmän ongelmana on, että saat ajan merkkijonomuodossa ja joudut jakamaan merkkijonon yksittäisiksi bitteiksi tunteja, minuutteja, sekunteja jne. RTC hyväksyy ajan erityisessä muodossa eli UNIX -aikaleimalla. Maallikon kannalta tämä on sekuntien määrä, joka on kulunut torstaista 1. tammikuuta 1970 - tähän päivään. Useimmat tietokoneiden käyttöjärjestelmät käyttävät UNIX Epochia (1970/01/01 00:00:00) ja kulunut aika tallennetaan allekirjoitettuna 32 -bittisenä numerona. Tämä tarkoittaa, että tämä järjestelmä toimii 19. tammikuuta 2038 asti, jolloin numerosta tulee liian suuri tallennettavaksi tällä tavalla. Yksi ratkaisu on tallentaa numero 64 -bittiseksi, mutta toistaiseksi 32 -bittinen menetelmä riittää.
Jos haluat asettaa ajan 2015 heinäkuuhun 9, 18:29:49 sisäisessä RTC: ssä, käytä tätä koodiriviä:
rtctime.set (1436430589, 0)
Kaksi parametria ovat sekunnit ja mikrosekunnit.
Löydät lisätietoja NodeMCU -dokumentaatiosta.
Vaihe 2: SNTP -aikapalvelimet
Yksinkertainen verkon aikaprotokolla (SNTP) on saatavilla monista Internetin lähteistä, ja tämä palvelu on käytössä monissa maissa ympäri maailmaa.
Ohjelma SNTPTime2.lua asettaa kellonajan sisäiselle RTC: lle. Sinulla on oltava rtctime & sntp -moduulit koossa, kun päivität ESP8266: n. Ohjelma saa ajan palvelimelta sekunteina ja mikrosekunteina ja asettaa sisäisen RTC: n rtctime.set (sec, usec).
Ohjelma näyttää sitten päivämäärän ja kellonajan eri muodoissa.
SNTP -palvelimia on monia ympäri maailmaa, ja jotkut ovat seuraavat:
- 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"},
Kaikki yllä olevat koodirivit voidaan korvata SNTPTime2.lua -ohjelmalla.
Alla olevissa osoitteissa on enemmän SNTP -palvelimia, joita voidaan jälleen käyttää ohjelmassa.
93.170.62.252, 130.88.202.49, 79.135.97.79, ntp.exnet.com
Google tarjoaa myös aikapalvelimia seuraaviin osoitteisiin:
216.239.35.0, 216.239.35.4, 216.239.35.8, 216.239.35.12
Sinun on muistettava hankkia aika maasta, jossa olet, tai saatat joutua muuttamaan sitä eri maailman aikavyöhykkeille. Joissakin maissa on myös kesäaika, joten saatat joutua käsittelemään myös sitä.
Vaihe 3: Aika RTC -moduulista
Ohjelma GetRTCTime.lua lukee ajan sisäisestä RTC: stä.
Ensimmäinen osa lukee ajan ja näyttää sen sekunneissa ja mikrosekunneissa.
Toinen osa muuntaa sen ihmisen luettavampaan muotoon.
soitettaessa tm = rtctime.epoch2cal (rtctime.get ()) se palauttaa:
- vuosi - 1970 ~ 2038
- ma - kuukausi 1 ~ 12 kuluvana vuonna
- päivä - päivä 1 ~ 31 kuluvana kuukautena
- tunnin
- min
- sek
- päivä - päivä 1 ~ 366 kuluvana vuonna
- wday - päivä 1 ~ 7 kuluvalla viikolla (sunnuntai on 1)
Jokainen kohde on käytettävissä tm ["päivä"], tm ["vuosi"]…
Löydät lisätietoja NodeMCU -dokumentaatiosta.
DisplaySNTPtime.lua on yksityiskohtaisempi tapa näyttää päivämäärä ja kellonaika 128 x 64 OLED -LCD -näytöllä, koska se on helppo yhdistää ja sitä voidaan käyttää näiden ohjelmien kanssa.
Vaihe 4: RTC -käyttäjän muisti
ESP8266: n sisäinen RTC sisältää 128 x 32 -bittisiä muistiosoitteita, joihin ohjelmoija voi päästä käsiksi. Ne ovat erityisen hyödyllisiä, koska ne voivat selviytyä ESP8266: n syvästä unesta. Ohjelmoijan tehtävä on valvoa niiden käyttöä ja varmistaa, ettei niitä korvata vahingossa.
Olen sisällyttänyt RTCmem.lua -ohjelman, joka on yksinkertainen ohjelma, joka osoittaa sen käytön. Rakennuksessasi on oltava rtcmem -moduuli.
Vaihe 5: Ulkoiset RTC -moduulit
Ulkoiset RTC-moduulit muodostavat yhteyden ESP8266-laitteeseen I2C-liitännän kautta, joka käyttää vain kahta I/O-nastaa ja toimii siten ESP-01: n ja useimpien muiden ESP8266-laitteiden kanssa.
RTC -moduulin osoite on 0x68 ja siihen pääsee tavallisilla I2C -komennoilla. On kuitenkin pidettävä mielessä, että RTC -rekisterien tiedot tallennetaan BCD -muotoon (pohja 16), joten ohjelmien on käsiteltävä tätä. Aika ja päivämäärä tallennetaan 7 rekisteriin RTC: ssä. Sisäisessä RTC: ssä rtctime -moduuli huolehtii BCD -muunnoksista.
SetExtRTC.lua muuntaa tiedot BCD: ksi ja asettaa ajan.
ReadExtRTC.lua lukee aikatiedot ja tulostaa ne. HUOMAUTUS: tiedot tulostetaan heksadesimaaleina.
En ole käyttänyt paljon aikaa näytön muotoiluun, koska sinulla voi olla omia ajatuksiasi siitä, mitä haluat tehdä päivämäärän ja kellonajan kanssa. Tämä on perusmoottori yksinkertaisimmassa muodossaan, joten voit halutessasi kehittää sitä edelleen.
Vaihe 6: Tietojen kirjaaminen
Jos katsot tarkasti RTC -moduuleja, huomaat, että niissä on AT24C32 EEPROM IC tai vastaava sisäänrakennettu, tai voit käyttää 24C256 -korttia kuten edellä. Useimmilla näistä EEPROM -piireistä on samanlaiset nastat kuin edellä. Niissä on useita tallennustilaa, mutta niihin pääsee käsiksi samalla tavalla. Koska AT24C32 on jo juotettu levylle, sitä voidaan käyttää suoraan ulkoisen RTC: n I2C: stä.
Jos sinulla on vain 24C256 IC tai vastaava, voit asettaa sen leipätaululle, liittää A1, A2 ja A3 Gnd: ään, Vcc 3.3 V: iin ja SDA JA SCL I2C: hen, WP voidaan jättää kellumaan. Jotkut EEPROM -piirit toimivat vain 5 V: n jännitteellä, joten tarkista ensin asianmukainen tietolomake.
ByteWR.lua kirjoittaa 1 tavun dataa EEPROM -muistipaikkaan 0x00 ja lukee sen takaisin.
Desiderata.lua kirjoittaa pari riviä kuuluisasta tekstistä EEPROMiin.
eeRead.lua lukee tiedot EEPROMista ja tulostaa ne.
HUOMAUTUS: Näiden ohjelmien pitäisi toimia myös muiden EEPROM -korttien kanssa.
Vaihe 7: Johtopäätös
Olen yrittänyt näyttää, miten RTC ja EEPROM toimivat tietojen kirjaamisessa. Tämä on vain alku, jota voit kehittää edelleen. Voit liittää I2C -väylään erilaisia laitteita, kuten valoanturit, ilmanpaineanturit, lämpötila- ja kosteusanturit ja tallentaa tiedot EEPROM -laitteeseen.
Suositeltava:
Reaaliaikainen kello Arduinolla: 3 vaihetta
Reaaliaikainen kello Arduinolla: Tässä projektissa teemme kellon Arduino- ja RTC -moduulin avulla. Kuten tiedämme, Arduino ei voi näyttää todellista aikaa, joten käytämme RTC -moduulia oikean ajan näyttämiseen nestekidenäytössä. Lue kaikki vaiheet huolellisesti, se auttaa sinua
ESP8266 Verkkokello ilman RTC: tä - Nodemcu NTP -kello Ei RTC - INTERNET CLOCK PROJECT: 4 vaihetta
ESP8266 Verkkokello ilman RTC: tä | Nodemcu NTP -kello Ei RTC | INTERNET CLOCK PROJECT: Projektissa tehdään kelloprojekti ilman RTC: tä, se vie aikaa Internetistä wifi -yhteyden avulla ja näyttää sen st7735 -näytöllä
DS3231 RTC (reaaliaikainen kello) -asetuksen määrittäminen tarkasti, nopeasti ja automaattisesti Javan avulla (+-1 s): 3 vaihetta
DS3231 RTC: n (reaaliaikainen kello) asettaminen tarkasti, nopeasti ja automatisoidusti Javan avulla (+-1 s): Tämä opas näyttää sinulle kuinka asettaa aika DS3231-reaaliaikakellolle käyttämällä Arduinoa ja pientä Java-sovellusta, joka käyttää Ohjelman peruslogiikka: 1. Arduino lähettää sarjapyynnön
DS1307 Reaaliaikainen kello RTC Arduinolla: 4 vaihetta
DS1307 Reaaliaikainen kello RTC Arduinolla: Tässä opetusohjelmassa opimme reaaliaikaisesta kellosta (RTC) ja siitä, miten Arduino & Real Time Clock IC DS1307 on koottu ajoituslaitteeksi.Real Time Clock (RTC) -kelloa käytetään ajan seurantaan ja kalenterin ylläpitoon
Kellon tekeminen M5stick C: llä Arduino IDE: n avulla - RTC-reaaliaikainen kello M5stack M5stick-C: 4 vaihetta
Kellon tekeminen M5stick C: llä Arduino IDE: n avulla | RTC-reaaliaikainen kello M5stack M5stick-C: Hei kaverit, tässä ohjeessa opimme tekemään kellon m5stick-C-kehityskortilla m5stackista Arduino IDE: n avulla, joten m5stick näyttää päivämäärän, ajan ja amp; kuukauden viikko näytössä