ESP32 NTP klientas-serveris: Gaukite datą ir laiką – Arduino IDE

Esp32 Ntp Klientas Serveris Gaukite Data Ir Laika Arduino Ide



ESP32 yra daiktų interneto (IoT) mikrovaldiklių pagrindu sukurta plokštė, kurią galima sujungti su daugybe įrenginių. ESP32 plačiai naudojamas daiktų internetu projektuose.

Darbas su ESP32 ar bet kuriuo kitu mikrovaldikliu yra labai svarbus, nes įtaisytas laikmatis nėra toks tikslus, todėl galime naudoti NTP serveris, kad gautų realiu laiku ir galėtų jį saugoti kintamajame, kuris vėliau gali būti naudojamas ESP32 kode.

Tinklo laiko protokolas (NTP) naudoja koordinuotąjį universalųjį laiką (UTC), kuris labai tiksliai ir tiksliai sinchronizuoja sistemos laikrodį. Mažesniuose tinkluose NTP gali pateikti 1 ms tikslius laikrodžius, o didesni tinklai, tokie kaip LAN (vietinis tinklas), NTP internete gali pateikti tikslumą dešimčių milisekundžių. Naudodamas šį tikslų laikrodį ESP32 gali vykdyti instrukcijas tam tikru laiku.







Šiame vadove yra toks turinys:



  1. Įvadas į NTP (tinklo laiko protokolą)
  2. NTP serveris ir laiko nustatymai



  3. Spausdinimas realiuoju laiku naudojant printLocalTime() funkciją





1: Įvadas į NTP (tinklo laiko protokolą)

NTP yra akronimas N tinklas T daryti P Rotocol yra standartas, naudojamas sinchronizuoti įrenginių laiką su jų laiko juosta. Tinklo laiko protokolas sinchronizuoja visų tinklo įrenginių laiką su UTC, dar vadinamu koordinuotu pasauliniu laiku.

UTC yra kaip GMT (Grinvičo laikas), tačiau jis nesikeičia ir išlieka toks pat visame pasaulyje. Pagrindinė UTC naudojimo idėja yra nuskaityti laiką iš NTP serverio ir taikydami UTC poslinkį galime gauti vietinį laiką pagal savo laiko juostą.



2: NTP serveris ir laiko nustatymai

Norėdami nuskaityti laiką iš NTP serverio, turime deklaruoti šiuos kintamuosius kode, naudodami šiuos kintamuosius, kuriuos galime gauti iš NTP serverio.

  • NTP serveris
  • GMT poslinkis
  • Dienos šviesos poslinkis

2.1: NTP serveris

Prašysime laiko nuo pool.ntp.org kuriame yra viso pasaulio laiko duomenys serveryje ir kiekvienas gali paprašyti savo vietos laiko naudodamas šį telkinį. Toliau pateikiami keli kiti serveriai, kuriuos galime pasiekti:

Plotas Pagrindinio kompiuterio pavadinimas
Visame pasaulyje pool.ntp.org
Azija asia.pool.ntp.org
Europa europe.pool.ntp.org
Šiaurės Amerika north-america.pool.ntp.org
Okeanija oceania.pool.ntp.org
Pietų Amerika south-america.pool.ntp.org

2.2: GMT poslinkis

GMT poslinkis apibūdina laiko skirtumą valandomis tarp laiko juostos, kurioje gyvenate, iki GMT. Pavyzdžiui, jei naudojame JAV laiko juostą, galime ją nustatyti UTC = -11:00 .

2.3: Dienos šviesos poslinkis

Čia dienos šviesos poslinkis yra vasaros laikas, kuris paprastai laikomas 1 valanda. Vasaros laikas reiškia, kad vasarą laikrodžio rodyklė perkeliama 1 valanda į priekį, o žiemą – atgal. Ši komanda paprastai naudojama, kai naudojama pasirinktinė laiko juosta ir taikoma vasaros laiko taisyklė.

Kadangi apžvelgėme NTP serverio pagrindus, dabar patikrinsime, kaip galime nusiųsti užklausą į NTP serverį ir nuskaityti vietinį laiką naudodami ESP32 su Arduino IDE kodu.

3: spausdinimas realiuoju laiku naudojant funkciją printLocalTime()

The printLocalTime() funkcija iškvies getLocalTime() funkcija, kuri siunčia užklausą į NTP serverį ir išsaugo gautą datą bei laiką informacija apie laiką kintamasis.

3.1: Kodas spausdinti realiuoju laiku

Įklijuokite pateiktą kodą NTP kliento serveriui Arduino IDE redaktoriuje. Prijunkite ESP32 prie kompiuterio, pasirinkite COM prievadą ir įkelkite kodą.

#include
#include 'time.h'
const char * ssid     = 'PAKEISTI_SU_JŪSŲ_SSID';
const char * slaptažodis = 'REPLACE_WITH_YOUR_PASSWORD';
const char * ntpServeris = 'pool.ntp.org' ;
const long  gmtOffset_sec = 18 000 ; /* GMT OFFSET + 5 VALANDOS ( 18 000 SEC ) */
const int   daylightOffset_sec = 3600 ; /* 1 valandos dienos šviesos poslinkis */
void printLocalTime ( )
{
struct tm timeinfo;
jeigu ( ! getLocalTime ( & informacija apie laiką ) ) {
Serial.println ( „Nepavyko gauti laiko“ ) ;
grąžinti ;
}
Serial.println ( & informacija apie laiką, „%A, %B %d %Y %H:%M:%S“ ) ;
}
tuščias nustatymas ( )
{
Serialas.begin ( 115 200 ) ;
// prisijungti prie WiFi
Serial.printf ( 'Prisijungimas prie %s' , ssid ) ;
WiFi.begin ( ssid, slaptažodis ) ;
kol ( WiFi.status ( ) ! = WL_CONNECTED ) {
uždelsimas ( 500 ) ;
Serial.print ( '.' ) ;
}
Serial.println ( „PRISIJUNGTA“ ) ;
// init ir gaukite laikas
configTime ( gmtOffset_sec, daylightOffset_sec, ntpServer ) ;
printLocalTime ( ) ;
// atjunkite WiFi kaip tai nebereikalinga
WiFi.atjungti(tiesa);
WiFi.mode(WIFI_OFF);
}
void loop ()
{
delsimas (1000);
printLocalTime();
}

Kodas prasidėjo įtraukiant „WiFi“ ir laiko biblioteką. Bevielis internetas biblioteka padės prijungti ESP32 prie tinklo laikas biblioteka tvarkys NTP serverio sinchronizavimą.

Po to nustatomas tinklo, prie kurio prisijungs ESP32, SSID ir slaptažodis. Pakeiskite savo tinklo kredencialus čia. Po to mes apibrėžėme GMT poslinkis kaip 18000 sek., tai yra (UTC+5 val.). Čia galite pakeisti savo laiko juostą UTC. Sekti nuoroda gauti GMT poslinkis jūsų laiko juostai.

Be to, NTP serverio adresas nurodomas naudojant komandą:

const char * ntpServeris = 'pool.ntp.org' ;

Ši komanda automatiškai parenka laiko serverį, kuris jūsų ieškos. Tačiau mes taip pat galime nustatyti laiko juostą naudodami NTP serverius, paaiškintus NTP serveris skyrius.

Pabaigoje sukonfigūruojame ESP32 kaip NTP klientą ir gauname datą bei laiką. Tam mes panaudojome configTime () funkcija.

Galiausiai, naudojant printLocalTime() funkcija, dabartinė data ir laikas atspausdinami serijiniame monitoriuje. Ši funkcija turi laiko struktūrą tm kuri saugo visą informaciją informacija apie laiką kintamasis.

Šios komandos reiškia informacija apie laiką struktūra.

Serial.println ( & informacija apie laiką, „%A, %B %d %Y %H:%M:%S“ ) ;

Kiekviena laiko struktūros raidė yra susijusi su konkrečia informacija:

Specifikacijos Informacija
%A Savaitės grįžimo diena
%B Grįžimo mėnuo
%d Mėnesio grįžimo diena
%Y Grąžinti einamuosius metus
%H Grąžinti esamą valandą
%M Grąžinti dabartines minutes
%S Grąžinti dabartines sekundes

3.2: Išvestis

Įkėlęs kodą ESP32 prisijungs prie WiFi tinklo ir išsiųs užklausą NTP serveriui gauti dabartinę datą ir laiką. Šią išvestį galima pamatyti „Arduino“ serijiniame monitoriuje.

Dabartinis laikas mano kompiuteryje ir ESP32 atitinka.

Sėkmingai nuskaitėme laiką iš NTP serverio naudodami ESP32 kaip klientą.

Išvada

Laikas yra labai svarbus tokioms programoms kaip laiko žymėjimas ir instrukcijų vykdymas tam tikru laiku, kad būtų sukurta produkcija. Integruoti laikmačiai nėra tokie tikslūs, todėl galime naudoti NTP serverį esamam laikui ir datai nuskaityti. Šis laikas gali būti saugomas kintamajame, kurį galima naudoti mūsų kode. Ši pamoka padeda nustatyti tikslų laiką bet kurioje pasaulio laiko juostoje naudojant ESP32.