Tabla de contenido:
2025 Autor: John Day | [email protected]. Última modificación: 2025-01-13 06:57
¡Haz que tu tiempo cuente! Este es un tema que se discute con frecuencia entre mis suscriptores, ¿y por qué motivo? ¡Debido al hecho simple e indispensable de que cuando se hace un registrador de datos, y para todo lo relacionado con la automatización, se necesita la hora correcta! Y hay varias formas de medir el tiempo: reloj con batería, RTC (Real Time Clock), entre otras. Pero el que quiero mostrarles hoy (que informa la fecha, el día de la semana y la hora) es el NTP (Network Time Protocol), que está en línea. En este video, recuperaremos la información de fecha y hora en línea y mostraremos la información en la pantalla.
Paso 1: demostración
Paso 2: Montaje
Paso 3: Montaje - Mesa
Paso 4: Biblioteca Adafruit GFX
En el IDE de Arduino, vaya a Sketch-> Incluir biblioteca-> Administrar bibliotecas …
Instalar la biblioteca Adafruit GFX
Paso 5: Biblioteca Adafruit ST7735
En el IDE de Arduino, vaya a Sketch-> Incluir biblioteca-> Administrar bibliotecas …
Instalar Adafruit ST7735
Paso 6: Biblioteca NTPClient
Vaya a https://github.com/taranais/NTPClient y descargue la biblioteca NTPClient modificada por taranais.
Descomprima y coloque la carpeta en C: / Users / Documents / Arduino / libraries
Paso 7: ESP32_NTP.ino
Incluye y define
#include #include // Biblioteca NTPClient modificada #include // Socket UDP #include // Display #include // Display #include // Los pinos muestran #define DISPLAY_DC 12 // A0 #define DISPLAY_CS 13 // CS #define DISPLAY_MOSI 14 // SDA #define DISPLAY_CLK 27 // SCK #define DISPLAY_RST 0 // Fuso Horário, no caso horário de verão de Brasília int timeZone = -2; // Struct com os dados do dia e hora struct Date {int dayOfWeek; int dia; int mes; int año; int horas; int minutos; int segundos; }; // Socket UDP que una lib utiliza para recuperar datos sobre el horário WiFiUDP udp; // Objeto responsável para recuperar datos sobre horário NTPClient ntpClient (udp, // socket udp "0.br.pool.ntp.org", // URL del servidor NTP timeZone * 3600, // Deslocamento do horário em relacão ao GMT 0 60000); // Intervalo entre verificações online // Nomes dos dias da semana char * dayOfWeekNames = {"Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado"}; // Objeto responsável pelo display Adafruit_ST7735 display = Adafruit_ST7735 (DISPLAY_CS, DISPLAY_DC, DISPLAY_MOSI, DISPLAY_CLK, DISPLAY_RST);
Configuración
configuración vacía () {Serial.begin (115200); setupDisplay (); connectWiFi (); setupNTP (); // Cria uma nova tarefa no core 0 xTaskCreatePinnedToCore (wifiConnectionTask, // Função que será ejecutada "wifiConnectionTask", // Nome da tarefa 10000, // Tamanho da memória disponível (em WORDs) NULL, // No vamos a passar nenhum parametro 2, // prioridade NULL, // Não precisamos de referência para a tarefa 0); // Número del núcleo}
ConfiguraciónNTP
void setupNTP () {// Inicializa o cliente NTP ntpClient.begin (); // Espera pelo primeiro update online Serial.println ("Espera primera actualización"); while (! ntpClient.update ()) {Serial.print ("."); ntpClient.forceUpdate (); retraso (500); } Serial.println (); Serial.println ("Primera actualización completa"); }
WifiConnectionTask
// Tarefa que verifica se a conexão caiu e tenta reconectarvoid wifiConnectionTask (void * param) {while (true) {// Se a WiFi não está conectado if (WiFi.status ()! = WL_CONNECTED) {// Manda conectar connectWiFi (); } // Retraso de 100 tics vTaskDelay (100); }}
ConectarWiFi
void connectWiFi () {Serial.println ("Conectando"); // Troque pelo nome e senha da sua rede WiFi WiFi.begin ("SSID", "12345678"); // Espera enquanto não estiver conectado while (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); retraso (500); } Serial.println (); Serial.print ("Conectado a"); Serial.println (WiFi. SSID ()); }
Configuración Pantalla
void setupDisplay () {display.initR (INITR_BLACKTAB); // Inicializa o display display.setRotation (3); // Rotaciona display.setTextSize (2); // Tamanho do texto display.fillScreen (ST77XX_BLACK); // Preenche com a cor preta display.setCursor (0, 0); // Coloca o cursor no começo display.setTextColor (ST77XX_WHITE, ST77XX_BLACK); // Texto branco com fundo preto display.setTextWrap (false); // Não pula linha automáticamente}
Círculo
void loop () {// Recupera los datos sobre los datos y el horário Date date = getDate (); // Restaure o cursor display.setCursor (0, 0); // Exibe os dados no display display.printf ("% s / n / n% s / n / n% 02d /% 02d /% d / n / n% 02d:% 02d:% 02d", WiFi. SSID ().c_str (), dayOfWeekNames [date.dayOfWeek], date.day, date.month, date.year, date.hours, date.minutes, date.seconds); retraso (100); }
Obtener la fecha
Date getDate () {// Recupera los datos de los datos y el horário usando el cliente NTP char * strDate = (char *) ntpClient.getFormattedDate (). C_str (); // Passa os dados da string para una estructura Date date; sscanf (strDate, "% d-% d-% dT% d:% d:% dZ", & date.year, & date.month, & date.day, & date.hours, & date.minutes, & date.seconds); // Dia da semana de 0 a 6, sendo 0 o domingo date.dayOfWeek = ntpClient.getDay (); Fecha de regreso; }
Paso 8: archivos
Descarga los archivos
INO