/* * MECRO KIT - PROYECTO 20: RELOJ ATÓMICO NTP WIFI
* Objetivo: Sincronización de tiempo vía Internet (WiFi)
* Hardware: ESP32, Display TM1637
* Librerías: TM1637Display, WiFi.h, time.h
*/
#include <WiFi.h>
#include "time.h"
#include <TM1637Display.h>
// --- CONFIGURACIÓN DE RED ---
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// --- CONFIGURACIÓN NTP (Perú: UTC-5) ---
const char* ntpServer = "pool.ntp.org";
const long gmtOffset_sec = -18000; // UTC -5 * 3600
const int daylightOffset_sec = 0; // Sin horario de verano
// --- DISPLAY ---
const int CLK = 18;
const int DIO = 19;
TM1637Display display(CLK, DIO);
void setup() {
Serial.begin(115200);
display.setBrightness(0x0f);
// Animación de carga mientras conecta
const uint8_t SEG_CONN[] = {
SEG_A | SEG_D | SEG_E | SEG_F, // C
SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F, // O
SEG_C | SEG_E | SEG_G, // n
SEG_C | SEG_E | SEG_G // n
};
display.setSegments(SEG_CONN);
// Conectar WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi Conectado!");
// Iniciar cliente de tiempo
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
}
void loop() {
struct tm timeinfo;
// Intentar obtener hora local
if(!getLocalTime(&timeinfo)){
Serial.println("Error obteniendo hora NTP");
return;
}
// Extraer hora y minutos
int hora = timeinfo.tm_hour;
int minutos = timeinfo.tm_min;
// Calcular número para display: 1230 -> 12:30
int displayTime = (hora * 100) + minutos;
bool parpadeo = (timeinfo.tm_sec % 2 == 0);
// showNumberDecEx(numero, puntos, ceros_izquierda)
display.showNumberDecEx(displayTime, (parpadeo ? 0x40 : 0), true);
delay(500);
}