Utilizar módulo RTC con ESP32

📌Pontevedra  🇪🇸 España |

Introducción

Los módulos RTC (Real Time Clock) son muy útiles para mantener la hora precisa en proyectos que no tienen acceso a internet o que necesitan una comprobación adicional. Aquí se explica cómo usar el módulo RTC DS3231 con el ESP32.

¿Por qué usar un RTC?

Los módulos RTC son importantes para registrar eventos con marcas de tiempo exactas, como en sistemas de registro de datos y automatización del hogar. Además, son útiles en sistemas que necesitan mantener la hora correcta durante cortes de energía gracias a su batería de respaldo.

Componentes necesarios

  • ESP32
  • Módulo RTC DS3231
  • Cables de conexión
  • Protoboard (opcional)
  • Batería de respaldo para el DS3231 (generalmente una pila de litio CR2032)

Conexión del DS3231 al ESP32

Conectar los siguientes pines:

  • VCC del DS3231 a 3.3V del ESP32
  • GND del DS3231 a GND del ESP32
  • SDA del DS3231 a GPIO 21 del ESP32
  • SCL del DS3231 a GPIO 22 del ESP32

Instalación de librerías

Instalar las librerías Wire y RTClib

Configuración y lectura de la fecha y hora

El siguiente programa configura y lee la fecha y hora del DS3231 usando el ESP32:


// Importar las librerías necesarias
#include 
#include 

// Crear una instancia del objeto RTC_DS3231
RTC_DS3231 rtc;

void setup() {
  // Iniciar la comunicación serial
  Serial.begin(115200);
  
  // Iniciar la comunicación I2C
  Wire.begin();
  
  // Comprobar si el RTC está conectado correctamente
  if (!rtc.begin()) {
    Serial.println("No se encontró el RTC.");
    while (1);
  }
  
  // Configurar el RTC con la fecha y hora actual
  if (!rtc.isrunning()) {
    Serial.println("El RTC no está corriendo, se establece la fecha y hora.");
    // Ajustar la fecha y hora (año, mes, día, hora, minuto, segundo)
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  }
}

void loop() {
  // Obtener la fecha y hora actual
  DateTime now = rtc.now();
  
  // Mostrar la fecha y hora en el serial
  Serial.print(now.year(), DEC);
  Serial.print('/');
  Serial.print(now.month(), DEC);
  Serial.print('/');
  Serial.print(now.day(), DEC);
  Serial.print(" ");
  Serial.print(now.hour(), DEC);
  Serial.print(':');
  Serial.print(now.minute(), DEC);
  Serial.print(':');
  Serial.print(now.second(), DEC);
  Serial.println();
  
  // Esperar un segundo antes de la próxima lectura
  delay(1000);
}

Explicación del código

Este programa inicia la comunicación con el módulo RTC DS3231 y configura la fecha y hora actuales si el RTC no está funcionando. Luego, en el bucle principal (loop()), lee la fecha y hora del RTC cada segundo y las muestra en el monitor serial.

Comunicación serial e I2C

En setup(), iniciar la comunicación serial a 115200 baudios y la comunicación I2C con Wire.begin(). Comprobar si el RTC está conectado correctamente utilizando rtc.begin(). Si no se encuentra el RTC, mostrar un mensaje de error y detener el programa.

Configurar el RTC

Si el RTC no está funcionando, establecer la fecha y hora actuales usando rtc.adjust() con la fecha y hora de compilación del programa.

Leer y mostrar la fecha y hora

En loop(), obtener la fecha y hora actuales con rtc.now(). Formatear y mostrar esta información en el monitor serial. Esperar un segundo antes de la próxima lectura utilizando delay(1000).

Conclusión

Usar un módulo RTC como el DS3231 con el ESP32 es útil para mantener la hora exacta en proyectos que no tienen acceso a internet o necesitan una comprobación adicional de la hora. Integrarlos es fácil y proporciona una funcionalidad valiosa para proyectos de registro de datos, automatización y más.


Publicado

en

,

Etiquetas:

Comentarios

2 respuestas a «Utilizar módulo RTC con ESP32»

  1. Avatar de Dario
    Dario

    necesito conectar dos dispositivos i2c en el mismo cable. Son un DS3231 y un lector de nfc pn532

    1. Avatar de ger

      Para conectar dos dispositivos I2C en el mismo cable, necesitarás utilizar un multiplexor I2C. Un multiplexor I2C te permitirá controlar la comunicación entre los dos dispositivos conectados al mismo bus I2C.

      Aquí te dejo los pasos generales para conectar los dispositivos DS3231 y PN532 utilizando un multiplexor I2C:

      Conecta los pines de alimentación (VCC y GND) de ambos dispositivos a una fuente de alimentación adecuada.
      Conecta los pines SDA (datos) y SCL (reloj) del DS3231 y PN532 al multiplexor I2C. Asegúrate de seguir las pautas de conexión del multiplexor I2C que estés utilizando.
      Configura el multiplexor I2C para que establezca la comunicación con el dispositivo DS3231 o PN532 según sea necesario. Puedes hacer esto enviando comandos de control al multiplexor a través del bus I2C.
      Una vez que hayas configurado el multiplexor, puedes comunicarte con los dispositivos DS3231 y PN532 de forma individual utilizando las direcciones I2C correspondientes a cada dispositivo.

      Recuerda que los detalles específicos de conexión pueden variar según el multiplexor I2C que estés utilizando y las especificaciones de los dispositivos DS3231 y PN532. Asegúrate de consultar las hojas de datos de los dispositivos y el multiplexor para obtener información más detallada sobre las conexiones y configuraciones requeridas.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

¿Quieres avanzar con tu proyecto?