ESP32 - Reloj de tiempo real

En esta guía, vamos a aprender a usar el ESP32 con el módulo de reloj en tiempo real DS3231. En detalle, cubriremos los siguientes temas:

Acerca del Módulo DS3231 Reloj en Tiempo Real

El ESP32 por sí solo tiene algunas funciones relacionadas con el tiempo, como millis() y micros(). Sin embargo, no puede proporcionar la fecha y la hora (segundos, minutos, horas, día, fecha, mes y año). Para obtener la fecha y la hora, necesitamos usar un módulo de Reloj en Tiempo Real (RTC) como DS3231, DS1370. El módulo DS3231 tiene una mayor precisión que DS1370. Ver DS3231 vs DS1307

Diagrama de pines

Módulo de reloj en tiempo real DS3231 incluye 10 pines:

  • Pin 32K: genera un reloj de referencia estable (compensado por temperatura) y preciso.
  • Pin SQW: genera una bonita onda cuadrada de 1 Hz, 4 kHz, 8 kHz o 32 kHz y puede ser manejada de forma programática. Esto puede usarse además como una interrupción debido a una condición de alarma en muchas aplicaciones basadas en el tiempo.
  • Pin SCL: es un pin de reloj para la interfaz I2C.
  • Pin SDA: es un pin de datos para la interfaz I2C.
  • Pin VCC: suministra energía para el módulo. Puede estar entre 3.3 V y 5.5 V.
  • Pin GND: es un pin de tierra.

Para uso normal, se necesitan 4 pines: VCC, GND, SDA, SCL.

Pinout del módulo DS3231 Reloj en Tiempo Real

El módulo DS3231 también tiene un soporte para batería.

  • Si insertamos una batería CR2032, mantiene el reloj del módulo funcionando cuando la alimentación principal está apagada.
  • Si no insertamos la batería, la información de la hora se pierde si la alimentación principal está apagada y tendrás que volver a ajustar la hora.

Diagrama de Cableado

Diagrama de cableado del ESP32 para reloj en tiempo real DS3231

This image is created using Fritzing. Click to enlarge image

Si no sabe c\u00f3mo alimentar ESP32 y otros componentes, encuentre instrucciones en el siguiente tutorial: C\u00f3mo alimentar ESP32.

ESP32 - Módulo RTC DS3231

DS1307 RTC Module ESP32
Vin 3.3V
GND GND
SDA GPIO21
SCL GPIO22

Cómo programar para el módulo DS3231 RTC

  • Incluir la biblioteca:
#include <RTClib.h>
  • Declara un objeto RTC:
RTC_DS3231 rtc;
  • Inicializar RTC:
if (! rtc.begin()) { Serial.println("RTC module is NOT found"); while (1); }
  • Por primera vez, configure el RTC a la fecha y hora en que se compiló el sketch
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  • Lee la información de fecha y hora del módulo RTC
DateTime now = rtc.now(); Serial.print("ESP32 RTC Date Time: "); Serial.print(now.year(), DEC); Serial.print('/'); Serial.print(now.month(), DEC); Serial.print('/'); Serial.print(now.day(), DEC); Serial.print(" ("); Serial.print(now.dayOfTheWeek()); Serial.print(") "); Serial.print(now.hour(), DEC); Serial.print(':'); Serial.print(now.minute(), DEC); Serial.print(':'); Serial.println(now.second(), DEC);

Código ESP32 – Cómo obtener la fecha y la hora

/* * Este código de ESP32 fue desarrollado por es.newbiely.com * Este código de ESP32 se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/esp32/esp32-rtc */ #include <RTClib.h> RTC_DS3231 rtc; char daysOfWeek[7][12] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" }; void setup () { Serial.begin(9600); // SETUP RTC MODULE if (! rtc.begin()) { Serial.println("RTC module is NOT found"); Serial.flush(); while (1); } // automatically sets the RTC to the date & time on PC this sketch was compiled rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // manually sets the RTC with an explicit date & time, for example to set // January 21, 2021 at 3am you would call: // rtc.adjust(DateTime(2021, 1, 21, 3, 0, 0)); } void loop () { DateTime now = rtc.now(); Serial.print("ESP32 RTC Date Time: "); Serial.print(now.year(), DEC); Serial.print('/'); Serial.print(now.month(), DEC); Serial.print('/'); Serial.print(now.day(), DEC); Serial.print(" ("); Serial.print(daysOfWeek[now.dayOfTheWeek()]); Serial.print(") "); Serial.print(now.hour(), DEC); Serial.print(':'); Serial.print(now.minute(), DEC); Serial.print(':'); Serial.println(now.second(), DEC); delay(1000); // delay 1 seconds }

Pasos R\u00e1pidos

  • Si es la primera vez que usas ESP32, consulta cómo configurar el entorno para ESP32 en Arduino IDE.
  • Realiza el cableado tal como se muestra en la imagen de arriba.
  • Conecta la placa ESP32 a tu PC mediante un cable micro USB.
  • Abre Arduino IDE en tu PC.
  • Selecciona la placa ESP32 correcta (p. ej. ESP32 Dev Module) y el puerto COM.
  • Abre el Gestor de Bibliotecas haciendo clic en el icono Library Manager en la barra de navegación izquierda de Arduino IDE
  • Busca “RTClib”, luego encuentra la biblioteca RTC de Adafruit
  • Haz clic en el botón Install para instalar la biblioteca RTC.
Biblioteca RTC para ESP32
  • Puede que se le pida instalar las dependencias de la biblioteca.
  • Instale todas las dependencias de la biblioteca haciendo clic en el botón Instalar todo.
Biblioteca BusIO de Adafruit para ESP32
  • Copia el código anterior y pégalo en el IDE de Arduino
  • Compila y carga el código a la placa ESP32 haciendo clic en el botón Subir en el IDE de Arduino
  • Abre el Monitor Serial en el IDE de Arduino
  • Ver la salida en el Monitor Serial
COM6
Send
ESP32 RTC Date Time: 2022/08/26 (Friday) 15:21:35 ESP32 RTC Date Time: 2022/08/26 (Friday) 15:21:36 ESP32 RTC Date Time: 2022/08/26 (Friday) 15:21:37 ESP32 RTC Date Time: 2022/08/26 (Friday) 15:21:38 ESP32 RTC Date Time: 2022/08/26 (Friday) 15:21:39 ESP32 RTC Date Time: 2022/08/26 (Friday) 15:21:40 ESP32 RTC Date Time: 2022/08/26 (Friday) 15:21:41 ESP32 RTC Date Time: 2022/08/26 (Friday) 15:21:42 ESP32 RTC Date Time: 2022/08/26 (Friday) 15:21:43 ESP32 RTC Date Time: 2022/08/26 (Friday) 15:21:44
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Video Tutorial

Estamos considerando crear tutoriales en video. Si considera que los tutoriales en video son importantes, suscríbase a nuestro canal de YouTube para motivarnos a crear los videos.

※ NUESTROS MENSAJES

  • No dude en compartir el enlace de este tutorial. Sin embargo, por favor no use nuestro contenido en otros sitios web. Hemos invertido mucho esfuerzo y tiempo en crear el contenido, ¡por favor respete nuestro trabajo!