Sisällysluettelo:

NODEMCU Lua ESP8266, jossa on reaaliaikainen kello (RTC) ja EEPROM: 7 vaihetta
NODEMCU Lua ESP8266, jossa on reaaliaikainen kello (RTC) ja EEPROM: 7 vaihetta

Video: NODEMCU Lua ESP8266, jossa on reaaliaikainen kello (RTC) ja EEPROM: 7 vaihetta

Video: NODEMCU Lua ESP8266, jossa on reaaliaikainen kello (RTC) ja EEPROM: 7 vaihetta
Video: FLProg9: Будильник RTC | ESP32 NodeMCU | Визуальное программирование для Arduino 2024, Marraskuu
Anonim
NODEMCU Lua ESP8266, jossa on reaaliaikainen kello (RTC) ja EEPROM
NODEMCU Lua ESP8266, jossa on reaaliaikainen kello (RTC) ja EEPROM

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

Googlen aika
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

SNTP -aikapalvelimet
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

Ajan saaminen RTC -moduulista
Ajan saaminen 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
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

Tietojen kirjaaminen
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: