Cuprins:

Ceas Internet: Afișați data și ora cu un OLED utilizând ESP8266 NodeMCU cu protocol NTP: 6 pași
Ceas Internet: Afișați data și ora cu un OLED utilizând ESP8266 NodeMCU cu protocol NTP: 6 pași

Video: Ceas Internet: Afișați data și ora cu un OLED utilizând ESP8266 NodeMCU cu protocol NTP: 6 pași

Video: Ceas Internet: Afișați data și ora cu un OLED utilizând ESP8266 NodeMCU cu protocol NTP: 6 pași
Video: Conectarea unui ceas inteligent la un telefon Android 2024, Decembrie
Anonim
Ceas Internet: Afișați data și ora cu un OLED utilizând ESP8266 NodeMCU cu protocol NTP
Ceas Internet: Afișați data și ora cu un OLED utilizând ESP8266 NodeMCU cu protocol NTP

Bună băieți în acest instructables vom construi un ceas de internet, care va primi timp de pe internet, astfel încât acest proiect nu va avea nevoie de niciun RTC pentru a rula, va avea nevoie doar de o conexiune de internet funcțională

Și pentru acest proiect aveți nevoie de un esp8266 care va avea un wifi pentru a obține acces la internet și un afișaj pentru a afișa ora pe acesta și esp8266 va prelua timp de pe internet folosind protocolul NTP, ntp înseamnă protocolul timpului de rețea, deci practic există servere ntp pe web, care sunt utilizate pentru a sincroniza ceasurile computerului și vom folosi aceste servere pentru a obține timp în proiectul nostru.

Pasul 1: Lucruri de care aveți nevoie

Lucruri de care ai nevoie
Lucruri de care ai nevoie
Lucruri de care ai nevoie
Lucruri de care ai nevoie
Lucruri de care ai nevoie
Lucruri de care ai nevoie

pentru acest proiect veți avea nevoie de următoarele lucruri:

Esp8266 / nodemcu

Oled ssd1306 0.96"

Sârme de jumper

Pană de pâine

Cablu USB

Pasul 2: Conexiuni

Conexiuni
Conexiuni

Acest afișaj OLED cu 4 pini comunică cu modulul ESP8266 utilizând protocolul I2C, mai jos sunt schema de circuite și tabelul de conexiuni pentru a conecta pinii OLED I2C cu NodeMCU pentru a afișa ora Internetului.

Pasul 3: Descărcați bibliotecile

Descărcați biblioteci
Descărcați biblioteci
Descărcați biblioteci
Descărcați biblioteci

Asigurați-vă că ați descărcat bibliotecile SD1306 în ideea dvs. Arduino așa cum se arată în imagine și asigurați-vă că aveți și biblioteca Adafruit GFX, dacă nu, atunci instalați aceste două biblioteci.

În IDE-ul dvs. Arduino, accesați Managerul de biblioteci și căutați NTP și descărcați biblioteca client NTP așa cum am descărcat, consultați imaginea pentru ajutor suplimentar.

Pasul 4: Ce este NTP

Ce este NTP
Ce este NTP

NTP este unul dintre cele mai vechi Protocol de Internet (IP) de rețea pentru sincronizarea ceasurilor între rețelele de calculatoare. A fost proiectat de David L. Mills de la Universitatea din Delaware în 1981. Acest protocol poate fi utilizat pentru a sincroniza mai multe rețele cu Timpul universal coordonat (UTC) în câteva milisecunde. UTC este principalul standard de timp prin care lumea reglează ceasul și ora. UTC nu se modifică și nu variază în funcție de locațiile geografice. NTP folosește UTC ca referință de timp și oferă timp precis și sincronizat pe internet.

NTP funcționează pe un model ierarhic client-server. Modelul de top are ceasuri de referință cunoscute sub numele de „stratum0”, cum ar fi ceasuri atomice, unde radio, GPS, GSM care primește timp de la satelit. Serverele care primesc timp de la stratum0 sunt numite „stratum1” și serverele care primesc timp de la stratum1 sunt numite „stratum2” și așa mai departe. Acest lucru continuă și precizia timpului continuă să scadă după fiecare etapă. NTP selectează automat cea mai bună dintre mai multe surse de timp disponibile pentru sincronizare, ceea ce îl face protocolul capabil să tolereze defecțiunile. Deci, aici, în acest proiect, obținem timp de la serverul NTP folosind ESP8266 NodeMCU și îl afișăm pe afișajul OLED. Același tip de ceas de internet este construit utilizând ESP32 în tutorialul anterior.

Pasul 5: Codificarea părții

Partea de codificare
Partea de codificare

Pentru a solicita data și ora, inițializați ora clientului cu adresa serverelor NTP. Pentru o precizie mai bună, alegeți adresa serverelor NTP care sunt aproape de zona geografică. Aici folosim „pool.ntp.org” care oferă servere din întreaga lume. Dacă doriți să alegeți servere din Asia, puteți folosi „asia.pool.ntp.org”. timeClient ia, de asemenea, decalarea timpului UTC în milisecunde din fusul orar. De exemplu, decalajul UTC pentru India este de +5: 30, deci convertim acest decalaj în milisecunde, care este egal cu 5 * 60 * 60 + 30 * 60 = 19800.

Zonă. Compensarea orei UTC (ore și minute). Offset timp UTC (secunde)

INDIA +5: 30 19800

LONDRA 0:00. 0

NEW YORK -5: 00 -18000

Vă rugăm să copiați următorul cod și să introduceți wifi-ul și parola în cod și să introduceți decalajul de timp în cod, apoi să îl încărcați pe panourile dvs. esp8266.:

#include "NTPClient.h" #include "ESP8266WiFi.h" // oferă rutine Wi-Fi specifice ESP8266 pe care le apelăm pentru a ne conecta la rețea #include "WiFiUdp.h" // gestionează trimiterea și primirea pachetelor UDP

#includeți „SPI.h” // SPI pentru interfața OLED cu NodeMCu

#include „Adafruit_GFX.h”

#include "Adafruit_SSD1306.h"

#define SCREEN_WIDTH 128 // Lățimea ecranului OLED, în pixeli

#define SCREEN_HEIGHT 64 // Înălțimea afișajului OLED, în pixeli

#define OLED_RESET -1

Afișaj 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 = {"duminică", "luni", "marți", "miercuri", "joi", "vineri", "sâmbătă"};

String data_time; // Puteți specifica pool-ul serverului de timp și offset-ul (în secunde, // poate fi modificat ulterior cu setTimeOffset ()). În plus, puteți specifica // intervalul de actualizare (în milisecunde, poate fi modificat folosind setUpdateInterval ()).

configurare nulă ()

{

Serial.begin (115200);

WiFi.begin (ssid, parolă);

while (WiFi.status ()! = WL_CONNECTED)

{

întârziere (500);

Serial.print (".");

}

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

{

Serial.println (F ("Alocarea SSD1306 a eșuat"));

pentru(;;); // Nu continuați, buclați pentru totdeauna

}

display.clearDisplay ();

display.setTextSize (2); // Desenați text la scară 2X

display.setTextColor (ALB);

display.setCursor (5, 2);

display.println ("BINE AȚI VENIT LA");

display.println ("instructables");

display.println ("Proiect");

display.display ();

întârziere (3000);

timeClient.begin ();

}

bucla nulă ()

{

timeClient.update ();

display.clearDisplay ();

Serial.println (timeClient.getFormattedTime ());

display.setTextSize (2); // Desenați text la scară 2X

display.setTextColor (ALBASTRU);

display.setCursor (0, 2);

int hh = timeClient.getHours ();

int mm = timeClient.getMinutes ();

int ss = timeClient.getSeconds ();

dacă (hh> 12)

{

hh = hh-12;

display.print (hh);

display.print (":");

display.print (mm);

display.print (":");

display.print (ss);

display.println ("PM");

}

altceva

{

display.print (hh);

display.print (":");

display.print (mm);

display.print (":");

display.print (ss);

display.println ("AM");

}

int day = timeClient.getDay ();

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

date_time = timeClient.getFormattedDate ();

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

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

Serial.println (data);

display.println (data);

display.display ();

// Afișați textul inițial}

Pasul 6: Obținerea datei și orei

Obținerea datei și orei
Obținerea datei și orei

dacă ați conectat totul în mod corespunzător și ați încărcat codul în mod corespunzător, atunci veți putea vedea ceasul dvs. ntp rulând pe afișajul oled ca al meu în timpul rulării pe afișajul oled. Vă rugăm să consultați imaginea pentru ieșire.

Recomandat: