¿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.
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:
- Haga clic aquí para descargar la biblioteca del cliente NTP. Deberías tener una carpeta .zip en tu Descargas
- Vaya a su IDE de Arduino Bosquejo > incluir biblioteca > Agregar biblioteca ZIP…
- Seleccione el archivo ZIP de la biblioteca que acaba de descargar.
- 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);
}
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.
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.
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:
- ¿Cuál es la librería recomendada para obtener la fecha y hora de un servidor NTP con el ESP32?
- ¿Cómo ajusto la hora para mi zona horaria usando el ESP32?
- ¿Qué debo hacer si el NTP Client devuelve 1970?
La librería recomendada es la librería NTP Client forked by Taranais. Puedes descargarla e instalarla siguiendo los pasos mencionados en el tutorial.
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.
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:
- Curso de Aprendizaje de ESP32 con Arduino IDE
- Registro de Datos de Temperatura ESP32 en Tarjeta MicroSD
- Publicar Lecturas de Sensores ESP32 en Google Sheets
- Construir un Shield de Estación Meteorológica Todo en Uno para ESP32
- Iniciar con Bluetooth de Baja Energía (BLE) en ESP32
- Enviar Lecturas de Sensores a Thingspeak con LoRa y ESP32
¡Wow! ¡Qué genial saber que se puede obtener la fecha y hora con ESP32 en Arduino IDE! ¡Gracias por compartir este conocimiento! ¡Voy a probarlo ahora mismo!
¡Excelente tutorial! ¡Gracias por la ayuda!
¡Muy interesante! Nunca me habría imaginado que se puede hacer eso con ESP32 en Arduino IDE. ¡Gracias por la información!
¡Increíble! Nunca pensé que el ESP32 podría ser tan versátil. ¡Gracias por el tutorial!
Interesante, nunca pensé que se pudiera obtener la fecha y hora con ESP32. ¡Gracias por compartir esta info!