Índice:

Relógio da Internet: Exibir data e hora com um OLED usando ESP8266 NodeMCU com protocolo NTP: 6 etapas
Relógio da Internet: Exibir data e hora com um OLED usando ESP8266 NodeMCU com protocolo NTP: 6 etapas

Vídeo: Relógio da Internet: Exibir data e hora com um OLED usando ESP8266 NodeMCU com protocolo NTP: 6 etapas

Vídeo: Relógio da Internet: Exibir data e hora com um OLED usando ESP8266 NodeMCU com protocolo NTP: 6 etapas
Vídeo: Não perca tempo: use NTP! 2024, Novembro
Anonim
Relógio da Internet: Exibir data e hora com um OLED usando ESP8266 NodeMCU com protocolo NTP
Relógio da Internet: Exibir data e hora com um OLED usando ESP8266 NodeMCU com protocolo NTP

Olá pessoal, neste instructables vamos construir um relógio de internet que vai pegar o tempo da internet então este projeto não vai precisar de nenhum RTC para rodar, só vai precisar de uma conexão de internet funcionando

E para este projeto você precisa de um esp8266 que terá um wi-fi para obter acesso à internet e um display para exibir a hora nele e esp8266 buscará o tempo da internet usando o protocolo NTP, ntp significa protocolo de tempo de rede, então basicamente existem servidores ntp na web que são usados para sincronizar os relógios dos computadores e usaremos esses servidores para obter o tempo em nosso projeto.

Etapa 1: Coisas que você precisa

Coisas que você precisa
Coisas que você precisa
Coisas que você precisa
Coisas que você precisa
Coisas que você precisa
Coisas que você precisa

para este projeto, você precisará das seguintes coisas:

Esp8266 / nodemcu

Oled ssd1306 0,96"

Fios de ligação

Tábua de pão

Cabo USB

Etapa 2: conexões

Conexões
Conexões

Este display OLED de 4 pinos se comunica com o módulo ESP8266 usando o protocolo I2C, abaixo estão o diagrama de circuito e a tabela de conexões para conectar os pinos I2C OLED com NodeMCU para exibir o tempo da Internet.

Etapa 3: Baixar bibliotecas

Baixar Bibliotecas
Baixar Bibliotecas
Baixar Bibliotecas
Baixar Bibliotecas

Certifique-se de ter baixado as bibliotecas SD1306 em seu ide Arduino conforme mostrado na imagem e certifique-se de que você Adafruit GFX library também, se não, então instale essas duas bibliotecas.

Em seu Arduino IDE, vá para o gerenciador de bibliotecas e pesquise NTP e apenas baixe a biblioteca cliente NTP conforme eu baixei, consulte a imagem para obter mais ajuda.

Etapa 4: O que é NTP

O que é NTP
O que é NTP

O NTP é um dos protocolos de rede da Internet (IP) mais antigos para a sincronização de relógios entre redes de computadores. Ele foi projetado por David L. Mills, da University of Delaware, em 1981. Este protocolo pode ser usado para sincronizar muitas redes para o Tempo Universal Coordenado (UTC) em poucos milissegundos. UTC é o principal padrão de tempo pelo qual o mundo regula o relógio e a hora. UTC não muda e varia para diferentes localizações geográficas. O NTP usa o UTC como referência de tempo e fornece tempo preciso e sincronizado na Internet.

O NTP funciona em um modelo cliente-servidor hierárquico. Top model tem relógios de referência conhecidos como “stratum0” como relógios atômicos, ondas de rádio, GPS, GSM que recebe o tempo do satélite. Os servidores que recebem a hora do stratum0 são chamados de “stratum1” e os servidores que recebem a hora do stratum1 são chamados de “stratum2” e assim por diante. Isso continua e a precisão do tempo diminui após cada estágio. O NTP seleciona automaticamente o melhor de várias fontes de tempo disponíveis para sincronizar, o que o torna um protocolo tolerante a falhas. Então, aqui neste projeto, estamos obtendo o tempo do servidor NTP usando ESP8266 NodeMCU e exibindo-o no display OLED. Este mesmo tipo de relógio de Internet é construído usando ESP32 no tutorial anterior.

Etapa 5: Parte de codificação

Parte de codificação
Parte de codificação

Para solicitar a data e a hora, inicialize o cliente de hora com o endereço dos servidores NTP. Para melhor precisão, escolha o endereço dos servidores NTP próximos à sua área geográfica. Aqui usamos “pool.ntp.org” que fornece servidores de todo o mundo. Se você deseja escolher servidores da Ásia, pode usar “asia.pool.ntp.org”. timeClient também obtém a diferença de horário UTC em milissegundos do seu fuso horário. Por exemplo, o deslocamento UTC para a Índia é +5: 30, portanto, convertemos esse deslocamento em milissegundos, que é igual a 5 * 60 * 60 + 30 * 60 = 19800.

Área. Diferença de horário UTC (horas e minutos). Ajuste de horário UTC (segundos)

ÍNDIA +5: 30 19800

LONDRES 0:00. 0

NOVA YORK -5: 00 -18000

Copie o código a seguir e insira seu wifi e senha no código e insira a diferença de horário no código e, em seguida, carregue-o em seus painéis esp8266.:

#include "NTPClient.h" #include "ESP8266WiFi.h" // fornece rotinas Wi-Fi específicas do ESP8266 que estamos chamando para nos conectar à rede #include "WiFiUdp.h" // lida com o envio e recebimento de pacotes UDP

#include "SPI.h" // SPI para interface OLED com NodeMCu

#include "Adafruit_GFX.h"

#include "Adafruit_SSD1306.h"

#define SCREEN_WIDTH 128 // largura do display OLED, em pixels

#define SCREEN_HEIGHT 64 // altura do display OLED, em pixels

# define OLED_RESET -1

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

constchar * ssid = "yourwifissid";

const char * password = "yourwifipass";

WiFiUDP ntpUDP;

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

String arr_days = {"Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado"};

String date_time; // Você pode especificar o pool do servidor de horário e o deslocamento (em segundos, // pode ser alterado posteriormente com setTimeOffset ()). Além disso, você pode especificar o // intervalo de atualização (em milissegundos, pode ser alterado usando setUpdateInterval ()).

void setup ()

{

Serial.begin (115200);

WiFi.begin (ssid, senha);

enquanto (WiFi.status ()! = WL_CONNECTED)

{

atraso (500);

Serial.print (".");

}

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

{

Serial.println (F ("SSD1306 alocação falhou"));

para(;;); // Não continue, faça um loop para sempre

}

display.clearDisplay ();

display.setTextSize (2); // Desenhe texto em escala 2X

display.setTextColor (WHITE);

display.setCursor (5, 2);

display.println ("BEM-VINDO A");

display.println ("instructables");

display.println ("Projeto");

display.display ();

atraso (3000);

timeClient.begin ();

}

void loop ()

{

timeClient.update ();

display.clearDisplay ();

Serial.println (timeClient.getFormattedTime ());

display.setTextSize (2); // Desenhe texto em escala 2X

display.setTextColor (BLUE);

display.setCursor (0, 2);

int hh = timeClient.getHours ();

int mm = timeClient.getMinutes ();

int ss = timeClient.getSeconds ();

if (hh> 12)

{

hh = hh-12;

display.print (hh);

display.print (":");

display.print (mm);

display.print (":");

display.print (ss);

display.println ("PM");

}

outro

{

display.print (hh);

display.print (":");

display.print (mm);

display.print (":");

display.print (ss);

display.println ("AM");

}

dia interno = timeClient.getDay ();

display.println ("'" + arr_days [dia] + "'");

date_time = timeClient.getFormattedDate ();

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

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

Serial.println (data);

display.println (data);

display.display ();

// Mostra o texto inicial}

Etapa 6: obtendo data e hora

Obtendo Data e Hora
Obtendo Data e Hora

se você conectou tudo corretamente e carregou o código corretamente, então você poderá ver seu relógio ntp rodando no display oled como o meu rodando no display oled. Consulte a imagem para saída.

Recomendado: