Sincronizar la hora en ESP8266 con Servidor NTP

Vamos a ver como podemos sincronizar nuestro ESP8266 o nodeMCU, con un servidor NTP para poder tener siempre la hora y/o fecha actualizada en nuestro programa. 

NTP Server: Network Time Protocol es un protocolo de Internet para sincronizar los relojes de los sistemas informáticos a través del enrutamiento de paquetes en redes con latencia variable. NTP utiliza UDP como su capa de transporte, usando el puerto 123

Cuando creamos proyectos en arduino que  necesitan tener un control del tiempo exacto y estar siempre en hora, por ejemplo cuando hacemos un reloj con alarma o cuando hacemos un sistema que activa una luz a determinada hora del día etc. Es necesario en la mayoría de los casos el uso de un Reloj  en tiempo Real RTC.

En este caso ya que estamos utilizando nodeMCU y que podemos hacer uso de la conexión a Internet por medio de WIFI, vamos a mantener la hora sincronizada en nuestro programa gracias a los servidores NTP.

Para poder hacer la sincronizacion en este tutorial vamos a utilizar una librería NTPClient.h la cual debemos instalar desde el gestor de librerías de arduino. 

Una vez instalada la librería, podemos comprobar su funcionamiento por medio del ejemplo siguiente: 

#include <NTPClient.h> //importamos la librería del cliente NTP
#include <ESP8266WiFi.h> //librería necesaria para la conexión wifi
#include <WiFiUdp.h> // importamos librería UDP para comunicar con 
                     // NTP

// datos para conectarnos a nuestra red wifi
const char *ssid     = "AquiVaelNombredeturedwifi";
const char *password = "aquivatupasswordwifi";

//iniciamos el cliente udp para su uso con el server NTP
WiFiUDP ntpUDP;

// cuando creamos el cliente NTP podemos especificar el servidor al // que nos vamos a conectar en este caso
// 0.south-america.pool.ntp.org SudAmerica
// también podemos especificar el offset en segundos para que nos 
// muestre la hora según nuestra zona horaria en este caso
// restamos -10800 segundos ya que estoy en argentina. 
// y por ultimo especificamos el intervalo de actualización en
// mili segundos en este caso 6000

NTPClient timeClient(ntpUDP, "0.south-america.pool.ntp.org",-10800,6000);

void setup(){
  Serial.begin(115200); // activamos la conexión serial

  WiFi.begin(ssid, password); // nos conectamos al wifi

// Esperamos hasta que se establezca la conexión wifi
 while ( WiFi.status() != WL_CONNECTED ) {
    delay ( 500 );
    Serial.print ( "." );
  }

  timeClient.begin(); 
}

void loop() {
  timeClient.update(); //sincronizamos con el server NTP

  Serial.println(timeClient.getFormattedTime());
//Imprimimos por puerto serie la hora actual

  delay(1000);
}

Como podemos ver el código es bastante sencillo gracias al uso de esta librería, podemos ver que es necesario el uso de un cliente udp para comunicarnos con el servidor ya que este es el protocolo que utiliza. 

También hay que comentar que se deberá establecer un offset en segundos para mostrar la hora de acuerdo a la zona horaria en la que nos encontremos. Como estoy en argentina debemos restar 10800 segundos. 

ahora podemos cargar el sketch en nuestro nodeMCU y abrimos el monitor serie para poder ver el resultado. 

Como podemos ver nodeMcu primero se conecta al wifi y luego accede al servidor NTP por medio de Internet y actualiza la hora. Ahora solo nos queda crear el programa que necesitemos aplicar y listo. 

Espero que les sea de utilidad, no olviden compartir en sus redes sociales, hasta la próxima. 

Albertobauer

Alberto Bauer

soy putarraco y me la comursi

También te podría gustar...

2 Respuestas

  1. Me gusto mucho tu web Muchas gracias, Un saludo

  2. Yanela dice:

    Super interesante el post!!!

Responder a Yanela Cancelar la respuesta

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

es Español
X