Tabla de contenido:
- Paso 1: Google Time
- Paso 2: servidores de hora SNTP
- Paso 3: Obtener el tiempo del módulo RTC
- Paso 4: memoria de usuario de RTC
- Paso 5: Módulos RTC externos
- Paso 6: registro de datos
- Paso 7: Conclusión
Video: NODEMCU Lua ESP8266 con reloj en tiempo real (RTC) y EEPROM: 7 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:42
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
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
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
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
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
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:
Reloj de red ESP8266 sin ningún RTC - Reloj Nodemcu NTP Sin RTC - PROYECTO RELOJ DE INTERNET: 4 Pasos
Reloj de red ESP8266 sin ningún RTC | Reloj Nodemcu NTP Sin RTC | PROYECTO DE RELOJ DE INTERNET: En el proyecto se realizará un proyecto de reloj sin RTC, se tomará tiempo de Internet usando wifi y lo mostrará en la pantalla st7735
Configuración del DS3231 RTC (reloj en tiempo real) de forma precisa, rápida y automatizada mediante Java (+ -1 s): 3 pasos
Configuración del DS3231 RTC (reloj en tiempo real) de manera precisa, rápida y automatizada usando Java (+ -1s): este Instructable le mostrará cómo configurar la hora en un reloj en tiempo real DS3231 usando un Arduino y una pequeña aplicación Java que usa la conexión serial del Arduino. La lógica básica de este programa: 1. El Arduino envía una solicitud en serie
DS1307 Reloj en tiempo real RTC con Arduino: 4 pasos
DS1307 Real Time Clock RTC con Arduino: En este tutorial, aprenderemos sobre Real Time Clock (RTC) y cómo Arduino & El reloj de tiempo real IC DS1307 se ensambla como un dispositivo de cronometraje. El reloj de tiempo real (RTC) se usa para monitorear el tiempo y mantener un calendario. Para usar un RTC, w
Hacer un reloj con M5stick C usando Arduino IDE - Reloj de tiempo real RTC con M5stack M5stick-C: 4 pasos
Hacer un reloj con M5stick C usando Arduino IDE | Reloj en tiempo real RTC con M5stack M5stick-C: Hola chicos, en este instructables aprenderemos cómo hacer un reloj con la placa de desarrollo m5stick-C de m5stack usando Arduino IDE. Entonces m5stick mostrará la fecha, hora y amp; semana del mes en la pantalla
Cómo hacer un reloj en tiempo real con Arduino y pantalla TFT - Arduino Mega RTC con pantalla TFT de 3,5 pulgadas: 4 pasos
Cómo hacer un reloj en tiempo real usando Arduino y pantalla TFT | Arduino Mega RTC con pantalla TFT de 3.5 pulgadas: Visite mi canal de Youtube. Introducción: - En esta publicación voy a hacer un "Reloj en tiempo real" usando LCD táctil TFT de 3.5 pulgadas, Arduino Mega Módulo RTC 2560 y DS3231… .Antes de comenzar… verifique el video de mi canal de YouTube. Nota: - Si está usando Arduin