Obtenga fecha y hora con ESP32 en Arduino IDE (cliente NTP)

¿Alguna vez has querido que tu proyecto basado en ESP32 tenga la capacidad de obtener la fecha y hora de forma automática? ¡Pues estás de suerte! En este artículo te enseñaremos cómo utilizar el cliente NTP en Arduino IDE para que tu ESP32 obtenga la fecha y hora actualizada. ¡Sigue leyendo para descubrir todos los detalles!

En este tutorial le mostraremos cómo obtener la fecha y la hora usando ESP32 y Arduino IDE. Recuperar la fecha y la hora es particularmente útil en el registro de datos para marcar la hora de sus métricas. Si su proyecto ESP32 tiene acceso a Internet, puede obtener la fecha y la hora utilizando el Protocolo de hora de red (NTP); no necesita ningún hardware adicional.

Obtenga fecha y hora con ESP32 en Arduino IDE (cliente NTP)

Nota: Existe una guía más sencilla y actualizada para obtener fecha y hora usando el ESP32 con la biblioteca time.h preinstalada: ESP32 NTP Cliente-Servidor: Obtener fecha y hora (Arduino IDE).

Antes de continuar con este tutorial, debes tener el complemento ESP32 instalado en tu IDE de Arduino. Siga uno de los siguientes tutoriales para instalar ESP32 en el IDE de Arduino si aún no lo ha hecho.

  • Instalación de la placa ESP32 en Arduino IDE 2 (Windows, Mac OS X, Linux)
  • Instalación de la placa ESP8266 NodeMCU en Arduino IDE 2 (Windows, Mac OS X, Linux)

Biblioteca de cliente NTP

IMPORTANTE: No utilizamos la biblioteca NTPClient estándar. Para seguir este tutorial necesitas instalar la biblioteca. Recomendamos los siguientes pasos.

La forma más sencilla de obtener la fecha y la hora de un servidor NTP es utilizar una biblioteca de cliente NTP. Eso es lo que usamos Biblioteca cliente NTP bifurcada por TaranaisSiga los siguientes pasos para instalar esta biblioteca en su IDE de Arduino:

  1. Haga clic aquí para descargar la biblioteca del cliente NTP. Deberías tener una carpeta .zip en tu Descargas
  2. Vaya a su IDE de Arduino Bosquejo > incluir biblioteca > Agregar biblioteca ZIP
  3. Seleccione el archivo ZIP de la biblioteca que acaba de descargar.
  4. La biblioteca se instalará después de unos segundos.

Recuperar fecha y hora del servidor NTP

Aquí proporcionamos un código de muestra para recuperar la fecha y la hora del servidor NTP. Este ejemplo fue modificado a partir de uno de los ejemplos de la biblioteca.

/*********
  Rui Santos
  Complete project details at https://randomnerdtutorials.com
  Based on the NTP Client library example
*********/

#include <WiFi.h>
#include <NTPClient.h>
#include <WiFiUdp.h>

// Replace with your network credentials
const char* ssid     = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

// Define NTP Client to get time
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP);

// Variables to save date and time
String formattedDate;
String dayStamp;
String timeStamp;

void setup() {
  // Initialize Serial Monitor
  Serial.begin(115200);
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  // Print local IP address and start web server
  Serial.println("");
  Serial.println("WiFi connected.");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());

// Initialize a NTPClient to get time
  timeClient.begin();
  // Set offset time in seconds to adjust for your timezone, for example:
  // GMT +1 = 3600
  // GMT +8 = 28800
  // GMT -1 = -3600
  // GMT 0 = 0
  timeClient.setTimeOffset(3600);
}
void loop() {
  while(!timeClient.update()) {
    timeClient.forceUpdate();
  }
  // The formattedDate comes with the following format:
  // 2018-05-28T16:00:13Z
  // We need to extract date and time
  formattedDate = timeClient.getFormattedDate();
  Serial.println(formattedDate);

  // Extract date
  int splitT = formattedDate.indexOf("T");
  dayStamp = formattedDate.substring(0, splitT);
  Serial.print("DATE: ");
  Serial.println(dayStamp);
  // Extract time
  timeStamp = formattedDate.substring(splitT+1, formattedDate.length()-1);
  Serial.print("HOUR: ");
  Serial.println(timeStamp);
  delay(1000);
}

Ver código sin formato

Para obtener más ejemplos de NTP, consulte el IDE de Arduino. archivo > Ejemplos > cliente NTP.

Cómo funciona el código

Echemos un vistazo rápido al código para ver cómo funciona. Primero incluyes las librerías para conectarte al WiFi, obtener la hora y crear un cliente NTP.

#include <WiFi.h>
#include <NTPClient.h>
#include <WiFiUdp.h>

Establecer SSID y contraseña

En las siguientes variables, ingrese sus credenciales de red para que el ESP32 pueda conectarse a Internet y recuperar la fecha y hora del servidor NTP.

// Replace with your network credentials
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

Preparar cliente NTP

Las dos líneas siguientes definen un cliente NTP para solicitar la fecha y hora de un servidor NTP.

WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP);

Luego inicializa Cadena Variables para almacenar fecha y hora.

String formattedDate;
String dayStamp;
String timeStamp;

En el configuración() Inicializa la comunicación serie con la velocidad en baudios 115200 para imprimir los resultados:

Serial.begin(115200);

Las siguientes líneas conectan el ESP32 a su enrutador.

// Initialize Serial Monitor
Serial.begin(115200);
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
  delay(500);
  Serial.print(".");
}
// Print local IP address and start web server
Serial.println("");
Serial.println("WiFi connected.");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());

A continuación, inicialice el cliente NTP para recuperar la fecha y la hora de un servidor NTP.

timeClient.begin();

Puedes utilizar el… establecerTimeOffset() Método para ajustar la hora de tu zona horaria en segundos.

timeClient.setTimeOffset(3600);

Aquí hay algunos ejemplos para diferentes zonas horarias:

  • GMT +1 = 3600
  • GMT +8 = 28800
  • GMT -1 = -3600
  • GMT 0 = 0

Las siguientes líneas garantizan que obtengamos una fecha y hora válidas:

while(!timeClient.update()) {
  timeClient.forceUpdate();
}

Nota: a veces el cliente NTP obtiene 1970. Para asegurarnos de que esto no suceda, debemos forzar la actualización.

Obtener fecha y hora

Luego convierta la fecha y la hora a un formato legible usando el obtener fecha formateada() Método:

formattedDate = timeClient.getFormattedDate();

La fecha y la hora se devuelven en el siguiente formato:

2018-04-30T16:00:13Z

Si desea obtener la fecha y la hora por separado, debe dividir la cadena. La letra «T» separa la fecha de la hora, por lo que podemos dividir la cadena fácilmente. Eso es exactamente lo que haremos en las próximas líneas.

// Extract date
int splitT = formattedDate.indexOf("T");
dayStamp = formattedDate.substring(0, splitT);
Serial.println(dayStamp);
// Extract time
timeStamp = formattedDate.substring(splitT+1, formattedDate.length()-1);
Serial.println(timeStamp);

La fecha se guarda en el Sello del día variable y el tiempo en el marca de tiempo Variable. La hora se consulta e imprime cada segundo.

Probando el código

Sube el código al ESP32. Asegúrese de haber seleccionado la placa y el puerto COM correctos. Después de cargar el código, presione el botón «Activar» ESP32. Luego debería recibir la fecha y la hora cada segundo, como se muestra en la imagen a continuación.

Obtenga fecha y hora con ESP32 en Arduino IDE (cliente NTP)

Envolver

En este tutorial, le mostramos cómo obtener fácilmente la fecha y la hora usando ESP32 en Arduino IDE usando un servidor NTP. El código proporcionado no es útil por sí solo. La idea es utilizar el ejemplo proporcionado en esta guía en sus propios proyectos para marcar la hora de los valores de sus sensores.

Este método sólo funciona cuando el ESP32 está conectado a Internet. Si su proyecto no tiene acceso a Internet, deberá utilizar otro método. puedes tener uno Módulo RTC como el DS1307.

Tenemos más tutoriales sobre ESP32 que también te pueden gustar:

  • Curso Aprende ESP32 con Arduino IDE
  • Temperatura de registro de datos ESP32 a la tarjeta MicroSD
  • ESP32 publica valores de sensores en Google Sheets
  • Construya un escudo de estación meteorológica ESP32 todo en uno
  • Primeros pasos con ESP32 Bluetooth de baja energía (BLE)
  • ESP32 con LoRa usando Arduino IDE

Gracias por leer.

Error 403 The request cannot be completed because you have exceeded your quota. : quotaExceeded

Obtenga fecha y hora con ESP32 en Arduino IDE (cliente NTP)

En este tutorial te mostraremos cómo obtener la fecha y hora utilizando el ESP32 y Arduino IDE. Obtener la fecha y hora es especialmente útil en el registro de datos para marcar la hora de tus lecturas. Si tu proyecto ESP32 tiene acceso a Internet, puedes obtener la fecha y hora utilizando el Protocolo de Tiempo de Red (NTP) – no necesitas hardware adicional.

Nota: hay una guía más fácil y actualizada para obtener la fecha y hora con el ESP32 con la librería time.h preinstalada: ESP32 Cliente-Servidor de NTP: Obtener Fecha y Hora (Arduino IDE).

Preguntas Frecuentes:

  1. ¿Cuál es la librería recomendada para obtener la fecha y hora de un servidor NTP con el ESP32?
  2. La librería recomendada es la librería NTP Client forked by Taranais. Puedes descargarla e instalarla siguiendo los pasos mencionados en el tutorial.

  3. ¿Cómo ajusto la hora para mi zona horaria usando el ESP32?
  4. Puedes ajustar la hora para tu zona horaria en segundos utilizando el método setTimeOffset(). Por ejemplo, GMT +1 se ajusta con 3600 segundos y así sucesivamente para otras zonas horarias.

  5. ¿Qué debo hacer si el NTP Client devuelve 1970?
  6. En caso de que el NTP Client devuelva 1970, es necesario forzar la actualización con el método forceUpdate(). Esto asegurará que obtengas la fecha y hora correctas.

Bibliografía:

Para más información detallada y otros ejemplos de uso del NTP Client con ESP32, visita la sección de ejemplos en la Arduino IDE: Arduino IDE NTPClient.

Si deseas explorar más tutoriales relacionados con el ESP32, te recomendamos los siguientes enlaces:

5 comentarios en «Obtenga fecha y hora con ESP32 en Arduino IDE (cliente NTP)»

Deja un comentario