Tabla de contenido:

Reloj de Internet: muestra la fecha y la hora con un OLED usando ESP8266 NodeMCU con protocolo NTP: 6 pasos
Reloj de Internet: muestra la fecha y la hora con un OLED usando ESP8266 NodeMCU con protocolo NTP: 6 pasos

Video: Reloj de Internet: muestra la fecha y la hora con un OLED usando ESP8266 NodeMCU con protocolo NTP: 6 pasos

Video: Reloj de Internet: muestra la fecha y la hora con un OLED usando ESP8266 NodeMCU con protocolo NTP: 6 pasos
Video: RTC (Reloj de Tiempo Real) en ESP32 sincronizado por Internet, pantalla OLED, código en MicroPython 2024, Noviembre
Anonim
Reloj de Internet: muestra la fecha y la hora con un OLED usando ESP8266 NodeMCU con protocolo NTP
Reloj de Internet: muestra la fecha y la hora con un OLED usando ESP8266 NodeMCU con protocolo NTP

Hola chicos, en este instructables, construiremos un reloj de Internet que obtendrá tiempo de Internet, por lo que este proyecto no necesitará ningún RTC para ejecutarse, solo necesitará una conexión a Internet que funcione.

Y para este proyecto, necesita un esp8266 que tendrá wifi para obtener acceso a Internet y una pantalla para mostrar la hora y esp8266 obtendrá el tiempo de Internet mediante el protocolo NTP, ntp significa protocolo de tiempo de red, así que básicamente hay servidores ntp en la web que se utilizan para sincronizar los relojes de las computadoras y usaremos esos servidores para obtener tiempo en nuestro proyecto.

Paso 1: Cosas que necesita

Cosas que necesitas
Cosas que necesitas
Cosas que necesitas
Cosas que necesitas
Cosas que necesitas
Cosas que necesitas

para este proyecto necesitará lo siguiente:

Esp8266 / nodemcu

Oled ssd1306 0.96"

Cables de puente

Tablero de circuitos

Cable USB

Paso 2: conexiones

Conexiones
Conexiones

Esta pantalla OLED de 4 pines se comunica con el módulo ESP8266 mediante el protocolo I2C, a continuación se muestra el diagrama de circuito y la tabla de conexiones para conectar los pines OLED I2C con NodeMCU para mostrar la hora de Internet.

Paso 3: descargar bibliotecas

Descargar Bibliotecas
Descargar Bibliotecas
Descargar Bibliotecas
Descargar Bibliotecas

Asegúrese de haber descargado las bibliotecas SD1306 en su Arduino ide como se muestra en la imagen y asegúrese de que su biblioteca Adafruit GFX también, si no, instale estas dos bibliotecas.

En su IDE de Arduino, vaya al administrador de Bibliotecas y busque NTP y simplemente descargue la biblioteca del cliente NTP como la descargué, consulte la imagen para obtener más ayuda.

Paso 4: ¿Qué es NTP?

¿Qué es NTP?
¿Qué es NTP?

NTP es uno de los protocolos de Internet (IP) de red más antiguos para sincronizar relojes entre redes de computadoras. Fue diseñado por David L. Mills de la Universidad de Delaware en 1981. Este protocolo se puede utilizar para sincronizar muchas redes con la Hora Universal Coordinada (UTC) en unos pocos milisegundos. UTC es el estándar de tiempo principal por el cual el mundo regula el reloj y la hora. UTC no cambia y varía para diferentes ubicaciones geográficas. NTP utiliza UTC como referencia de tiempo y proporciona una hora precisa y sincronizada a través de Internet.

NTP funciona en un modelo cliente-servidor jerárquico. El modelo superior tiene relojes de referencia conocidos como "stratum0" como relojes atómicos, ondas de radio, GPS, GSM que recibe la hora del satélite. Los servidores que reciben la hora de stratum0 se denominan "stratum1" y los servidores que reciben la hora de stratum1 se denominan "stratum2" y así sucesivamente. Esto continúa y la precisión del tiempo continúa disminuyendo después de cada etapa. NTP selecciona automáticamente lo mejor de varias fuentes de tiempo disponibles para sincronizar, lo que lo convierte en un protocolo capaz de tolerancia a fallas. Entonces, aquí en este proyecto, estamos obteniendo tiempo del servidor NTP usando ESP8266 NodeMCU y mostrándolo en la pantalla OLED. Este mismo tipo de reloj de Internet se crea utilizando ESP32 en el tutorial anterior.

Paso 5: Parte de codificación

Parte de codificación
Parte de codificación

Para solicitar la fecha y la hora, inicialice el cliente de hora con la dirección de los servidores NTP. Para mayor precisión, elija la dirección de los servidores NTP que están cerca de su área geográfica. Aquí usamos "pool.ntp.org" que proporciona servidores de todo el mundo. Si desea elegir servidores de Asia, puede utilizar “asia.pool.ntp.org”. timeClient también toma la diferencia horaria UTC en milisegundos de su zona horaria. Por ejemplo, el desplazamiento UTC para India es +5: 30, por lo que convertimos este desplazamiento en milisegundos, que es igual a 5 * 60 * 60 + 30 * 60 = 19800.

Zona. Desplazamiento de la hora UTC (horas y minutos). Desplazamiento de hora UTC (segundos)

INDIA +5: 30 19800

LONDRES 0:00. 0

NUEVA YORK -5: 00-18000

Copie el siguiente código e ingrese su wifi y contraseña en el código e ingrese la compensación de tiempo en el código y luego cárguelo en sus tableros esp8266.:

#include "NTPClient.h" #include "ESP8266WiFi.h" // proporciona rutinas Wi-Fi específicas de ESP8266 a las que llamamos para conectarnos a la red #include "WiFiUdp.h" // maneja el envío y la recepción de paquetes UDP

#include "SPI.h" // SPI para interconectar OLED con NodeMCu

#include "Adafruit_GFX.h"

#include "Adafruit_SSD1306.h"

#define SCREEN_WIDTH 128 // Ancho de pantalla OLED, en píxeles

#define SCREEN_HEIGHT 64 // Altura de la pantalla OLED, en píxeles

#define OLED_RESET -1

Pantalla Adafruit_SSD1306 (SCREEN_WIDTH, SCREEN_HEIGHT, & Wire, OLED_RESET);

constchar * ssid = "yourwifissid";

const char * contraseña = "tuwifipass";

WiFiUDP ntpUDP;

NTPClient timeClient (ntpUDP, "pool.ntp.org", 19800, 60000);

String arr_days = {"Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado"};

String date_time; // Puede especificar el grupo de servidores de tiempo y el desplazamiento (en segundos, // se puede cambiar más tarde con setTimeOffset ()). Además, puede especificar el // intervalo de actualización (en milisegundos, se puede cambiar usando setUpdateInterval ()).

configuración vacía ()

{

Serial.begin (115200);

WiFi.begin (ssid, contraseña);

mientras (WiFi.status ()! = WL_CONNECTED)

{

retraso (500);

Serial.print (".");

}

si (! display.begin (SSD1306_SWITCHCAPVCC, 0x3C))

{

Serial.println (F ("Falló la asignación SSD1306"));

por(;;); // No continúes, bucle para siempre

}

display.clearDisplay ();

display.setTextSize (2); // Dibujar texto a escala 2X

display.setTextColor (BLANCO);

display.setCursor (5, 2);

display.println ("BIENVENIDO A");

display.println ("instructables");

display.println ("Proyecto");

display.display ();

retraso (3000);

timeClient.begin ();

}

bucle vacío ()

{

timeClient.update ();

display.clearDisplay ();

Serial.println (timeClient.getFormattedTime ());

display.setTextSize (2); // Dibujar texto a escala 2X

display.setTextColor (AZUL);

display.setCursor (0, 2);

int hh = timeClient.getHours ();

int mm = timeClient.getMinutes ();

int ss = timeClient.getSeconds ();

si (hh> 12)

{

hh = hh-12;

display.print (hh);

display.print (":");

display.print (mm);

display.print (":");

display.print (ss);

display.println ("PM");

}

demás

{

display.print (hh);

display.print (":");

display.print (mm);

display.print (":");

display.print (ss);

display.println ("AM");

}

int día = timeClient.getDay ();

display.println ("'" + arr_days [día] + "'");

fecha_hora = timeClient.getFormattedDate ();

int index_date = date_time.indexOf ("T");

String date = date_time.substring (0, index_date);

Serial.println (fecha);

display.println (fecha);

display.display ();

// Mostrar texto inicial}

Paso 6: Obtener fecha y hora

Obtener fecha y hora
Obtener fecha y hora

si conectó todo correctamente y también cargó el código correctamente, entonces podrá ver su reloj ntp ejecutándose en la pantalla oled como el mío al ejecutarse en la pantalla oled. Consulte la imagen para ver la salida.

Recomendado: