ESP32 NTP Client-Server: Kunin ang Petsa at Oras – Arduino IDE

Esp32 Ntp Client Server Kunin Ang Petsa At Oras Arduino Ide



Ang ESP32 ay isang microcontroller-based na Internet of Things (IoT) board na maaaring i-interface sa isang malawak na hanay ng mga device. Ang ESP32 ay malawakang ginagamit sa mga proyektong nakabatay sa IoT.

Ang pagtatrabaho sa ESP32 o anumang iba pang oras ng microcontroller ay napakahalaga dahil ang inbuilt timer ay hindi ganoon katumpak upang magamit natin ang isang NTP server upang kunin ang real time at maiimbak ito sa loob ng isang variable na magagamit sa ibang pagkakataon sa loob ng ESP32 code.

Ginagamit ng Network Time Protocol (NTP) ang Coordinated Universal Time (UTC) na nagsi-synchronize ng system clock nang may mahusay na katumpakan at katumpakan. Sa mas maliliit na network, mabibigyan kami ng NTP ng mga orasan na kasing-tumpak ng 1 ms habang ang mga malalaking network tulad ng LAN (Local Area Network) ay maaaring magbigay ng katumpakan ang NTP sa sampu-sampung millisecond sa internet. Gamit ang tumpak na orasan na ESP32 ay maaaring magsagawa ng mga tagubilin sa isang partikular na oras.







Ang gabay na ito ay naglalaman ng mga sumusunod na nilalaman:



  1. Panimula sa NTP (Network Time Protocol)
  2. NTP Server at Mga Setting ng Oras



  3. Pag-print ng Real Time Gamit ang printLocalTime() Function





1: Panimula sa NTP (Network Time Protocol)

Ang NTP ay isang acronym ng N etwork T gagawin P Ang rotocol ay isang pamantayang ginagamit para sa pag-synchronize ng oras ng mga device sa kanilang time zone. Sini-synchronize ng network time protocol ang oras ng lahat ng network device sa UTC na kilala rin bilang Coordinated Universal Time.

Ang UTC ay parang GMT (Greenwich Mean Time) ngunit hindi ito nagbabago at nananatiling pareho sa buong mundo. Ang pangunahing ideya sa likod ng paggamit ng UTC ay ang pagbabasa ng oras mula sa NTP server at sa pamamagitan ng paglalapat ng UTC offset makakakuha tayo ng lokal na oras ayon sa ating time zone.



2: NTP Server at Mga Setting ng Oras

Upang basahin ang oras mula sa NTP server kailangan naming ideklara ang mga sumusunod na variable sa loob ng code gamit ang mga variable na ito maaari naming makuha ang oras mula sa NTP server.

  • NTP Server
  • GMT Offset
  • Daylight Offset

2.1: NTP Server

Hihingi kami ng oras mula sa pool.ntp.org na naglalaman ng data sa buong mundo ng oras sa server at sinuman ay maaaring humiling ng kanilang lokal na oras gamit ang pool na ito. Ang mga sumusunod ay ilang iba pang mga server na maaari naming ma-access:

Lugar Hostname
Sa buong mundo pool.ntp.org
Asya asia.pool.ntp.org
Europa europe.pool.ntp.org
Hilagang Amerika north-america.pool.ntp.org
Oceania oceania.pool.ntp.org
Timog Amerika south-america.pool.ntp.org

2.2: GMT Offset

Inilalarawan ng GMT offset ang pagkakaiba ng oras sa mga oras sa pagitan ng time zone na iyong tinitirhan hanggang sa GMT. Halimbawa, kung gagamitin namin ang time zone ng USA, maaari naming itakda ito sa UTC = -11:00 .

2.3: Daylight Offset

Dito ang daylight offset ay ang daylight-saving time na karaniwang kinukuha bilang 1 oras. Ang ibig sabihin ng daylight saving time ay ilipat ang orasan nang 1 oras pasulong sa panahon ng tag-araw at palitan muli ang mga ito sa taglamig. Karaniwang ginagamit ang command na ito kung saan ginagamit ang custom na time zone at inilalapat ang panuntunan sa daylight-saving.

Dahil nasasakupan namin ang mga pangunahing kaalaman ng NTP server ngayon ay susuriin namin kung paano kami makakapagpadala ng kahilingan sa NTP server at basahin ang lokal na oras gamit ang ESP32 na may Arduino IDE code.

3: Pag-print ng Real Time Gamit ang printLocalTime() Function

Ang printLocalTime() tatawagin ng function ang getLocalTime() function na nagpapadala ng kahilingan sa NTP server at nag-iimbak ng natanggap na petsa at oras sa loob ng impormasyon sa oras variable.

3.1: Code para Mag-print ng Real Time

I-paste ang ibinigay na code para sa NTP client server sa Arduino IDE editor. Ikonekta ang ESP32 sa PC, piliin ang COM port at i-upload ang code.

#include
#include 'time.h'
const char * ssid     = “PALITAN_SA_YOUR_SSID”;
const char * password = “PALITAN_SA_YOUR_PASSWORD”;
const char * ntpServer = 'pool.ntp.org' ;
const long  gmtOffset_sec = 18000 ; /* GMT OFFSET + 5 ORAS ( 18000 SINASABI ni SEC ) */
const int   daylightOffset_sec = 3600 ; /* 1 oras na liwanag ng araw offset */
void printLocalTime ( )
{
struct tm timeinfo;
kung ( ! getLocalTime ( & impormasyon sa oras ) ) {
Serial.println ( 'Nabigong makakuha ng oras' ) ;
bumalik ;
}
Serial.println ( & impormasyon sa oras, '%A, %B %d %Y %H:%M:%S' ) ;
}
walang bisang setup ( )
{
Serial.magsimula ( 115200 ) ;
// kumonekta sa WiFi
Serial.printf ( 'Kumokonekta sa %s ' , ssid ) ;
WiFi.simulan ( ssid, password ) ;
habang ( WiFi.status ( ) ! = WL_CONNECTED ) {
pagkaantala ( 500 ) ;
Serial.print ( '.' ) ;
}
Serial.println ( 'KONEKTADO' ) ;
// init at kunin ang oras
configTime ( gmtOffset_sec, daylightOffset_sec, ntpServer ) ;
printLocalTime ( ) ;
// idiskonekta ang WiFi bilang ito hindi na kailangan
WiFi.disconnect(totoo);
WiFi.mode(WIFI_OFF);
}
void loop()
{
pagkaantala(1000);
printLocalTime();
}

Nagsimula ang code sa pamamagitan ng pagsasama ng WiFi at time library. WiFi makakatulong ang library upang ikonekta ang ESP32 sa isang network habang oras hahawakan ng library ang pag-synchronize ng NTP server.

Pagkatapos ay tinukoy ang SSID at password ng network kung saan kumonekta ang ESP32. Palitan ang iyong kredensyal sa network dito. Pagkatapos nito ay tinukoy namin GMT offset bilang 18000 sec na (UTC+5 oras). Maaari mong palitan ang sarili mong time zone na UTC dito. Sundin ang link para makuha ang GMT offset para sa iyong time zone.

Bilang karagdagan, ang NTP server address ay tinukoy gamit ang command:

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

Awtomatikong pinipili ng command na ito ang server ng oras na maghahanap sa iyo. Gayunpaman, maaari rin kaming magtakda ng time zone gamit ang mga NTP server na ipinaliwanag sa NTP Server seksyon.

Sa dulo, i-configure namin ang ESP32 bilang NTP client at para makuha ang petsa at oras. Para diyan ginamit namin ang configTime() function.

Panghuli, gamit ang printLocalTime() function, ang kasalukuyang petsa at oras ay naka-print sa serial monitor. Ang function na ito ay naglalaman ng isang istraktura ng oras tm na nag-iimbak ng lahat ng impormasyon sa impormasyon sa oras variable.

Ang mga sumusunod na utos ay kumakatawan sa impormasyon sa oras istraktura.

Serial.println ( & impormasyon sa oras, '%A, %B %d %Y %H:%M:%S' ) ;

Ang bawat istraktura ng titik ng oras ay nauugnay sa isang tiyak na impormasyon:

Mga Specifier Impormasyon
%A Araw ng pagbabalik ng isang linggo
%B Buwan ng pagbabalik
%d Araw ng pagbabalik ng buwan
%Y Ibalik ang kasalukuyang taon
%H Ibalik ang kasalukuyang oras
%M Ibalik ang kasalukuyang minuto
%S Ibalik ang kasalukuyang mga segundo

3.2: Output

Pagkatapos mag-upload ng code, ang ESP32 ay kumonekta sa isang WiFi network at magpapadala ng kahilingan sa NTP server upang matanggap ang kasalukuyang petsa at oras. Ang sumusunod na output ay makikita sa Arduino serial monitor.

Ang kasalukuyang oras sa aking PC at ESP32 ay tugma.

Matagumpay naming nabasa ang oras mula sa NTP server gamit ang ESP32 bilang kliyente.

Konklusyon

Napakahalaga ng oras para sa mga application tulad ng time stamping at pagpapatupad ng mga tagubilin sa mga partikular na oras upang makabuo ng output. Ang mga inbuilt timer ay hindi masyadong tumpak, kaya maaari naming gamitin ang isang NTP server upang basahin ang kasalukuyang oras at petsa. Ang oras na ito ay maaaring maimbak sa loob ng isang variable upang magamit sa loob ng aming code. Nakakatulong ang araling ito sa pagkuha ng tumpak na oras ng anumang time zone sa buong mundo gamit ang ESP32.