ESP32 NTP klijent-poslužitelj: Dohvaćanje datuma i vremena – Arduino IDE

Esp32 Ntp Klijent Posluzitelj Dohvacanje Datuma I Vremena Arduino Ide



ESP32 je ploča interneta stvari (IoT) temeljena na mikrokontroleru koja se može povezati sa širokim rasponom uređaja. ESP32 naširoko se koristi u projektima temeljenim na IoT-u.

Rad s ESP32 ili bilo kojim drugim vremenom mikrokontrolera vrlo je važan jer ugrađeni mjerač vremena nije tako precizan pa možemo koristiti NTP poslužitelj za dohvaćanje stvarnog vremena i može ga pohraniti unutar varijable koja se kasnije može koristiti unutar ESP32 koda.

Network Time Protocol (NTP) koristi koordinirano univerzalno vrijeme (UTC) koje sinkronizira sistemski sat s velikom preciznošću i točnošću. Na manjim mrežama NTP nam može pružiti satove točne do 1 ms, dok veće mreže kao što je LAN (Local Area Network) NTP može dati točnost s desecima milisekundi preko interneta. Korištenjem ovog preciznog sata ESP32 može izvršavati upute u određeno vrijeme.







Ovaj vodič sadrži sljedeće sadržaje:



  1. Uvod u NTP (Network Time Protocol)
  2. NTP poslužitelj i postavke vremena



  3. Ispis u stvarnom vremenu pomoću funkcije printLocalTime().





1: Uvod u NTP (Network Time Protocol)

NTP je akronim od N mreža T napraviti P rotocol je standard koji se koristi za sinkronizaciju vremena uređaja s njihovom vremenskom zonom. Mrežni vremenski protokol sinkronizira vrijeme svih mrežnih uređaja s UTC-om također poznatim kao koordinirano univerzalno vrijeme.

UTC je kao GMT (srednje vrijeme po Greenwichu), ali se ne mijenja i ostaje isti u cijelom svijetu. Glavna ideja iza korištenja UTC-a je čitanje vremena iz NTP poslužitelja i primjenom UTC offseta možemo dobiti lokalno vrijeme prema našoj vremenskoj zoni.



2: NTP poslužitelj i postavke vremena

Za čitanje vremena s NTP poslužitelja moramo deklarirati sljedeće varijable unutar koda pomoću ovih varijabli možemo dobiti vrijeme s NTP poslužitelja.

  • NTP poslužitelj
  • GMT pomak
  • Odmak dnevnog svjetla

2.1: NTP poslužitelj

Zatražit ćemo vrijeme od pool.ntp.org koji sadrži podatke o svjetskom vremenu na poslužitelju i svatko može zatražiti svoje lokalno vrijeme koristeći ovaj skup. Slijede neki drugi poslužitelji kojima možemo pristupiti:

Površina Naziv hosta
Širom svijeta pool.ntp.org
Azija asia.pool.ntp.org
Europa europe.pool.ntp.org
Sjeverna Amerika sjeverna amerika.pool.ntp.org
Oceanija oceania.pool.ntp.org
Južna Amerika južna amerika.pool.ntp.org

2.2: GMT pomak

GMT pomak opisuje vremensku razliku u satima između vremenske zone u kojoj živite i GMT-a. Na primjer, ako koristimo vremensku zonu SAD-a, možemo je postaviti na UTC = -11:00 .

2.3: Pomak dnevnog svjetla

Ovdje je pomak ljetnog svjetla ljetno računanje vremena koje se obično uzima kao 1 sat. Ljetno računanje vremena znači pomicanje sata 1 sat unaprijed tijekom ljeta i vraćanje unazad zimi. Ova se naredba obično koristi kada se koristi prilagođena vremenska zona i kada se primjenjuje pravilo ljetnog računanja vremena.

Kako smo pokrili osnove NTP poslužitelja sada ćemo provjeriti kako možemo poslati zahtjev NTP poslužitelju i očitati lokalno vrijeme koristeći ESP32 s Arduino IDE kodom.

3: Ispis u stvarnom vremenu pomoću funkcije printLocalTime().

The printLocalTime() funkcija će pozvati getLocalTime() funkcija koja šalje zahtjev NTP poslužitelju i pohranjuje primljeni datum i vrijeme unutar timeinfo varijabla.

3.1: Kod za ispis u stvarnom vremenu

Zalijepite navedeni kod za NTP klijentski poslužitelj u Arduino IDE editor. Povežite ESP32 s računalom, odaberite COM port i prenesite kod.

#include
#uključi 'vrijeme.h'
const char * ssid     = “ZAMIJENI_VAŠIM_SSID-om”;
const char * lozinka = “ZAMIJENI_VAŠOM_LOZINKOM”;
const char * ntpServer = 'pool.ntp.org' ;
const long  gmtOffset_sec = 18000 ; /* GMT OFFSET + 5 SATI ( 18000 SEK ) */
const int   daylightOffset_sec = 3600 ; /* 1 sat dnevnog svjetla offset */
void printLocalTime ( )
{
struct tm timeinfo;
ako ( ! getLocalTime ( i informacija o vremenu ) ) {
Serijski.println ( 'Nije uspjelo dobivanje vremena' ) ;
povratak ;
}
Serijski.println ( i informacija o vremenu, '%A, %B %d %Y %H:%M:%S' ) ;
}
void setup ( )
{
Serijski.početi ( 115200 ) ;
// spojiti na WiFi
Serijski.printf ( 'Povezivanje na %s' , ssid ) ;
WiFi.početak ( ssid, lozinka ) ;
dok ( WiFi.status ( ) ! = WL_POVEZAN ) {
odgoditi ( 500 ) ;
Serijski.ispis ( '.' ) ;
}
Serijski.println ( 'POVEZAN' ) ;
// pokrenuti i dobiti vrijeme
configTime ( gmtOffset_sec, daylightOffset_sec, ntpServer ) ;
printLocalTime ( ) ;
// odspojite WiFi kao to više nije potrebno
WiFi.disconnect(true);
WiFi.mode(WIFI_OFF);
}
void petlja()
{
kašnjenje (1000);
printLocalTime();
}

Kôd je započeo uključivanjem WiFi-a i knjižnice vremena. WiFi knjižnica pomoći će povezati ESP32 s mrežom dok vrijeme biblioteka će upravljati sinkronizacijom NTP poslužitelja.

Nakon toga definira se SSID i lozinka mreže na koju će se ESP32 spojiti. Ovdje zamijenite svoju mrežnu vjerodajnicu. Nakon toga smo definirali GMT pomak kao 18000 sekundi što je (UTC+5 sati). Ovdje možete zamijeniti svoju vremensku zonu UTC. Prati veza dobiti GMT pomak za vašu vremensku zonu.

Dodatno se adresa NTP poslužitelja navodi pomoću naredbe:

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

Ova naredba automatski odabire vremenski poslužitelj koji će vas pretraživati. Međutim, također možemo postaviti vremensku zonu pomoću NTP poslužitelja objašnjenih u NTP poslužitelj odjeljak.

Na kraju konfiguriramo ESP32 kao NTP klijent i dobivamo datum i vrijeme. Za to smo koristili configTime() funkcija.

Na kraju, korištenjem printLocalTime() funkciju, trenutni datum i vrijeme ispisuju se na serijskom monitoru. Ova funkcija sadrži vremensku strukturu tm koji pohranjuje sve informacije u informacija o vremenu varijabla.

Sljedeće naredbe predstavljaju informacija o vremenu struktura.

Serijski.println ( i informacija o vremenu, '%A, %B %d %Y %H:%M:%S' ) ;

Svako slovo vremenske strukture odnosi se na određenu informaciju:

Specifikatori Informacija
%A Dan povratka u tjednu
%B Mjesec povrata
%d Povratni dan u mjesecu
%Y Povratak tekuće godine
%H Vrati trenutni sat
%M Vrati trenutne minute
%S Vrati trenutne sekunde

3.2: Izlaz

Nakon učitavanja koda ESP32 će se povezati s WiFi mrežom i poslati zahtjev NTP poslužitelju za primanje trenutnog datuma i vremena. Sljedeći izlaz može se vidjeti na Arduino serijskom monitoru.

Trenutno vrijeme na mom PC-u i ESP32 su usklađeni.

Uspješno smo očitali vrijeme s NTP poslužitelja koristeći ESP32 kao klijenta.

Zaključak

Vrijeme je vrlo važno za aplikacije kao što su vremensko žigosanje i izvršavanje instrukcija u određeno vrijeme za generiranje izlaza. Ugrađeni mjerači vremena nisu toliko precizni, pa možemo koristiti NTP poslužitelj za očitavanje trenutnog vremena i datuma. Ovo vrijeme može biti pohranjeno unutar varijable za korištenje unutar našeg koda. Ova lekcija pomaže u dobivanju točnog vremena u bilo kojoj vremenskoj zoni diljem svijeta pomoću ESP32.