Sadržaj:

Internet sat: Prikaz datuma i vremena s OLED -om pomoću ESP8266 NodeMCU s NTP protokolom: 6 koraka
Internet sat: Prikaz datuma i vremena s OLED -om pomoću ESP8266 NodeMCU s NTP protokolom: 6 koraka

Video: Internet sat: Prikaz datuma i vremena s OLED -om pomoću ESP8266 NodeMCU s NTP protokolom: 6 koraka

Video: Internet sat: Prikaz datuma i vremena s OLED -om pomoću ESP8266 NodeMCU s NTP protokolom: 6 koraka
Video: iPhone | Produzite Trajanje Baterije | Optimizacija Sistema 2024, Srpanj
Anonim
Internet sat: Prikažite datum i vrijeme s OLED -om pomoću ESP8266 NodeMCU s NTP protokolom
Internet sat: Prikažite datum i vrijeme s OLED -om pomoću ESP8266 NodeMCU s NTP protokolom

Bok dečki, u ovoj uputi napravit ćemo internetski sat koji će dobivati vrijeme s interneta pa za ovaj projekt neće trebati nikakav RTC za pokretanje, trebat će mu samo ispravna internetska veza

A za ovaj projekt potreban vam je esp8266 koji će imati wifi za pristup internetu i zaslon za prikaz vremena na njemu, a esp8266 će dohvatiti vrijeme s interneta pomoću NTP protokola, ntp označava mrežni protokol vremena, tako da u osnovi postoje ntp poslužitelji na webu koji se koriste za sinkronizaciju računalnih satova, a mi ćemo koristiti te poslužitelje kako bismo dobili vrijeme u našem projektu.

Korak 1: Stvari koje trebate

Stvari koje trebate
Stvari koje trebate
Stvari koje trebate
Stvari koje trebate
Stvari koje trebate
Stvari koje trebate

za ovaj projekt trebat će vam sljedeće stvari:

Esp8266/nodemcu

Oled ssd1306 0,96"

Kratkospojne žice

Oglasna ploča

USB kabl

Korak 2: Veze

Veze
Veze

Ovaj 4-pinski OLED zaslon komunicira s ESP8266 modulom pomoću I2C protokola, dolje su dijagram sklopa i tablica povezivanja za povezivanje OLED I2C pinova s NodeMCU za prikaz internetskog vremena.

Korak 3: Preuzmite knjižnice

Preuzmite knjižnice
Preuzmite knjižnice
Preuzmite knjižnice
Preuzmite knjižnice

Provjerite jeste li preuzeli SD1306 knjižnice u svoj Arduino ide kao što je prikazano na slici i provjerite jeste li i Adafruit GFX knjižnicu, ako ne, onda instalirajte ove dvije knjižnice.

U svom Arduino IDE idite na Upravitelj knjižnica i potražite NTP i samo preuzmite NTP klijentsku knjižnicu dok sam preuzimao, pogledajte sliku za daljnju pomoć.

Korak 4: Što je NTP

Što je NTP
Što je NTP

NTP je jedan od najstarijih mrežnih internetskih protokola (IP) za sinkronizaciju satova između računalnih mreža. Dizajnirao ga je David L. Mills sa Sveučilišta Delaware 1981. Ovaj se protokol može koristiti za sinkronizaciju mnogih mreža s koordiniranim univerzalnim vremenom (UTC) u roku od nekoliko milisekundi. UTC je primarni vremenski standard prema kojem svijet regulira sat i vrijeme. UTC se ne mijenja i razlikuje se za različite zemljopisne lokacije. NTP koristi UTC kao vremensku referencu i pruža točno i sinkronizirano vrijeme na Internetu.

NTP radi na hijerarhijskom modelu klijent-poslužitelj. Vrhunski model ima referentne satove poznate kao "stratum0" poput atomskih satova, radio valova, GPS -a, GSM -a koji primaju vrijeme sa satelita. Poslužitelji koji primaju vrijeme od stratum0 nazivaju se "stratum1", a poslužitelji koji primaju vrijeme od stratum0 nazivaju se "stratum2" itd. To se nastavlja i točnost vremena se smanjuje nakon svake faze. NTP automatski odabire najbolji od nekoliko dostupnih vremenskih izvora za sinkronizaciju, što ga čini protokolom koji je otporan na greške. Dakle, ovdje u ovom projektu dobivamo vrijeme s NTP poslužitelja koristeći ESP8266 NodeMCU i pokazujući ga na OLED zaslonu. Ova ista vrsta internetskog sata izgrađena je pomoću ESP32 u prethodnom vodiču.

Korak 5: Kodiranje dijela

Kodiranje dijela
Kodiranje dijela

Da biste zatražili datum i vrijeme, inicijalizirajte klijent vremena s adresom NTP poslužitelja. Za bolju točnost odaberite adresu NTP poslužitelja koji su blizu vašeg zemljopisnog područja. Ovdje koristimo “pool.ntp.org” koji daje poslužitelje iz cijelog svijeta. Ako želite odabrati poslužitelje iz Azije, možete koristiti "asia.pool.ntp.org". timeClient također uzima UTC pomak u milisekundama vaše vremenske zone. Na primjer, UTC pomak za Indiju je +5: 30 pa taj pomak pretvaramo u milisekundama što je jednako 5*60*60 +30*60 = 19800.

Područje. UTC pomak vremena (sati i minute). UTC pomak vremena (sekunde)

INDIJA +5: 30 19800

LONDON 0:00. 0

NEW YORK -5: 00 -18000

Kopirajte sljedeći kôd i unesite svoj wifi i lozinku u kôd & Unesite vremenski pomak u kôd, a zatim ga prenesite na svoje esp8266 ploče.:

#include "NTPClient.h" #include "ESP8266WiFi.h" // pruža ESP8266 specifične Wi-Fi rutine koje pozivamo za povezivanje s mrežom #include "WiFiUdp.h" // upravlja slanjem i primanjem UDP paketa

#include "SPI.h" // SPI za povezivanje OLED -a s NodeMCu

#include "Adafruit_GFX.h"

#include "Adafruit_SSD1306.h"

#define SCREEN_WIDTH 128 // Širina OLED zaslona, u pikselima

#define SCREEN_HEIGHT 64 // Visina OLED zaslona, u pikselima

#definiraj OLED_RESET -1

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

constchar *ssid = "yourwifissid";

const char *lozinka = "yourwifipass";

WiFiUDP ntpUDP;

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

String arr_days = {"Nedjelja", "Ponedjeljak", "Utorak", "Srijeda", "Četvrtak", "Petak", "Subota"};

String date_time; // Možete odrediti vremensko spremište poslužitelja i pomak (u sekundama, može se // promijeniti kasnije s setTimeOffset ()). Dodatno možete odrediti // interval ažuriranja (u milisekundama se može promijeniti korištenjem setUpdateInterval ()).

void setup ()

{

Serial.begin (115200);

WiFi.započni (ssid, lozinka);

while (WiFi.status ()! = WL_CONNECTED)

{

kašnjenje (500);

Serial.print (".");

}

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

{

Serial.println (F ("Dodjela SSD1306 nije uspjela"));

za(;;); // Ne nastavljaj, petlja zauvijek

}

display.clearDisplay ();

display.setTextSize (2); // Crtanje teksta u 2X mjerilu

display.setTextColor (BIJELO);

display.setCursor (5, 2);

display.println ("DOBRODOŠLI U");

display.println ("instrukcije");

display.println ("Projekt");

display.display ();

kašnjenje (3000);

timeClient.begin ();

}

void loop ()

{

timeClient.update ();

display.clearDisplay ();

Serial.println (timeClient.getFormattedTime ());

display.setTextSize (2); // Crtanje teksta u 2X mjerilu

display.setTextColor (PLAVO);

display.setCursor (0, 2);

int hh = timeClient.getHours ();

int mm = timeClient.getMinutes ();

int ss = timeClient.getSeconds ();

ako (hh> 12)

{

hh = hh-12;

display.print (hh);

display.print (":");

prikaz.tisak (mm);

display.print (":");

display.print (ss);

display.println ("PM");

}

drugo

{

display.print (hh);

display.print (":");

prikaz.tisak (mm);

display.print (":");

display.print (ss);

display.println ("AM");

}

int dan = timeClient.getDay ();

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

date_time = timeClient.getFormattedDate ();

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

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

Serial.println (datum);

display.println (datum);

display.display ();

// Prikaži početni tekst}

Korak 6: Dobivanje datuma i vremena

Dobivanje datuma i vremena
Dobivanje datuma i vremena

ako ste sve pravilno spojili i ispravno prenijeli kôd tada ćete moći vidjeti kako vaš ntp sat radi na oled zaslonu kao i moj u radu na oled zaslonu. Molimo pogledajte sliku za izlaz.

Preporučeni: