▷ #ESP32 - REAL-TIME CLOCK #RTC INTERNO

⭐⭐⭐⭐⭐ #ESP32 - REAL-TIME CLOCK #RTC INTERNO


Reloj en tiempo real (en ingles Real Time Clock, RTC) es un reloj de ordenador, capaz de mantener la fecha y hora. Perfectos para aplicaciones donde se requiere manejar el tiempo con precisión. En el mercado tenemos muchos módulos RTC para microcontroladores  tales como el DS1307 y DS3231. Son muy útiles y fácil de usar, por ello los tenemos presentes en varios tipos de proyectos. Sin embargo, es grato informarle al lector, que nuestras placas ESP32 no requieren de comprar dichos módulos, porque ya tienen un RTC interno que podemos usar. A continuación mostraremos la arquitectura de nuestro microcontrolador.

 

Si observamos en la imagen, uno de los módulos internos del micro es un RTC funcional, el cual el se utilizan en varios procesos, y en uno de ellos tenemos manejar hora y fecha con precisión, a lo largo de esta presentación, veremos como podemos usarlo y sacar el máximo provecho de nuestras placas #ESP32.

  • Librería ESP32Time

Esta librería nos ofrecerá todas las herramientas necesarias para sacar provecho a nuestro RTC interno, el link de descarga al igual a toda la documentación la puede encontrar en el siguiente enlace:

https://www.arduinolibraries.info/libraries/esp32-time

Recomendamos al lector revisarlo para aprender a profundidad sobre la libreria y todas las características que ofrece.

El método de instalación es el mismo de siempre. Entramos al link, y descargamos el rar de la versión que deseamos, abrimos nuestro Arduino-IDE, nos dirigimos a Programa -> Incluir Librería ->  Añadir biblioteca zip y seleccionamos el rar que descargamos. 

  • Obtener Fecha y Hora

Una vez descargada la librería ESP32Time, estamos listos para empezar a utilizar nuestro RTC interno, a continuación se presenta un código para los primeros pasos con la librería.

  • Explicación del código

Primero debemos incluir la librería y crear un objeto del tipo ESP32Time, este objeto representara nuestro RTC y es donde podremos consultar los diferentes datos de fecha y hora, por eso es de suma importancia incluirlo al inicio.


En nuestro void setup iniciamos nuestro serial, para poder visualizar luego los datos obtenidos. Inmediatamente configuramos nuestro rtc, utilizando la función setTime, podemos iniciar y definir la fecha - hora de nuestro RTC. Esta función recibe como parámetros de entrada 6 enteros que representan en orden de izquierda a derecha: segundo, minutos, hora, dia, mes, año.









Con esto ya tendríamos configurado y funcionando nuestro RTC interno, la ventaja que nos otorga esta librería es que no tenemos que andar actualizando nuestra variable, al contrario, eso se encarga el objeto ESP32Time, resultando que solo debamos preocuparnos en pedir los datos que necesitemos.

Una vez terminado con nuestro setup, podemos ir a nuestro void loop. Para obtener datos de fecha y hora, basta con nombrar nuestro objeto ESP32Time y solicitar sus parámetros, tal como se muestra a continuación.



Se puede extraer toda la hora y fecha directamente en formato String para mostrarlo, o extraer los diferentes elementos en formato int, a continuación se presentan todos los parametros de nuestro RTC que podemos obtener con su respectivo tipo de dato.

getTime()          //  (String) 15:24:38
getDate()          //  (String) Sun, Jan 17 2021
getDate(true)      //  (String) Sunday, January 17 2021
getDateTime()      //  (String) Sun, Jan 17 2021 15:24:38
getDateTime(true)  //  (String) Sunday, January 17 2021 15:24:38
getTimeDate()      //  (String) 15:24:38 Sun, Jan 17 2021
getTimeDate(true)  //  (String) 15:24:38 Sunday, January 17 2021

getMicros()        //  (long)    723546
getMillis()        //  (long)    723
getEpoch()         //  (long)    1609459200
getSecond()        //  (int)     38    (0-59)
getMinute()        //  (int)     24    (0-59)
getHour()          //  (int)     3     (0-12)
getHour(true)      //  (int)     15    (0-23)
getAmPm()          //  (String)  pm
getAmPm(true)      //  (String)  PM
getDay()           //  (int)     17    (1-31)
getDayofWeek()     //  (int)     0     (0-6)
getDayofYear()     //  (int)     16    (0-365)
getMonth()         //  (int)     0     (0-11)
getYear()          //  (int)     2021
Por ultimo solo bastaría mostrar los resultados obtenidos para demostrar que nuestro RTC funciona.


Y con esto ya tendríamos un RTC completamente funcional, para poder automatizar nuestros procesos por tiempo. Al final del código se coloca un delay(1000) pero cabe mencionar que es solamente para que no se llene de varios datos nuestro monitor serial, el lector puede reemplazar o quitar, para observar que el RTC no depende del delay y la hora se estará actualizando independientemente.

  • Ejecución del código

Compilamos el código y lo subimos a la placa. Abrimos el monitor serial y podemos observar como nuestro RTC interno funciona perfectamente, se muestra como el reloj empieza a incrementar progresivamente tal como lo realizaría un reloj.



  • Comparación RTC interno Vs DS3231

Por ultimo nos gustaría mostrar al usuario como nuestro RTC interno es tan eficiente como los RTC comerciales que podemos encontrar. Se procederá a subir el siguiente código.



Descargamos la librería del modulo DS3231, compilamos y lo subimos a la placa. Abrimos el monitor serial y nos saldrá lo siguiente.


Y tal como nos muestra el monitor tanto el RTC interno y el RTC externo nos entregan el mismo resultado, ambos los iniciamos al mismo tiempo, se configuraron con los mismos parámetros y van exactamente a la par. Demostrando así la eficiencia del reloj interno.

  • Conclusiones

El RTC interno de nuestros ESP32 es tan preciso, exacto y confiable como cualquier otro RTC comercial. Esto nos permite disminuir el tamaño de nuestras placas al no tener que agregar módulos adicionales, minimizando tamaño lo que se traduce como menos costos de fabricación y componentes.

  • Recomendaciones:

Al momento de utilizar el RTC interno, tener en cuenta que depende de nuestro ESP32, por lo que al momento de desenergizar nuestro dispositivo, nuestro RTC también volverá a resetearse.


Comentarios

  1. Gracias electronic de provecho el tema del RTC en el ESP

    ResponderBorrar
  2. Buenas, La fecha de la forma n° 2 se desfasa en un mes (Forma 1Mes=July, Forma 2 Mes =6), como se soluciona eso?, muchísimas gracias

    ResponderBorrar
    Respuestas
    1. int mes = rtc.getMonth()+1;
      Así logré solucionarlo, saludos desde Chile

      Borrar

Publicar un comentario

Popular Posts

▷ Especificaciones del módulo ESP32

▷ #ESP32 - SINCRONIZAR RTC INTERNO CON SERVIDOR NTP

▷ #ESP32 - Over-The-Air programming #OTA

▷ #ESP32 - Display OLED 128x64

▷ Sensor networks for agriculture based on #FPGA

▷ Instrumentación con #Microcontroladores y #LabView

▷ Practica 3 #2PEM100A: Mostrar Datos via Internet

▷ Artificial Intelligence #AI based on #FPGA

▷ SISTEMAS EMBEBIDOS, PROYECTOS PROPUESTOS (2020 1er Término)