Kazalo:
2025 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2025-01-13 06:58
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
za ta projekt boste potrebovali naslednje stvari:
Esp8266/nodemcu
Oled ssd1306 0,96"
Mostične žice
Ogledna plošča
USB kabel
2. korak: 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
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
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
Č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
č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.