ESPTOP 10 NTP Cliente -servidor obtenga fecha y hora - Arduino IDE

ESPTOP 10 NTP Cliente -servidor obtenga fecha y hora - Arduino IDE
ESP32 es un tablero de Internet de las cosas basado en microcontroladores (IoT) que puede interactuar con una amplia gama de dispositivos. ESP32 se usa ampliamente en proyectos basados ​​en IoT.

Trabajar con ESP32 o cualquier otro tiempo de microcontrolador es muy importante ya que el temporizador incorporado no es tan preciso para que podamos usar un NTP servidor para obtener tiempo real y puede almacenarlo dentro de una variable que se puede usar más tarde dentro del código ESP32.

El Protocolo de tiempo de red (NTP) utiliza el tiempo universal coordinado (UTC) que sincroniza el reloj del sistema con gran precisión y precisión. En redes más pequeñas, NTP puede proporcionarnos relojes tan precisos como 1 ms, mientras que las redes más grandes como LAN (red de área local) NTP pueden dar precisión con decenas de milisegundos a través de Internet. El uso de este reloj preciso ESP32 puede ejecutar instrucciones en un momento específico.

Esta guía contiene los siguientes contenidos:

  • 1: Introducción al NTP (protocolo de tiempo de red)
  • 2: Servidor NTP y configuración de tiempo
    • 2.1: servidor NTP:
    • 2.2: compensación de GMT:
    • 2.3: desplazamiento de la luz del día
  • 3: Impresión en tiempo real utilizando la función printLocalTime ()
    • 3.1: código para imprimir en tiempo real
    • 3.2: salida

1: Introducción al NTP (protocolo de tiempo de red)

NTP es un acrónimo de norteestuir Tyo me PAGEl rotocol es un estándar utilizado para sincronizar el tiempo de dispositivos con su zona horaria. El protocolo de tiempo de red sincroniza la hora de todos los dispositivos de red con el UTC también conocido como tiempo universal coordinado.

UTC es similar a GMT (tiempo medio de Greenwich) pero no cambia y sigue siendo el mismo en todo el mundo. La idea principal detrás de usar el UTC es leer la hora del NTP servidor y mediante la aplicación de la compensación de UTC podemos obtener la hora local de acuerdo con nuestra zona horaria.

2: Servidor NTP y configuración de tiempo

Para leer el tiempo del servidor NTP, necesitamos declarar las siguientes variables dentro del código utilizando estas variables, podemos obtener el tiempo del servidor NTP.

  • Servidor NTP
  • Compensación de GMT
  • Compensación de luz diurna

1: servidor NTP

Solicitaremos el tiempo de piscina.NTP.organizar que contiene datos de tiempo en todo el mundo en el servidor y cualquiera puede solicitar su hora local utilizando este grupo. Los siguientes son otros servidores a los que podemos acceder:

Área Nombre de host
Mundial piscina.NTP.organizar
Asia Asia.piscina.NTP.organizar
Europa Europa.piscina.NTP.organizar
América del norte América del norte.piscina.NTP.organizar
Oceanía Oceanía.piscina.NTP.organizar
Sudamerica Sudamerica.piscina.NTP.organizar

2: compensación de GMT

El compensación de GMT describe la diferencia horaria en las horas entre la zona horaria que vive para el GMT. Por ejemplo, si usamos la zona horaria de los EE. UU., Podemos configurarla en UTC = -11: 00.

3: desplazamiento de la luz del día

Aquí el desplazamiento de la luz del día es la hora de ahorro de luz del día que generalmente se toma como 1 hora. El tiempo de ahorro de la luz del día significa mover el reloj 1 hora hacia adelante durante el verano y cambiarlos nuevamente en invierno. Este comando se usa generalmente donde se usa una zona horaria personalizada y se aplica una regla de ahorro de luz.

Como hemos cubierto los conceptos básicos del servidor NTP ahora, verificaremos cómo podemos enviar una solicitud al servidor NTP y leer la hora local usando ESP32 con el código Arduino IDE.

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

El printLocaltime () la función llamará al getLocaltime () función que envía la solicitud al servidor NTP y almacena la fecha y hora recibidas dentro del TimeInfo variable.

1: código para imprimir en tiempo real

Pegue el código dado para el servidor de clientes NTP en el editor IDE Arduino. Conecte ESP32 con PC, seleccione el puerto COM y el código de carga.

#incluir
#Include "Tiempo.H "
const char* ssid = "red ssid";
const char* contraseña = "contraseña de red";
const char* ntpserver = "grupo.NTP.org ";
const gmtoffset_sec = 18000; /*Desplazamiento GMT +5 horas (18000 segundos)*/
const int DaylightOffSet_Sec = 3600; /*1 hora de desplazamiento a la luz del día*/
void printLocaltime ()
struct tm timeInfo;
si(!getLocaltime (& timeInfo))
De serie.println ("no pudo obtener tiempo");
devolver;

De serie.println (y TimeInfo, " %A, %B %D %Y %H: %M: %S");

setup () void
De serie.comenzar (115200);
// conectarse a wifi
De serie.printf ("Conexión a %s", SSID);
Wifi.begin (SSID, contraseña);
Mientras (wifi.estado() != Wl_connected)
retraso (500);
De serie.imprimir(".");

De serie.println ("conectado");
// init y obtener el tiempo
configTime (gmtoffset_sec, daylightoffset_sec, ntpserver);
printLocaltime ();
// Desconecte wifi como ya no es necesario
Wifi.desconectar (verdadero);
Wifi.modo (wifi_off);

bucle void ()
retraso (1000);
printLocaltime ();

Código iniciado al incluir el wifi y la biblioteca de tiempo. Wifi La biblioteca ayudará a conectar ESP32 con una red mientras tiempo La biblioteca manejará la sincronización del servidor NTP.

Después de ese SSID y la contraseña de la red a la que se conectará ESP32. Reemplace su credencial de red aquí. Después de eso hemos definido Compensación de GMT Como 18000 segundos, que es (UTC+5 horas). Puede reemplazar su propia zona horaria UTC aquí. Siga el enlace para obtener la compensación de GMT para su zona horaria.

Además, la dirección del servidor NTP se especifica utilizando el comando:

const char* ntpserver = "grupo.NTP.org ";

Este comando selecciona automáticamente el servidor de tiempo que le buscará. Sin embargo, también podemos establecer una zona horaria utilizando los servidores NTP explicados en el Servidor NTP sección.

Al final, configuramos el ESP32 como cliente NTP y para obtener fecha y hora. Por eso usamos el configTime () función.

Por último, usando el printLocaltime () función, la fecha y hora actuales se imprimen en el monitor en serie. Esta función contiene una estructura de tiempo TM que almacena toda la información en el TimeInfo variable.

Los siguientes comandos representan el TimeInfo estructura.

De serie.println (y TimeInfo, " %A, %B %D %Y %H: %M: %S");

Cada estructura de letra de tiempo se relaciona con una información específica:

Especificadores Información
%A Día de regreso de una semana
%B Mes de regreso
%d Día de regreso del mes
%Y Regreso año actual
%H RETURN HORA ACTUAL
%METRO Regresar actuales minutos actuales
%S Devolver los segundos actuales

2: salida

Después de cargar, el código ESP32 se conectará con una red WiFi y enviará una solicitud al servidor NTP para recibir la fecha y hora actuales. La siguiente salida se puede ver en el monitor de serie Arduino.

La hora actual en mi PC y ESP32 coincide.

Hemos leído con éxito el tiempo del servidor NTP utilizando ESP32 como cliente.

Conclusión

El tiempo es muy importante para aplicaciones como el tiempo de marca y ejecución de instrucciones en momentos específicos para generar 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 dentro de una variable para usar dentro de nuestro código. Esta lección ayuda a obtener un tiempo preciso de cualquier zona horaria en todo el mundo usando ESP32.