Kazalo:

Internetna ura: Prikaz datuma in časa z OLED -om z uporabo ESP8266 NodeMCU s protokolom NTP: 6 korakov
Internetna ura: Prikaz datuma in časa z OLED -om z uporabo ESP8266 NodeMCU s protokolom NTP: 6 korakov

Video: Internetna ura: Prikaz datuma in časa z OLED -om z uporabo ESP8266 NodeMCU s protokolom NTP: 6 korakov

Video: Internetna ura: Prikaz datuma in časa z OLED -om z uporabo ESP8266 NodeMCU s protokolom NTP: 6 korakov
Video: ЛЮБОВЬ С ДОСТАВКОЙ НА ДОМ (2020). Романтическая комедия. Хит 2024, November
Anonim
Internetna ura: Prikažite datum in čas z OLED -om z uporabo ESP8266 NodeMCU s protokolom NTP
Internetna ura: Prikažite datum in čas z OLED -om z uporabo ESP8266 NodeMCU s protokolom NTP

Pozdravljeni fantje, v tem navodilu bomo zgradili internetno uro, ki bo dobivala čas iz interneta, tako da za ta projekt ne bo potreben noben RTC, za to bo potrebna le delujoča internetna povezava

In za ta projekt potrebujete esp8266, ki bo imel dostop do interneta za dostop do interneta in zaslon za prikaz časa na njem, esp8266 pa bo prenašal čas iz interneta po protokolu NTP, ntp pomeni omrežni časovni protokol, zato v bistvu obstajajo strežniki ntp na spletu, ki se uporabljajo za sinhronizacijo računalniških ur, mi pa bomo s temi strežniki pridobili čas v našem projektu.

Korak: Stvari, ki jih potrebujete

Stvari, ki jih potrebujete
Stvari, ki jih potrebujete
Stvari, ki jih potrebujete
Stvari, ki jih potrebujete
Stvari, ki jih potrebujete
Stvari, ki jih potrebujete

za ta projekt boste potrebovali naslednje stvari:

Esp8266/nodemcu

Oled ssd1306 0,96"

Mostične žice

Ogledna plošča

USB kabel

2. korak: Povezave

Povezave
Povezave

Ta 4-polni zaslon OLED komunicira z modulom ESP8266 po protokolu I2C, spodaj je diagram vezja in tabela povezav za povezavo nožic OLED I2C z NodeMCU za prikaz internetnega časa.

3. korak: Prenesite knjižnice

Prenesite knjižnice
Prenesite knjižnice
Prenesite knjižnice
Prenesite knjižnice

Prepričajte se, da ste v svoj Arduino ide prenesli knjižnice SD1306, kot je prikazano na sliki, in tudi knjižnico Adafruit GFX, če ne, potem namestite ti dve knjižnici.

V svojem Arduino IDE pojdite na Upravitelj knjižnic in poiščite NTP ter preprosto prenesite odjemalsko knjižnico NTP, kot sem jo prenesel, za dodatno pomoč si oglejte sliko.

4. korak: Kaj je NTP

Kaj je NTP
Kaj je NTP

NTP je eden najstarejših omrežnih internetnih protokolov (IP) za sinhronizacijo ur med računalniškimi omrežji. Zasnoval ga je David L. Mills z Univerze v Delawareu leta 1981. Ta protokol se lahko uporablja za sinhronizacijo številnih omrežij z usklajenim univerzalnim časom (UTC) v nekaj milisekundah. UTC je primarni časovni standard, po katerem svet ureja uro in uro. UTC se ne spreminja in se razlikuje za različne geografske lokacije. NTP uporablja UTC kot časovno referenco in zagotavlja natančen in sinhroniziran čas po internetu.

NTP deluje na hierarhičnem modelu odjemalec-strežnik. Vrhunski model ima referenčne ure, znane kot "stratum0", kot so atomske ure, radijski valovi, GPS, GSM, ki prejemajo čas s satelita. Strežniki, ki prejemajo čas od stratum0, se imenujejo »stratum1«, strežniki, ki prejemajo čas od stratum0, pa »stratum2« itd. To se nadaljuje in natančnost časa se po vsaki stopnji zmanjšuje. NTP samodejno izbere najboljšega od več razpoložljivih časovnih virov za sinhronizacijo, zaradi česar je protokol odporen na napake. Tako tukaj v tem projektu dobivamo čas s strežnika NTP z uporabo ESP8266 NodeMCU in ga prikažemo na zaslonu OLED. Ista internetna ura je zgrajena z uporabo ESP32 v prejšnji vadnici.

5. korak: Del za kodiranje

Kodiranje
Kodiranje

Če želite zahtevati datum in čas, inicializirajte časovnega odjemalca z naslovom strežnikov NTP. Za večjo natančnost izberite naslov strežnikov NTP, ki so blizu vašega geografskega območja. Tukaj uporabljamo “pool.ntp.org”, ki ponuja strežnike po vsem svetu. Če želite izbrati strežnike iz Azije, lahko uporabite »asia.pool.ntp.org«. timeClient prav tako vzame UTC časovni zamik v milisekundah vašega časovnega pasu. Odmik UTC za Indijo je na primer +5: 30, zato ta odmik pretvorimo v milisekundah, kar je enako 5*60*60 +30*60 = 19800.

Območje. UTC časovni zamik (ure in minute). UTC časovni zamik (sekunde)

INDIJA +5: 30 19800

LONDON 0:00. 0

NEW YORK -5: 00 -18000

Prosimo, kopirajte naslednjo kodo in v kodo vnesite svoj wifi in geslo & V kodo vnesite časovni zamik, nato pa jo naložite na svoje plošče esp8266.:

#include "NTPClient.h" #include "ESP8266WiFi.h" // ponuja posebne ESP8266 rutine Wi-Fi, ki jih kličemo za povezavo z omrežjem #include "WiFiUdp.h" // obravnava pošiljanje in sprejemanje paketov UDP

#include "SPI.h" // SPI za povezovanje OLED z NodeMCu

#include "Adafruit_GFX.h"

#include "Adafruit_SSD1306.h"

#define SCREEN_WIDTH 128 // OLED širina zaslona, v slikovnih pikah

#define SCREEN_HEIGHT 64 // Višina zaslona OLED, v slikovnih pikah

#define OLED_RESET -1

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

constchar *ssid = "yourwifissid";

const char *geslo = "yourwifipass";

WiFiUDP ntpUDP;

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

Niz arr_days = {"nedelja", "ponedeljek", "torek", "sreda", "četrtek", "petek", "sobota"};

Niz date_time; // Lahko določite časovno področje strežnika in odmik (v sekundah, se lahko pozneje // spremeni s setTimeOffset ()). Dodatno lahko določite // interval posodabljanja (v milisekundah lahko spremenite s pomočjo setUpdateInterval ()).

void setup ()

{

Serial.begin (115200);

WiFi.begin (ssid, geslo);

medtem ko (WiFi.status ()! = WL_CONNECTED)

{

zamuda (500);

Serial.print (".");

}

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

{

Serial.println (F ("dodelitev SSD1306 ni uspela"));

za (;;); // Ne nadaljuj, zanka za vedno

}

display.clearDisplay ();

display.setTextSize (2); // Nariši besedilo 2X

display.setTextColor (BELO);

display.setCursor (5, 2);

display.println ("DOBRODOŠLI");

display.println ("navodila");

display.println ("Projekt");

display.display ();

zamuda (3000);

timeClient.begin ();

}

void loop ()

{

timeClient.update ();

display.clearDisplay ();

Serial.println (timeClient.getFormattedTime ());

display.setTextSize (2); // Narišemo besedilo 2X

display.setTextColor (MODRA);

display.setCursor (0, 2);

int hh = timeClient.getHours ();

int mm = timeClient.getMinutes ();

int ss = timeClient.getSeconds ();

če (hh> 12)

{

hh = hh-12;

display.print (hh);

display.print (":");

zaslon.tisk (mm);

display.print (":");

display.print (ss);

display.println ("PM");

}

drugače

{

display.print (hh);

display.print (":");

zaslon.tisk (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");

Datum niza = date_time.substring (0, index_date);

Serial.println (datum);

display.println (datum);

display.display ();

// Pokaži začetno besedilo}

6. korak: Pridobite datum in čas

Pridobivanje datuma in ure
Pridobivanje datuma in ure

če ste vse pravilno povezali in kodo tudi pravilno naložili, boste lahko videli svojo uro ntp, ki teče na olednem zaslonu, kot moja, ki teče na olednem zaslonu. Prosimo, da si za ogled ogledate sliko.

Priporočena: