En el tutorial anterior, hicimos el reloj RTC usando DS3231 y ESP32. Para minimizar los requisitos de hardware, haremos un reloj de Internet sin usar el módulo RTC. Esto es más preciso en comparación con el reloj RTC. ESP32 es un módulo Wi-Fi y se puede conectar fácilmente a Internet, por lo que usaremos NTP (Protocolo de tiempo de red) y UDP (Protocolo de datagramas de usuario) para obtener el tiempo de Internet mediante Wi-Fi. Este reloj de Internet puede resultar muy útil al crear proyectos de IoT.
¿Qué es NTP?
Network Time Protocol (NTP) es un protocolo de red que se utiliza para la sincronización de tiempo entre sistemas y redes de datos. El marco NTP depende de los servidores de hora de Internet. NTP tiene algoritmos para ajustar con precisión la hora del día. Los servidores NTP tienen software que envía la hora del reloj a las computadoras cliente usando UDPport 123. Así que aquí en este proyecto, obtenemos la hora del servidor NTP usando ESP32 y la mostramos en la pantalla OLED.
Materiales necesarios:
- ESP32
- Pantalla OLED de 128 * 64
- Tablero de circuitos
- Cables macho-hembra
Diagrama de circuito:
Aquí, estamos usando el modo SPI para conectar nuestro módulo de pantalla OLED de 128 × 64 (SSD1306) a ESP32. Entonces, usará 7 pines. Las conexiones con ESP32 se dan como:
- Pin CS (selección de chip) de OLED -> PIN D5 de ESP32
- Pin DC de OLED -> PIN D4 de ESP32
- RES pin de OLED -> PIN D2 de ESP32
- Pin SDA de OLED -> PIN D23, es decir, MOSI de ESP32
- Pin SCK de OLED -> PIN D18, es decir, SCK de ESP32
- Vdd de OLED -> Vcc de ESP32
- GND de OLED -> GND de ESP32
Necesita archivos de placa para su ESP32. Menú desplegable del administrador de la placa de registro de Arduino IDE para el kit de desarrollo ESP32. Si no está allí, siga los pasos que se indican en el siguiente enlace:
circuitdigest.com/microcontroller-projects/getting-started-with-esp32-with-arduino-ide
También puede usar ESP12 para este proyecto, aprenda aquí a usar ESP12.
Usaremos Arduino IDE para escribir nuestro programa como se explica en el artículo anterior.
Explicación del código:
El código completo para ESP32 Internet Clock se encuentra al final del artículo. Aquí explicamos algunas partes importantes del código.
Necesitamos varias bibliotecas para usar en nuestro código que se pueden descargar de los siguientes enlaces:
1. Adafruit_SSD1306:
2. SPI:
3. Adafruit_GFX:
4. NTPClient:
5.WiFiUdp:
Por lo tanto, hemos incluido todas las bibliotecas y la variable definida para ingresar el nombre y la contraseña de Wi-Fi.
#incluir
Aquí la biblioteca NTPClient.h se usa para conectarse con el servidor de tiempo. Se necesita tiempo de un servidor NTP y mantenerlo sincronizado. Y la biblioteca Hhre WiFiUdp.h se utiliza para enviar y recibir mensajes UDP. UDP es un protocolo que envía y recibe mensajes cortos de nuestro sistema al servidor NTP.
Entonces, para obtener el tiempo de Internet, tenemos que definir tres variables en nuestro programa para NTP.
NTP_OFFSET, que es la zona horaria de su país, es decir, para India es +5: 30 horas. Entonces son 19800 en segundos.
NTP_INTERVAL, que es el intervalo de tiempo que toma NTP para actualizar la hora. Son 60-64 segundos.
NTP_ADDRESS es el servidor NTP de su país. Para la India, puede utilizar “ in.pool.ntp.org ”.
#define NTP_OFFSET 19800 // En segundos #define NTP_INTERVAL 60 * 1000 // En milisegundos #define NTP_ADDRESS "1.asia.pool.ntp.org" WiFiUDP ntpUDP; NTPClient timeClient (ntpUDP, NTP_ADDRESS, NTP_OFFSET, NTP_INTERVAL);
En la función de configuración , inicialice la configuración de Wi-Fi para conectarse a Internet.
configuración vacía () { display.begin (); Serial.begin (9600); Serial.println (); Serial.println (); Serial.print ("Conectando a"); Serial.println (ssid); WiFi.begin (ssid, contraseña); while (WiFi.status ()! = WL_CONNECTED) { retraso (500); Serial.print ("."); } Serial.println (""); Serial.println ("WiFi conectado"); Serial.println ("dirección IP:"); Serial.println (WiFi.localIP ()); timeClient.begin ();
Luego, inicialice las funciones de pantalla para mostrar la hora en OLED.
display.begin (SSD1306_SWITCHCAPVCC);
En la función de bucle, hemos utilizado timeClient.update (), esta función toma el tiempo actualizado de NTP en forma de cadena y lo almacena en la variable formattedTime . Luego, muéstrelo en OLED usando la función display.println () .
bucle vacío () { timeClient.update (); String formattedTime = timeClient.getFormattedTime (); display.clearDisplay (); display.setTextSize (2); // establece estos parámetros de acuerdo a tus necesidades.. display.setCursor (0, 0); display.println (formattedTime);
El programa completo se da a continuación. Ahora finalmente programe ESP32 con Arduino IDE y su reloj de Internet estará listo para mostrar la hora.