Taula de continguts:

NODEMCU Lua ESP8266 amb rellotge en temps real (RTC) i EEPROM: 7 passos
NODEMCU Lua ESP8266 amb rellotge en temps real (RTC) i EEPROM: 7 passos

Vídeo: NODEMCU Lua ESP8266 amb rellotge en temps real (RTC) i EEPROM: 7 passos

Vídeo: NODEMCU Lua ESP8266 amb rellotge en temps real (RTC) i EEPROM: 7 passos
Vídeo: NodeMCU V3 ESP8266 - обзор, подключение и прошивка в Arduino IDE 2024, Desembre
Anonim
NODEMCU Lua ESP8266 amb rellotge en temps real (RTC) i EEPROM
NODEMCU Lua ESP8266 amb rellotge en temps real (RTC) i EEPROM

Obtenir l’hora correcta és essencial si voleu mantenir un registre de dades. Hi ha diverses maneres d’obtenir el temps de fonts d’Internet.

Us podeu preguntar per què no utilitzeu l’ESP8266 per guardar-vos el temps? Bé, podeu, té el seu propi RTC intern (rellotge en temps real), però l’ESP8266 té 3 freqüències de rellotge de funcionament diferents: 52 MHz quan arrenca, 80 MHz durant el funcionament normal i 160 MHz si s’incrementa. Si necessiteu un temps més precís, sobretot en períodes més llargs, és possible que un RTC extern us proporcioni una solució. Aquests mòduls també tenen una còpia de seguretat de la bateria en cas de pèrdua d’alimentació. Un RTC no és terriblement precís ja que compta el temps transcorregut des que es va configurar i, tot i que ho pot fer per a la majoria d’aplicacions, pot ser que no sigui prou bo per mantenir el temps crític. És possible obtenir una hora exacta d'un servidor de temps SNTP des del qual es pot actualitzar el RTC a intervals regulars si cal.

El mòdul DS1307 Tiny RTC I2C (anterior) és un exemple d’aquests articles i es pot comprar a Ebay i altres proveïdors per menys de 2 GBP. També n’hi ha d’altres com el DS1302 i el DS3231 que funcionen de manera similar i costen des de 99p en amunt.

El mòdul DS1307 utilitza una interfície I2C i per a un ESP-01 s'ha de connectar com:

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

SDA i SCL es poden connectar a qualsevol dels pins d'E / S dels ESP8266 més grans (modifiqueu el codi en conseqüència). Només cal connectar els pins laterals esquerra en aquest mòdul.

Pas 1: Google Time

Google Time
Google Time

Hi ha molts exemples d’obtenir el temps de Google i semblar una cosa així. Quan executeu el programa GoogleTime.lua, obtindreu un resultat com aquest:

dofile ("GoogleTime.lua")> Hora: divendres, 15 de desembre de 2017 11:19:45 GMT

El problema d’aquest mètode és que obteniu l’hora en format de cadena i heu de dividir la cadena en els seus bits individuals durant hores, minuts, segons, etc. El RTC accepta l’hora en un format especial, és a dir, segell de temps UNIX. En termes laics, aquest és el nombre de segons que han transcorregut des del dijous 1 de gener de 1970 fins a l'actualitat i l'hora actuals. La majoria de sistemes operatius d’ordinadors utilitzen l’època UNIX (1970/01/01 00:00:00) i el temps transcorregut s’emmagatzema com un número de 32 bits signat. Això significa que aquest sistema funcionarà fins al 19 de gener de 2038, quan el nombre serà massa gran per emmagatzemar-se d'aquesta manera. Una solució és emmagatzemar el nombre com a 64 bits, però per ara el mètode de 32 bits serà suficient.

Per establir l'hora al 9 de juliol de 2015 a les 18:29:49 a l'RTC intern, hauríeu d'utilitzar aquesta línia de codi:

rtctime.set (1436430589, 0)

Els 2 paràmetres són segons i micro segons.

Podeu trobar més informació llegint la documentació NodeMCU.

Pas 2: Servidors de temps SNTP

Servidors de temps SNTP
Servidors de temps SNTP

El protocol de temps de xarxa simple (SNTP) es proporciona de moltes fonts a Internet i molts països de tot el món tenen aquest servei.

El programa SNTPTime2.lua estableix l'hora al RTC intern. Heu de tenir els mòduls rtctime & sntp a la vostra compilació quan feu flaix el vostre ESP8266. El programa obté el temps del servidor en segons i micro segons i estableix el RTC intern amb rtctime.set (sec, usec).

A continuació, el programa mostra la data i l’hora en diferents formats.

Hi ha molts servidors SNTP a tot el món i alguns són els següents:

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

Totes les línies de codi anteriors es poden substituir al programa SNTPTime2.lua.

Hi ha més servidors SNTP a les adreces de sota que es poden tornar a utilitzar al programa.

93.170.62.252, 130.88.202.49, 79.135.97.79, ntp.exnet.com

Google també proporciona servidors horaris a aquestes adreces:

216.239.35.0, 216.239.35.4, 216.239.35.8, 216.239.35.12

Cal recordar per obtenir el temps del país on es troba o potser haureu de modificar-lo per als diferents fusos horaris mundials. També alguns països tenen horari d’estiu, de manera que és possible que també hàgiu de fer-ho.

Pas 3: Obtenir el temps des del mòdul RTC

Obtenir el temps des del mòdul RTC
Obtenir el temps des del mòdul RTC

El programa GetRTCTime.lua llegeix l’hora del RTC intern.

La primera part llegeix el temps i el mostra en segons i microsegons.

La segona part el converteix en un format més llegible per a humans.

en trucar a tm = rtctime.epoch2cal (rtctime.get ()), torna:

  • any - 1970 ~ 2038
  • dilluns - 1 a 12 de l'any en curs
  • dia - dia 1 ~ 31 del mes actual
  • hores
  • mín
  • seg
  • dia - dia 1 ~ 366 de l'any en curs
  • wday - dia 1 ~ 7 de la setmana actual (el diumenge és 1)

Es pot accedir a cada element com tm ["dia"], tm ["any"] …

Podeu trobar més informació llegint la documentació NodeMCU.

DisplaySNTPtime.lua és una forma més elaborada de mostrar la data i l'hora en una pantalla OLED LCD de 128 x 64, ja que es connecta fàcilment i es pot utilitzar amb aquests programes.

Pas 4: memòria d'usuari RTC

Una mica de desviació del temps és que l’RTC intern de l’ESP8266 té adreces de memòria de 128 x 32 bits a les quals el programador pot accedir. Són especialment útils ja que poden sobreviure al cicle de son profund de l’ESP8266. Correspon al programador controlar el seu ús i assegurar-se que no se sobreescriuen accidentalment.

He inclòs RTCmem.lua, un programa senzill que demostra el seu ús. Heu de tenir el mòdul rtcmem a la vostra compilació.

Pas 5: mòduls RTC externs

Mòduls RTC externs
Mòduls RTC externs

Els mòduls RTC externs es connecten a l'ESP8266 mitjançant la interfície I2C, que només utilitza dos pins d'E / S i, per tant, funciona amb l'ESP-01, així com amb la majoria dels altres dispositius ESP8266.

L'adreça del mòdul RTC és 0x68 i s'hi accedeix mitjançant les ordres I2C normals. Tanmateix, hi ha alguna cosa a tenir en compte: les dades dels registres RTC s’emmagatzemen en format BCD (base 16), de manera que els vostres programes s’hi han d’ocupar. L'hora i la data s'emmagatzemen en 7 registres dins del RTC. Al RTC intern, el mòdul rtctime té cura de les conversions BCD.

SetExtRTC.lua converteix les dades a BCD i estableix l'hora.

ReadExtRTC.lua llegeix les dades de temps i les imprimeix. NOTA: les dades s’imprimeixen en hexadecimal.

No he dedicat gaire temps a formatar la pantalla, ja que és possible que tingueu les vostres idees sobre què voleu fer amb la data i l’hora. Aquest és el motor bàsic en la seva forma més senzilla, perquè pugueu desenvolupar-lo encara més si ho desitgeu.

Pas 6: registre de dades

Registre de dades
Registre de dades

Si mireu detingudament els mòduls RTC, notareu que tenen integrat un CI EEPROM AT24C32 o similar, o bé podeu utilitzar una placa 24C256 com es va indicar anteriorment. La majoria d’aquests CI EEPROM tenen sortides de pins similars a les anteriors. Ofereixen diverses quantitats d’emmagatzematge, però s’accedeix a tots de la mateixa manera. Com que l'AT24C32 ja està soldat a la placa, es pot utilitzar directament des de l'I2C del RTC extern.

Si només teniu un IC 24C256 o similar, podeu configurar-lo en una placa de connexió, connectar A1, A2 i A3 a Gnd, Vcc a 3,3V i SDA I SCL a I2C, el WP es pot deixar flotant. Alguns circuits integrats EEPROM només funcionen a 5 V, així que consulteu primer el full de dades rellevant.

ByteWR.lua escriu 1 byte de dades a la ubicació de memòria 0x00 de l'EEPROM i les llegeix de nou.

Desiderata.lua escriu un parell de línies de text famós a la EEPROM.

eeRead.lua llegeix les dades de l'EEPROM i les imprimeix.

NOTA: Aquests programes també haurien de funcionar amb altres plaques EEPROM.

Pas 7: Conclusió

He intentat mostrar com funcionen RTC i EEPROM per al registre de dades. Això és només un principi per desenvolupar-lo més. Podeu connectar diversos dispositius al bus I2C com ara sensors de llum, sensors de pressió baromètrica, sensors de temperatura i humitat i enregistrar les dades a l’EEPROM.

Recomanat: