Obtener fecha y hora – Arduino IDE

ESP32 es una placa de Internet de las cosas (IoT) basada en microcontroladores que se puede conectar a una amplia gama de dispositivos. ESP32 se usa a menudo en proyectos basados ​​en IoT. Trabajar con ESP32 o cualquier otro tiempo de microcontrolador es muy importante porque el temporizador incorporado no es tan preciso, por lo que podemos usar un NTP Servidor para obtener tiempo real y almacenarlo en una variable que se puede usar más tarde en el código ESP32. Network Time Protocol (NTP) utiliza Coordinated Universal Time (UTC), que sincroniza el reloj del sistema con gran precisión y exactitud. En redes más pequeñas, NTP puede darnos relojes con una precisión de hasta 1 ms, mientras que redes más grandes como LAN (Red de área local) NTP puede darnos una precisión de decenas de milisegundos a través de Internet. Este reloj preciso permite que ESP32 ejecute instrucciones en un momento específico. Esta guía contiene el siguiente contenido:

  1. Introducción a NTP (Protocolo de tiempo de red)
  2. Servidor NTP y configuración de hora
  3. Impresión en tiempo real con la función printLocalTime()

Contenidos

1: Introducción a NTP (Protocolo de tiempo de red)

NTP es un acrónimo de nortela red Ttiempo PAGSRotocol es un estándar utilizado para sincronizar la hora del dispositivo con su zona horaria. El Protocolo de hora de la red sincroniza la hora de todos los dispositivos de la red con UTC, también conocida como Hora universal coordinada. UTC es como GMT (hora del meridiano de Greenwich), pero no cambia y permanece igual en todo el mundo. La idea principal detrás del uso de UTC es leer la hora en él. NTP servidor y al aplicar el desplazamiento UTC podemos obtener la hora local de acuerdo con nuestra zona horaria.

2: servidor NTP y configuración de hora

Para leer la hora del servidor NTP, debemos declarar las siguientes variables en el código. Con estas variables podemos obtener la hora del servidor NTP.

  • servidor NTP
  • Desplazamiento GMT
  • Compensación de luz diurna

2.1: servidor NTP

Solicitaremos hora de piscina.ntp.org que contiene datos de hora mundial en el servidor y todos pueden solicitar su hora local a través de este grupo. A continuación se muestran algunos otros servidores a los que podemos acceder:

Nombre de host del territorio

En todo el mundo piscina.ntp.org
Asia asia.pool.ntp.org
Europa europa.pool.ntp.org
América del norte america del norte.pool.ntp.org
Oceanía oceania.pool.ntp.org
Sudamerica sudamerica.pool.ntp.org

2.2: Desplazamiento GMT

El desplazamiento GMT describe la diferencia horaria en horas entre la zona horaria en la que vive y GMT. Por ejemplo, si usamos la zona horaria de EE. UU., podemos configurarlo para UTC = -11:00.

2.3: Compensación de luz diurna

Aquí, la compensación de la luz del día es el horario de verano, que normalmente se supone que es de 1 hora. El horario de verano significa que el reloj se adelanta 1 hora en verano y se vuelve a atrasar en invierno. Este comando generalmente se usa cuando se usa una zona horaria personalizada y se aplica una regla de horario de verano. Ahora que hemos cubierto los conceptos básicos del servidor NTP, veamos cómo podemos enviar una solicitud al servidor NTP y leer la hora local usando ESP32 con el código IDE de Arduino.

3: Impresión en tiempo real con la función printLocalTime()

Que imprimirHoraLocal() función llama a la obtenerHoraLocal() Función que envía la solicitud al servidor NTP y guarda en él la fecha y hora de recepción información de tiempo Variable.

3.1: Código para impresión en tiempo real

Pegue el código del servidor del cliente NTP proporcionado en el editor IDE de Arduino. Conecte ESP32 a la PC, seleccione el puerto COM y cargue el código. #incluir #include «time.h»const char* ssid = «REEMPLAZAR_CON_SU_SSID»;const char* contraseña = «REEMPLAZAR_CON_SU_CONTRASEÑA»;const char* ntpServer = «pool.ntp.org»;const long gmtOffset_sec = 18000 ; /*COMPENSACIÓN GMT +5 HORAS(18000 SEGUNDOS)*/const int luz del díaOffset_sec = 3600; /*1 hora de turno de día*/void printLocalTime(){ struct tm timeinfo; if (!getLocalTime(& timeinfo)) { Serial.println(«Error al obtener la hora»); Devolver; } Serial.println(&timeinfo, «%A, %B %d %Y %H:%M:%S»);}void setup(){Serial.begin(115200); //conectarse a WiFi Serial.printf(«Conectarse a %s», ssid); WiFi.begin(ssid, contraseña); while(WiFi.estado()!=WL_CONECTADO) { retraso(500); Serial.imprimir(«.»); } Serial.println(«CONECTADO»); //inicializar y obtener la hora configTime(gmtOffset_sec, hoursoffset_sec, ntpServer); imprimirHoraLocal(); // Desconecta WiFi porque ya no es necesario WiFi.disconnect(true); WiFi.mode(WIFI_OFF);}bucle vacío(){ retraso(1000); printLocalTime();} El código comenzó al incluir la biblioteca wifi y time. Acceso inalámbrico a Internet La biblioteca ayudará a conectar ESP32 a una red tiempo La biblioteca maneja la sincronización del servidor NTP. Después de eso, se definen el SSID y la contraseña de la red a la que se conectará el ESP32. Reemplace sus credenciales de red aquí. Después de eso definimos Desplazamiento GMT de 18000 segundos, que es (UTC + 5 horas). Aquí puede reemplazar su propia zona horaria UTC. Siga el enlace para obtener la compensación GMT para su zona horaria. Además, la dirección del servidor NTP se especifica con el siguiente comando: const char* ntpServer = «pool.ntp.org»; Este comando selecciona automáticamente el servidor de tiempo que lo buscará. Sin embargo, también podemos establecer una zona horaria usando los servidores NTP explicados en servidor NTP Sección. Al finalizar configuramos el ESP32 como cliente NTP y obtenemos la fecha y hora. Eso es lo que usamos para eso configTime() Función. Finalmente con el imprimirHoraLocal() La función imprime la fecha y hora actuales en el monitor serie. Esta función contiene una estructura de tiempo t.m. que almacena toda la información en el información de tiempo Variable. Los siguientes comandos representan el información de tiempo Estructura. Serial.println(&timeinfo, «%A, %B %d %Y %H:%M:%S»); Cada letra de la estructura temporal se refiere a una información específica:

información del especificador

%A día de regreso de una semana
%B mes de regreso
%d día de regreso del mes
%y Regresar año actual
%H Devuelve la hora actual
%METRO Devolver minutos actuales
%S Devolver segundos actuales

3.2: Salida

Después de cargar el código, ESP32 se conecta a una red WiFi y envía una solicitud al servidor NTP para obtener la fecha y hora actuales. El siguiente resultado se puede ver en el monitor serie Arduino. La hora actual en mi PC y ESP32 está sincronizada.

Leímos con éxito la hora del servidor NTP con ESP32 como cliente.

Conclusión

El tiempo es muy importante para aplicaciones como las marcas de tiempo y la ejecución de declaraciones en momentos específicos para producir una salida. Los temporizadores incorporados no son tan precisos, por lo que podemos usar un servidor NTP para leer la hora y la fecha actuales. Este tiempo se puede almacenar en una variable para usar en nuestro código. Esta lección ayudará a obtener la hora exacta de cualquier zona horaria del mundo usando ESP32.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.