ESP32 NTP klient-server: hankige kuupäev ja kellaaeg – Arduino IDE

Esp32 Ntp Klient Server Hankige Kuupaev Ja Kellaaeg Arduino Ide



ESP32 on mikrokontrolleritel põhinev asjade Interneti (IoT) plaat, mida saab liidestada paljude seadmetega. ESP32 kasutatakse laialdaselt IoT-põhistes projektides.

ESP32 või mõne muu mikrokontrolleri ajaga töötamine on väga oluline, kuna sisseehitatud taimer pole nii täpne, et saaksime kasutada NTP server reaalajas toomiseks ja salvestab selle muutujas, mida saab hiljem ESP32 koodi sees kasutada.

Network Time Protocol (NTP) kasutab koordineeritud universaalaega (UTC), mis sünkroonib süsteemi kella väga täpselt ja täpselt. Väiksemate võrkude puhul võib NTP anda meile 1 ms täpsusega kellad, samas kui suuremates võrkudes, nagu LAN (kohalik võrk), NTP suudab Interneti kaudu anda täpsuse kümnete millisekunditega. Seda täpset kella kasutades saab ESP32 täita juhiseid kindlal ajal.







See juhend sisaldab järgmist sisu:



  1. Sissejuhatus NTP-sse (Network Time Protocol)
  2. NTP-serveri ja aja sätted



  3. Reaalajas printimine funktsiooni printLocalTime() abil





1: Sissejuhatus NTP-sse (Network Time Protocol)

NTP on akronüüm sõnast N võrgustik T tegema P Rotocol on standard, mida kasutatakse seadmete aja sünkroonimiseks nende ajavööndiga. Võrguajaprotokoll sünkroonib kõigi võrguseadmete aja UTC-ga, mida tuntakse ka kui koordineeritud universaalaega.

UTC on nagu GMT (Greenwichi aeg), kuid see ei muutu ja jääb samaks kogu maailmas. UTC kasutamise põhiidee on lugeda kellaaega NTP server ja UTC nihke rakendamisega saame kohaliku aja vastavalt meie ajavööndile.



2: NTP-server ja aja sätted

NTP-serverist aja lugemiseks peame koodi sees deklareerima järgmised muutujad, kasutades neid muutujaid, mida saame aja NTP-serverist.

  • NTP server
  • GMT nihe
  • Päevavalguse nihe

2.1: NTP-server

Aega küsime alates pool.ntp.org mis sisaldab serveris ülemaailmseid ajaandmeid ja igaüks saab seda kogumit kasutades küsida oma kohalikku aega. Järgmised on mõned muud serverid, millele pääseme juurde:

Piirkond Hostinimi
Ülemaailmne pool.ntp.org
Aasia asia.pool.ntp.org
Euroopa europe.pool.ntp.org
Põhja-Ameerika north-america.pool.ntp.org
Okeaania oceania.pool.ntp.org
Lõuna-Ameerika south-america.pool.ntp.org

2.2: GMT nihe

GMT nihe kirjeldab ajavahet tundides teie elatud ajavööndi ja GMT vahel. Näiteks kui kasutame USA ajavööndit, saame selle määrata UTC = -11:00 .

2.3: päevavalguse nihe

Siin on päevavalguse nihe suveaega, mida tavaliselt võetakse kui 1 tund. Suveaeg tähendab, et suvel liigutatakse kella 1 tund edasi ja talvel tagasi. Seda käsku kasutatakse tavaliselt siis, kui kasutatakse kohandatud ajavööndit ja rakendatakse suveaja reeglit.

Kuna oleme käsitlenud NTP-serveri põhitõdesid, kontrollime nüüd, kuidas saame saata päringu NTP-serverile ja lugeda kohalikku aega, kasutades ESP32 koos Arduino IDE koodiga.

3: Reaalajas printimine funktsiooni printLocalTime() abil

The printLocalTime() funktsioon helistab getLocalTime() funktsioon, mis saadab päringu NTP-serverisse ja salvestab vastuvõetud kuupäeva ja kellaaja aja info muutuv.

3.1: kood reaalajas printimiseks

Kleepige antud kood NTP-kliendiserveri jaoks Arduino IDE redaktorisse. Ühendage ESP32 arvutiga, valige COM-port ja laadige kood üles.

#include
#include 'time.h'
konst char * ssid     = 'ASENDA_TEIE_SSID-ga';
konst char * parool = 'RESPLACE_WITH_YOUR_PASSWORD';
konst char * ntpServer = 'pool.ntp.org' ;
const long  gmtOffset_sec = 18000 ; /* GMT OFFSET + 5 TUNNID ( 18000 SEC ) */
const int   daylightOffset_sec = 3600 ; /* 1 tunni päevavalguse nihe */
tühine printLocalTime ( )
{
struct tm timeinfo;
kui ( ! hankige LocalTime ( & aja info ) ) {
Serial.println ( 'Aega ei õnnestunud hankida' ) ;
tagasi ;
}
Serial.println ( & aja info, '%A, %B %d %Y %H:%M:%S' ) ;
}
tühine seadistus ( )
{
Serial.begin ( 115 200 ) ;
// ühendage WiFi-ga
Serial.printf ( 'Ühendamine seadmega %s' , ssid ) ;
WiFi.begin ( ssid, parool ) ;
samal ajal ( WiFi.status ( ) ! = WL_CONNECTED ) {
viivitus ( 500 ) ;
Serial.print ( '.' ) ;
}
Serial.println ( 'ÜHENDATUD' ) ;
// init ja hankige aega
configTime ( gmtOffset_sec, daylightOffset_sec, ntpServer ) ;
printLocalTime ( ) ;
// katkestage WiFi-ühendus nagu seda pole enam vaja
WiFi.disconnect(true);
WiFi.mode(WIFI_OFF);
}
void loop ()
{
viivitus(1000);
printLocalTime();
}

Kood algas WiFi ja ajateegi lisamisega. WiFi raamatukogu aitab ESP32 võrguga ühendada aega teek tegeleb NTP-serveri sünkroonimisega.

Pärast seda määratakse selle võrgu SSID ja parool, millega ESP32 ühendub. Asendage oma võrgumandaat siin. Pärast seda oleme määratlenud GMT nihe 18000 sekundit, mis on (UTC+5 tundi). Siin saate asendada oma ajavööndi UTC. Mine järgi link et saada GMT nihe teie ajavööndi jaoks.

Lisaks määratakse NTP-serveri aadress käsuga:

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

See käsk valib automaatselt ajaserveri, mis teid otsib. Siiski saame määrata ka ajavööndi, kasutades jaotises kirjeldatud NTP-servereid NTP server osa.

Lõpuks konfigureerime ESP32 NTP-kliendiks ning kuupäeva ja kellaaja hankimiseks. Selleks kasutasime configTime() funktsiooni.

Lõpuks, kasutades printLocalTime() funktsiooni, prinditakse praegune kuupäev ja kellaaeg jadamonitorile. See funktsioon sisaldab ajastruktuuri tm mis salvestab kogu teabe aja info muutuv.

Järgmised käsud tähistavad aja info struktuur.

Serial.println ( & aja info, '%A, %B %d %Y %H:%M:%S' ) ;

Iga ajastruktuuri täht on seotud konkreetse teabega:

Täpsustajad Teave
%A Tagastamispäev nädalas
%B Tagastamiskuu
%d Kuu tagastamise päev
%Y Tagasta jooksev aasta
%H Tagasta praegune tund
%M Tagasta praegused minutid
%S Tagastab praegused sekundid

3.2: Väljund

Pärast koodi üleslaadimist loob ESP32 ühenduse WiFi-võrguga ja saadab NTP-serverisse taotluse praeguse kuupäeva ja kellaaja saamiseks. Järgmist väljundit saab näha Arduino jadamonitoril.

Minu arvuti ja ESP32 praegune aeg on sobitatud.

Oleme edukalt lugenud aega NTP serverist, kasutades kliendina ESP32.

Järeldus

Aeg on väga oluline selliste rakenduste jaoks nagu ajatembeldamine ja juhiste täitmine kindlatel kellaaegadel väljundi genereerimiseks. Sisseehitatud taimerid ei ole nii täpsed, seega saame praeguse kellaaja ja kuupäeva lugemiseks kasutada NTP-serverit. Selle aja saab salvestada muutuja sisse, et seda meie koodi sees kasutada. See õppetund aitab ESP32 abil saada täpset aega mis tahes ajavööndi kohta üle maailma.