Tabla de contenido:

NODEMCU Lua ESP8266 con reloj en tiempo real (RTC) y EEPROM: 7 pasos
NODEMCU Lua ESP8266 con reloj en tiempo real (RTC) y EEPROM: 7 pasos

Video: NODEMCU Lua ESP8266 con reloj en tiempo real (RTC) y EEPROM: 7 pasos

Video: NODEMCU Lua ESP8266 con reloj en tiempo real (RTC) y EEPROM: 7 pasos
Video: LDmicro 14: I2C LCD & DS3231 Real-Time Clock (Microcontroller PLC Ladder Programming with LDmicro) 2024, Noviembre
Anonim
NODEMCU Lua ESP8266 con reloj en tiempo real (RTC) y EEPROM
NODEMCU Lua ESP8266 con reloj en tiempo real (RTC) y EEPROM

Obtener la hora correcta es esencial si desea mantener un registro de datos. Hay varias formas de obtener la hora de fuentes en Internet.

Puede preguntar por qué no usar el ESP8266 para mantener el tiempo para usted. Bueno, puede, tiene su propio RTC (reloj en tiempo real) interno, pero el ESP8266 tiene 3 frecuencias de reloj de funcionamiento diferentes: 52MHz cuando arranca, 80MHz durante el funcionamiento normal y 160MHz si se aumenta. Si necesita un cronometraje más preciso, especialmente durante períodos más prolongados, un RTC externo podría proporcionarle una solución. Estos módulos también tienen una batería de respaldo en caso de pérdida de energía. Un RTC no es muy preciso, ya que cuenta el tiempo transcurrido desde que se configuró y, aunque puede funcionar para la mayoría de las aplicaciones, es posible que no sea lo suficientemente bueno para mantener el tiempo crítico. Es posible obtener la hora exacta de un servidor de hora SNTP desde el cual el RTC se puede actualizar a intervalos regulares si es necesario.

El módulo DS1307 Tiny RTC I2C (arriba) es un ejemplo de estos artículos y se puede comprar en Ebay y otros proveedores por menos de £ 2. También hay otros como el DS1302 y el DS3231 que funcionan de manera similar y cuestan desde 99p en adelante.

El módulo DS1307 utiliza una interfaz I2C y para un ESP-01 debe conectarse como:

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

SDA y SCL se pueden conectar a cualquiera de los pines de E / S en los ESP8266 más grandes (modifique el código en consecuencia). Solo es necesario conectar los pines del lado izquierdo en este módulo.

Paso 1: Google Time

Hora de Google
Hora de Google

Hay muchos ejemplos de cómo obtener el tiempo de Google y se parecen a esto. Cuando ejecuta el programa GoogleTime.lua, obtiene un resultado como este:

dofile ("GoogleTime.lua")> Hora: viernes 15 de diciembre de 2017 11:19:45 GMT

El problema con este método es que obtiene la hora en formato de cadena y tiene que dividir la cadena en sus bits individuales para horas, minutos, segundos, etc. El RTC acepta la hora en un formato especial, es decir, marca de tiempo UNIX. En términos sencillos, este es el número de segundos que han transcurrido desde el jueves 1 de enero de 1970 hasta la actualidad. La mayoría de los sistemas operativos utilizan UNIX Epoch (1970/01/01 00:00:00) y el tiempo transcurrido se almacena como un número de 32 bits con signo. Esto significa que este sistema funcionará hasta el 19 de enero de 2038, cuando el número será demasiado grande para almacenarlo de esta manera. Una solución es almacenar el número como 64 bits, pero por ahora el método de 32 bits será suficiente.

Para establecer la hora en el 9 de julio de 2015, 18:29:49 en el RTC interno, debe usar esta línea de código:

rtctime.set (1436430589, 0)

Los 2 parámetros son segundos y microsegundos.

Puede encontrar más información leyendo la documentación de NodeMCU.

Paso 2: servidores de hora SNTP

Servidores de hora SNTP
Servidores de hora SNTP

El Protocolo simple de tiempo de red (SNTP) se proporciona desde muchas fuentes en Internet, y muchos países de todo el mundo tienen este servicio.

El programa SNTPTime2.lua establece la hora en el RTC interno. Debe tener los módulos rtctime y sntp en su compilación cuando actualice su ESP8266. El programa obtiene la hora del servidor en segundos y microsegundos y establece el RTC interno con rtctime.set (sec, usec).

A continuación, el programa muestra la fecha y la hora en diferentes formatos.

Hay muchos servidores SNTP en todo el mundo y algunos son los siguientes:

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

Todas las líneas de código anteriores se pueden sustituir en el programa SNTPTime2.lua.

Hay más servidores SNTP en las direcciones a continuación que nuevamente se pueden usar en el programa.

93.170.62.252, 130.88.202.49, 79.135.97.79, ntp.exnet.com

Google también proporciona servidores de tiempo en estas direcciones:

216.239.35.0, 216.239.35.4, 216.239.35.8, 216.239.35.12

Debe recordar obtener la hora del país en el que se encuentra o es posible que deba modificarla para las diferentes zonas horarias del mundo. Además, algunos países tienen horario de verano, por lo que es posible que también tenga que lidiar con eso.

Paso 3: Obtener el tiempo del módulo RTC

Obtener el tiempo del módulo RTC
Obtener el tiempo del módulo RTC

El programa GetRTCTime.lua lee la hora del RTC interno.

La primera parte lee la hora y la muestra en segundos y microsegundos.

La segunda parte lo convierte en un formato más legible por humanos.

al llamar a tm = rtctime.epoch2cal (rtctime.get ()) devuelve:

  • año - 1970 ~ 2038
  • lun - mes 1 ~ 12 en el año actual
  • día - día 1 ~ 31 en el mes actual
  • hora
  • min
  • segundo
  • día - día 1 ~ 366 en el año actual
  • wday - día 1 ~ 7 en la semana actual (el domingo es 1)

Se puede acceder a cada elemento como tm ["día"], tm ["año"] …

Puede encontrar más información leyendo la documentación de NodeMCU.

DisplaySNTPtime.lua es una forma más elaborada de mostrar la fecha y la hora en una pantalla LCD OLED de 128 x 64, ya que se conecta fácilmente y se puede utilizar con estos programas.

Paso 4: memoria de usuario de RTC

Una pequeña desviación del tiempo es que el RTC interno del ESP8266 tiene direcciones de memoria de 128 x 32 bits a las que puede acceder el programador. Son especialmente útiles ya que pueden sobrevivir al ciclo de sueño profundo del ESP8266. Depende del programador controlar su uso y asegurarse de que no se sobrescriban accidentalmente.

He incluido RTCmem.lua, un programa sencillo que demuestra su uso. Necesita tener el módulo rtcmem en su compilación.

Paso 5: Módulos RTC externos

Módulos RTC externos
Módulos RTC externos

Los módulos RTC externos se conectan al ESP8266 a través de la interfaz I2C, que solo usa dos pines de E / S y, por lo tanto, funciona con el ESP-01 y con la mayoría de los demás dispositivos ESP8266.

La dirección del módulo RTC es 0x68 y se accede mediante los comandos I2C normales. Sin embargo, hay algo a tener en cuenta, los datos en los registros RTC se almacenan en formato BCD (base 16), por lo que sus programas deben lidiar con esto. La hora y la fecha se almacenan en 7 registros dentro del RTC. En el RTC interno, las conversiones BCD están a cargo del módulo rtctime.

SetExtRTC.lua convierte los datos a BCD y establece la hora.

ReadExtRTC.lua lee los datos de tiempo y los imprime. NOTA: los datos se imprimen en hexadecimal.

No he pasado mucho tiempo formateando la pantalla, ya que es posible que tenga sus propias ideas sobre lo que quiere hacer con la fecha y la hora. Este es el motor básico en su forma más simple, para que pueda desarrollarlo más si lo desea.

Paso 6: registro de datos

Registro de datos
Registro de datos

Si observa detenidamente los módulos RTC, notará que tienen un circuito integrado EEPROM AT24C32 o similar integrado, o puede usar una placa 24C256 como se indicó anteriormente. La mayoría de estos circuitos integrados EEPROM tienen pines similares a los anteriores. Vienen con varias cantidades de almacenamiento, pero se accede a todos de la misma manera. Como el AT24C32 ya está soldado a la placa, se puede usar directamente desde el I2C del RTC externo.

Si solo tiene un IC 24C256 o similar, puede configurarlo en una placa de prueba, conectar A1, A2 y A3 a Gnd, Vcc a 3.3V y SDA Y SCL a I2C, WP puede dejarse flotando. Algunos circuitos integrados EEPROM solo funcionan a 5 V, así que primero consulte la hoja de datos correspondiente.

ByteWR.lua escribe 1 byte de datos en la ubicación de memoria 0x00 de la EEPROM y los vuelve a leer.

Desiderata.lua escribe un par de líneas de un texto famoso en la EEPROM.

eeRead.lua lee datos de la EEPROM y los imprime.

NOTA: Estos programas también deberían funcionar con otras placas EEPROM.

Paso 7: Conclusión

He intentado mostrar cómo funcionan el RTC y la EEPROM para el registro de datos. Esto es solo un comienzo para que desarrolles más. Puede conectar varios dispositivos al bus I2C, como sensores de luz, sensores de presión barométrica, sensores de temperatura y humedad y registrar los datos en la EEPROM.

Recomendado: