Turinys:

Interneto laikrodis: rodyti datą ir laiką naudojant OLED naudojant ESP8266 „NodeMCU“su NTP protokolu: 6 žingsniai
Interneto laikrodis: rodyti datą ir laiką naudojant OLED naudojant ESP8266 „NodeMCU“su NTP protokolu: 6 žingsniai

Video: Interneto laikrodis: rodyti datą ir laiką naudojant OLED naudojant ESP8266 „NodeMCU“su NTP protokolu: 6 žingsniai

Video: Interneto laikrodis: rodyti datą ir laiką naudojant OLED naudojant ESP8266 „NodeMCU“su NTP protokolu: 6 žingsniai
Video: Using Micro SD Card and Data logging with Arduino | Arduino Step by Step Course Lesson 106 2024, Liepa
Anonim
Interneto laikrodis: rodyti datą ir laiką naudojant OLED naudojant ESP8266 „NodeMCU“su NTP protokolu
Interneto laikrodis: rodyti datą ir laiką naudojant OLED naudojant ESP8266 „NodeMCU“su NTP protokolu

Sveiki, vaikinai, šioje instrukcijoje mes sukursime interneto laikrodį, kuris gaus laiko iš interneto, todėl šiam projektui vykdyti nereikės jokio RTC, jam reikės tik veikiančio interneto ryšio

Šiam projektui jums reikia esp8266, kuris turės „Wi -Fi“prieigą prie interneto ir ekraną, kuriame bus rodomas laikas, o esp8266 nuskaitys laiką iš interneto naudojant NTP protokolą, ntp reiškia tinklo laiko protokolą, taigi iš esmės yra ntp serveriai žiniatinklyje, kurie naudojami kompiuterių laikrodžiams sinchronizuoti, ir mes naudosime šiuos serverius, kad gautume laiko savo projektui.

1 žingsnis: reikalingi dalykai

Daiktai, kurių jums reikia
Daiktai, kurių jums reikia
Daiktai, kurių jums reikia
Daiktai, kurių jums reikia
Daiktai, kurių jums reikia
Daiktai, kurių jums reikia

šiam projektui jums reikės šių dalykų:

Esp8266/nodemcu

Oled ssd1306 0,96"

Jumperio laidai

Bandomoji Lenta

USB kabelis

2 žingsnis: jungtys

Sujungimai
Sujungimai

Šis 4 kontaktų OLED ekranas palaiko ryšį su ESP8266 moduliu, naudodamas I2C protokolą, žemiau yra schema ir jungčių lentelė, skirta OLED I2C kaiščiams sujungti su „NodeMCU“, kad būtų rodomas interneto laikas.

3 veiksmas: atsisiųskite bibliotekas

Atsisiųsti bibliotekos
Atsisiųsti bibliotekos
Atsisiųsti bibliotekos
Atsisiųsti bibliotekos

Įsitikinkite, kad į „Arduino ide“atsisiuntėte SD1306 bibliotekas, kaip parodyta paveikslėlyje, ir įsitikinkite, kad taip pat turite „Adafruit GFX“biblioteką, jei ne, įdiekite šias dvi bibliotekas.

Savo „Arduino IDE“eikite į bibliotekų tvarkytuvę ir ieškokite NTP ir tiesiog atsisiųskite NTP kliento biblioteką, kaip aš atsisiunčiau, daugiau pagalbos ieškokite paveikslėlyje.

4 žingsnis: kas yra NTP

Kas yra NTP
Kas yra NTP

NTP yra vienas seniausių tinklų interneto protokolo (IP), skirtas sinchronizuoti laikrodžius tarp kompiuterių tinklų. Jį sukūrė Davidas L. Millsas iš Delavero universiteto 1981 m. Šis protokolas gali būti naudojamas daugeliui tinklų sinchronizuoti su koordinuotu pasauliniu laiku (UTC) per kelias milisekundes. UTC yra pagrindinis laiko standartas, pagal kurį pasaulis reguliuoja laikrodį ir laiką. UTC nesikeičia ir skiriasi įvairiose geografinėse vietose. NTP naudoja UTC kaip laiko atskaitą ir suteikia tikslų ir sinchronizuotą laiką internete.

NTP veikia pagal hierarchinį kliento-serverio modelį. Aukščiausiame modelyje yra orientaciniai laikrodžiai, žinomi kaip „stratum0“, tokie kaip atominiai laikrodžiai, radijo bangos, GPS, GSM, kurie gauna laiką iš palydovo. Serveriai, gaunantys laiką iš stratum0, vadinami „stratum1“, o serveriai, gaunantys laiką iš stratum1, - „stratum2“ir pan. Tai tęsiasi ir po kiekvieno etapo laiko tikslumas mažėja. NTP automatiškai pasirenka geriausią iš kelių galimų sinchronizuoti laiko šaltinių, todėl protokolas yra atsparus gedimams. Taigi šiame projekte mes gauname laiko iš NTP serverio, naudojant ESP8266 NodeMCU, ir parodome jį OLED ekrane. Tokio paties tipo interneto laikrodis yra sukurtas naudojant ankstesnėje pamokoje pateiktą ESP32.

5 žingsnis: kodavimo dalis

Kodavimo dalis
Kodavimo dalis

Norėdami paprašyti datos ir laiko, inicijuokite laiko klientą su NTP serverių adresu. Kad būtų tiksliau, pasirinkite NTP serverių, esančių arti jūsų geografinės vietovės, adresą. Čia mes naudojame „pool.ntp.org“, kuris suteikia serverius iš viso pasaulio. Jei norite pasirinkti serverius iš Azijos, galite naudoti „asia.pool.ntp.org“. „timeClient“taip pat skaičiuoja UTC laiko poslinkį jūsų laiko juostos milisekundėmis. Pavyzdžiui, Indijos UTC poslinkis yra +5: 30, todėl mes konvertuojame šį poslinkį milisekundėmis, kuris yra lygus 5*60*60 +30*60 = 19800.

Plotas. UTC laiko poslinkis (valandos ir minutės). UTC laiko poslinkis (sekundėmis)

INDIJA +5: 30 19800

LONDONAS 0:00. 0

Niujorkas -5: 00-18000

Nukopijuokite šį kodą ir įveskite savo „wifi“ir slaptažodį į kodą ir įveskite laiko poslinkį į kodą, tada įkelkite jį į savo esp8266 plokštes.:

#include "NTPClient.h" #include "ESP8266WiFi.h" // teikia ESP8266 specifines "Wi-Fi" procedūras, kurias mes kviečiame prisijungti prie tinklo #include "WiFiUdp.h" // tvarko UDP paketų siuntimą ir gavimą

#include "SPI.h" // SPI, skirtas OLED sąsajai su "NodeMCu"

#include "Adafruit_GFX.h"

#include "Adafruit_SSD1306.h"

#define SCREEN_WIDTH 128 // OLED ekrano plotis, pikseliais

#define SCREEN_HEIGHT 64 // OLED ekrano aukštis, pikseliais

#define OLED_RESET -1

„Adafruit_SSD1306“ekranas (SCREEN_WIDTH, SCREEN_HEIGHT ir viela, OLED_RESET);

constchar *ssid = "tavo žmona";

const char *slaptažodis = "yourwifipass";

WiFiUDP ntpUDP;

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

Stygos arr_days = {"sekmadienis", "pirmadienis", "antradienis", "trečiadienis", "ketvirtadienis", "penktadienis", "šeštadienis"};

Eilutės data_laikas; // Galite nurodyti laiko serverio telkinį ir poslinkį (sekundėmis, galima // pakeisti vėliau naudojant setTimeOffset ()). Papildomai galite nurodyti // atnaujinimo intervalą (milisekundėmis, galima pakeisti naudojant setUpdateInterval ()).

negaliojanti sąranka ()

{

Serial.begin (115200);

WiFi.begin (ssid, slaptažodis);

o (WiFi.status ()! = WL_CONNECTED)

{

vėlavimas (500);

Serijinis atspaudas (".");

}

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

{

Serial.println (F ("SSD1306 paskirstymas nepavyko"));

dėl(;;); // Negalima tęsti, kilpoti amžinai

}

display.clearDisplay ();

display.setTextSize (2); // Pieškite 2X masto tekstą

display.setTextColor (BALTA);

display.setCursor (5, 2);

display.println ("SVEIKINAME");

display.println („nurodomosios medžiagos“);

display.println („Projektas“);

display.display ();

vėlavimas (3000);

timeClient.begin ();

}

tuštumos kilpa ()

{

timeClient.update ();

display.clearDisplay ();

Serial.println (timeClient.getFormattedTime ());

display.setTextSize (2); // Pieškite 2X masto tekstą

display.setTextColor (MĖLYNA);

display.setCursor (0, 2);

int hh = timeClient.getHours ();

int mm = timeClient.getMinutes ();

int ss = timeClient.getSeconds ();

jei (hh> 12)

{

hh = hh-12;

ekranas.spaudas (hh);

display.print (":");

ekranas.spaudas (mm);

display.print (":");

ekranas.spaudas (ss);

display.println ("PM");

}

Kitas

{

ekranas.spaudas (hh);

display.print (":");

ekranas.spaudas (mm);

display.print (":");

ekranas.spaudas (ss);

display.println („AM“);

}

int day = timeClient.getDay ();

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

date_time = timeClient.getFormattedDate ();

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

Eilutės data = date_time.substring (0, index_date);

Serial.println (data);

display.println (data);

display.display ();

// Rodyti pradinį tekstą}

6 veiksmas: nustatykite datą ir laiką

Kaip gauti datą ir laiką
Kaip gauti datą ir laiką

jei viską prijungėte tinkamai ir taip pat tinkamai įkėlėte kodą, tuomet pamatysite, kad jūsų ntp laikrodis veikia esamame ekrane, kaip ir mano, veikiantis ekrane. Norėdami gauti išvestį, žiūrėkite paveikslėlį.

Rekomenduojamas: