ESP32 NTP Client-Server: Pridobite datum in uro – Arduino IDE

Esp32 Ntp Client Server Pridobite Datum In Uro Arduino Ide



ESP32 je plošča interneta stvari (IoT) na osnovi mikrokrmilnika, ki jo je mogoče povezati s široko paleto naprav. ESP32 se pogosto uporablja v projektih, ki temeljijo na IoT.

Delo z ESP32 ali katerim koli drugim mikrokrmilniškim časom je zelo pomembno, saj vgrajeni časovnik ni tako natančen, da lahko uporabimo NTP strežnik za pridobivanje realnega časa in ga lahko shrani znotraj spremenljivke, ki jo je mogoče pozneje uporabiti znotraj kode ESP32.

Network Time Protocol (NTP) uporablja koordinirani univerzalni čas (UTC), ki sinhronizira sistemsko uro z veliko natančnostjo in točnostjo. V manjših omrežjih nam lahko NTP zagotovi ure, natančne kot 1 ms, medtem ko lahko večja omrežja, kot je LAN (Local Area Network), NTP prek interneta zagotovijo natančnost na desetine milisekund. Z uporabo te natančne ure lahko ESP32 izvede navodila ob določenem času.







Ta priročnik vsebuje naslednje vsebine:



  1. Uvod v NTP (Network Time Protocol)
  2. Strežnik NTP in nastavitve časa



  3. Tiskanje v realnem času s funkcijo printLocalTime().





1: Uvod v NTP (Network Time Protocol)

NTP je akronim za n omrežje T narediti p rotocol je standard, ki se uporablja za sinhronizacijo časa naprav z njihovim časovnim pasom. Omrežni časovni protokol sinhronizira čas vseh omrežnih naprav z UTC, znan tudi kot koordinirani univerzalni čas.

UTC je kot GMT (srednji čas po Greenwichu), vendar se ne spreminja in ostaja enak po vsem svetu. Glavna ideja za uporabo UTC je branje časa iz NTP strežnik in z uporabo odmika UTC lahko dobimo lokalni čas glede na naš časovni pas.



2: Strežnik NTP in nastavitve časa

Za branje časa s strežnika NTP moramo znotraj kode deklarirati naslednje spremenljivke, z uporabo teh spremenljivk lahko dobimo čas s strežnika NTP.

  • strežnik NTP
  • Odmik od GMT
  • Odmik dnevne svetlobe

2.1: strežnik NTP

Zahtevali bomo čas od pool.ntp.org ki vsebuje podatke o svetovnem času na strežniku in vsakdo lahko zahteva svoj lokalni čas s tem bazenom. Sledi nekaj drugih strežnikov, do katerih lahko dostopamo:

Območje Ime gostitelja
Po vsem svetu pool.ntp.org
Azija asia.pool.ntp.org
Evropi europe.pool.ntp.org
Severna Amerika north-america.pool.ntp.org
Oceanija oceania.pool.ntp.org
Južna Amerika južna amerika.pool.ntp.org

2.2: Odmik od GMT

Odmik GMT opisuje časovno razliko v urah med časovnim pasom, v katerem živite, in GMT. Na primer, če uporabljamo časovni pas ZDA, ga lahko nastavimo na UTC = -11:00 .

2.3: Odmik dnevne svetlobe

Tukaj je zamik poletne svetlobe poletni čas, ki se običajno vzame kot 1 ura. Poletni čas pomeni, da poleti uro premaknemo za 1 uro naprej, pozimi pa nazaj. Ta ukaz se običajno uporablja, če je uporabljen časovni pas po meri in pravilo poletnega časa.

Ker smo zdaj obravnavali osnove strežnika NTP, bomo preverili, kako lahko pošljemo zahtevo strežniku NTP in preberemo lokalni čas z uporabo ESP32 s kodo Arduino IDE.

3: Tiskanje v realnem času s funkcijo printLocalTime().

The printLocalTime() funkcija bo poklicala getLocalTime() funkcijo, ki pošlje zahtevo strežniku NTP in shrani prejeti datum in čas znotraj informacije o času spremenljivka.

3.1: Koda za tiskanje v realnem času

Prilepite podano kodo za odjemalski strežnik NTP v urejevalnik Arduino IDE. Povežite ESP32 z računalnikom, izberite vrata COM in naložite kodo.

#include
#include 'time.h'
const char * ssid     = “ZAMENJAJ_S_VAŠIM_SSID”;
const char * geslo = “ZAMENJAJ_S_SVOJIM_GESLOM”;
const char * ntpServer = 'pool.ntp.org' ;
const long  gmtOffset_sec = 18000 ; /* GMT OFFSET + 5 URE ( 18000 SEC ) */
const int daylightOffset_sec = 3600 ; /* 1 urni odmik dnevne svetlobe */
void printLocalTime ( )
{
struct tm timeinfo;
če ( ! getLocalTime ( & informacije o času ) ) {
Serial.println ( 'Časa ni bilo mogoče pridobiti' ) ;
vrnitev ;
}
Serial.println ( & informacije o času, '%A, %B %d %Y %H:%M:%S' ) ;
}
nastavitev praznine ( )
{
Serial.begin ( 115200 ) ;
// povežite se z WiFi
Serial.printf ( 'Povezovanje z %s' , ssid ) ;
WiFi.begin ( ssid, geslo ) ;
medtem ( WiFi.stanje ( ) ! = WL_POVEZAN ) {
zamuda ( 500 ) ;
Serijski.natis ( '.' ) ;
}
Serial.println ( 'POVEZAN' ) ;
// init in pridobite čas
configTime ( gmtOffset_sec, daylightOffset_sec, ntpServer ) ;
printLocalTime ( ) ;
// prekinite povezavo WiFi kot to ni več potreben
WiFi.disconnect(true);
WiFi.mode(WIFI_OFF);
}
void loop()
{
zamuda (1000);
printLocalTime();
}

Koda se je začela z vključitvijo knjižnice WiFi in časa. Wifi Knjižnica bo medtem pomagala povezati ESP32 z omrežjem čas knjižnica bo skrbela za sinhronizacijo strežnika NTP.

Po tem se določi SSID in geslo omrežja, s katerim se bo ESP32 povezal. Tukaj zamenjajte svojo omrežno poverilnico. Po tem smo definirali GMT odmik kot 18000 sekund, kar je (UTC+5 ur). Tu lahko zamenjate svoj časovni pas UTC. Sledite povezava dobiti GMT odmik za vaš časovni pas.

Poleg tega je naslov strežnika NTP določen z ukazom:

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

Ta ukaz samodejno izbere časovni strežnik, ki vas bo iskal. Vendar pa lahko časovni pas nastavimo tudi z uporabo strežnikov NTP, ki so razloženi v strežnik NTP razdelek.

Na koncu konfiguriramo ESP32 kot odjemalca NTP in pridobimo datum in uro. Za to smo uporabili configTime() funkcijo.

Nazadnje z uporabo printLocalTime() funkcijo, se trenutni datum in ura natisneta na serijski monitor. Ta funkcija vsebuje časovno strukturo tm ki shranjuje vse informacije v informacije o času spremenljivka.

Naslednji ukazi predstavljajo informacije o času struktura.

Serial.println ( & informacije o času, '%A, %B %d %Y %H:%M:%S' ) ;

Vsaka časovna struktura se nanaša na določeno informacijo:

Specifikatorji Informacije
%A Povratni dan v tednu
%B Mesec vračila
%d Povratni dan v mesecu
%Y Vrnitev tekočega leta
%H Vrni trenutno uro
%M Vrni trenutne minute
%S Vrni trenutne sekunde

3.2: Izhod

Po nalaganju kode se bo ESP32 povezal z omrežjem WiFi in poslal zahtevo strežniku NTP za prejemanje trenutnega datuma in ure. Naslednji izhod je viden na serijskem monitorju Arduino.

Trenutni čas na mojem računalniku in ESP32 se ujemata.

Uspešno smo prebrali čas s strežnika NTP z uporabo ESP32 kot odjemalca.

Zaključek

Čas je zelo pomemben za aplikacije, kot sta časovno žigosanje in izvajanje navodil ob določenem času za ustvarjanje izhoda. Vgrajeni časovniki niso tako natančni, zato lahko za branje trenutnega časa in datuma uporabimo strežnik NTP. Ta čas je mogoče shraniti znotraj spremenljivke za uporabo v naši kodi. Ta lekcija pomaga pri pridobivanju natančnega časa v katerem koli časovnem pasu po svetu z uporabo ESP32.