ESP32 NTP klient-server: Získajte dátum a čas – Arduino IDE

Esp32 Ntp Klient Server Ziskajte Datum A Cas Arduino Ide



ESP32 je doska internetu vecí (IoT) založená na mikrokontroléri, ktorá môže byť prepojená so širokou škálou zariadení. ESP32 je široko používaný v projektoch založených na IoT.

Práca s ESP32 alebo akýmkoľvek iným časom mikrokontroléra je veľmi dôležitá, pretože vstavaný časovač nie je taký presný, takže môžeme použiť NTP server na načítanie v reálnom čase a môže ho uložiť do premennej, ktorú možno neskôr použiť v kóde ESP32.

Network Time Protocol (NTP) využíva koordinovaný svetový čas (UTC), ktorý synchronizuje systémové hodiny s veľkou presnosťou a presnosťou. Na menších sieťach nám NTP môže poskytnúť hodiny s presnosťou 1 ms, zatiaľ čo väčšie siete ako LAN (Local Area Network) NTP môžu poskytnúť presnosť s desiatkami milisekúnd cez internet. Pomocou týchto presných hodín môže ESP32 vykonávať inštrukcie v konkrétnom čase.







Táto príručka obsahuje nasledujúci obsah:



  1. Úvod do NTP (Network Time Protocol)
  2. Nastavenia servera NTP a času



  3. Tlač v reálnom čase pomocou funkcie printLocalTime().





1: Úvod do NTP (Network Time Protocol)

NTP je skratka pre N sieť T robiť P rotocol je štandard používaný na synchronizáciu času zariadení s ich časovým pásmom. Sieťový časový protokol synchronizuje čas všetkých sieťových zariadení s UTC známym aj ako koordinovaný svetový čas.

UTC je ako GMT (Greenwich Mean Time), ale nemení sa a zostáva rovnaké na celom svete. Hlavnou myšlienkou používania UTC je čítanie času z NTP server a použitím posunu UTC môžeme získať miestny čas podľa nášho časového pásma.



2: Nastavenia servera NTP a času

Na čítanie času z NTP servera musíme deklarovať nasledujúce premenné v kóde pomocou týchto premenných môžeme získať čas z NTP servera.

  • NTP server
  • GMT Offset
  • Posun denného svetla

2.1: Server NTP

Požiadame o čas od pool.ntp.org ktorý obsahuje celosvetové časové údaje na serveri a ktokoľvek môže požiadať o svoj miestny čas pomocou tohto fondu. Nasledujú niektoré ďalšie servery, ku ktorým máme prístup:

Oblasť Meno hosťa
celosvetovo pool.ntp.org
Ázie Asia.pool.ntp.org
Európe europe.pool.ntp.org
Severná Amerika north-america.pool.ntp.org
Oceánia oceania.pool.ntp.org
Južná Amerika south-america.pool.ntp.org

2.2: GMT Offset

Posun GMT popisuje časový rozdiel v hodinách medzi časovým pásmom, v ktorom žijete, a GMT. Napríklad, ak používame časové pásmo USA, môžeme ho nastaviť na UTC = -11:00 .

2.3: Posun denného svetla

Posun denného svetla je tu letný čas, ktorý sa zvyčajne berie ako 1 hodina. Letný čas znamená posunutie hodín o 1 hodinu dopredu počas leta a ich zmenu späť v zime. Tento príkaz sa zvyčajne používa tam, kde sa používa vlastné časové pásmo a uplatňuje sa pravidlo letného času.

Keďže sme teraz pokryli základy servera NTP, skontrolujeme, ako môžeme poslať požiadavku na server NTP a prečítať miestny čas pomocou ESP32 s kódom Arduino IDE.

3: Tlač v reálnom čase pomocou funkcie printLocalTime().

The printLocalTime() funkcia zavolá getLocalTime() funkcia, ktorá odošle požiadavku na server NTP a uloží prijatý dátum a čas časová informácia premenlivý.

3.1: Kód na tlač v reálnom čase

Vložte daný kód pre klientsky server NTP do editora Arduino IDE. Pripojte ESP32 k PC, vyberte COM port a nahrajte kód.

#include
#include 'time.h'
const char * ssid     = „NAHRADIŤ_VAŠIM_SSID“;
const char * heslo = „NAHRADIŤ_VAŠIM_HESLOM“;
const char * ntpServer = 'pool.ntp.org' ;
const long  gmtOffset_sec = 18 000 ; /* GMT OFFSET + 5 HODINY ( 18 000 SEC ) */
const int   daylightOffset_sec = 3600 ; /* 1 hodinový posun denného svetla */
void printLocalTime ( )
{
struct tm timeinfo;
ak ( ! getLocalTime ( & časová informácia ) ) {
Serial.println ( 'Nepodarilo sa získať čas' ) ;
vrátiť ;
}
Serial.println ( & časová informácia, '%A, %B %d %Y %H:%M:%S' ) ;
}
neplatné nastavenie ( )
{
Serial.začať ( 115200 ) ;
// pripojiť k WiFi
Serial.printf ( 'Pripája sa k %s' , ssid ) ;
WiFi.začať ( ssid, heslo ) ;
zatiaľ čo ( Stav WiFi ( ) ! = WL_CONNECTED ) {
meškanie ( 500 ) ;
Sériová.tlač ( '.' ) ;
}
Serial.println ( 'PRIPOJENÉ' ) ;
// init a získajte čas
configTime ( gmtOffset_sec, daylightOffset_sec, ntpServer ) ;
printLocalTime ( ) ;
// odpojiť WiFi ako to už nie je potrebný
WiFi.disconnect(true);
WiFi.mode(WIFI_OFF);
}
void loop()
{
oneskorenie(1000);
printLocalTime();
}

Kód začal zahrnutím WiFi a časovej knižnice. WiFi knižnica pomôže pripojiť ESP32 k sieti čas Knižnica sa postará o synchronizáciu NTP servera.

Potom je definované SSID a heslo siete, ku ktorej sa ESP32 pripojí. Tu nahraďte svoje sieťové poverenia. Potom sme definovali GMT posun ako 18 000 sekúnd, čo je (UTC + 5 hodín). Tu môžete nahradiť svoje vlastné časové pásmo UTC. Nasleduj odkaz získať GMT posun pre vaše časové pásmo.

Okrem toho sa adresa NTP servera špecifikuje pomocou príkazu:

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

Tento príkaz automaticky vyberie časový server, ktorý vás vyhľadá. Môžeme však nastaviť aj časové pásmo pomocou serverov NTP vysvetlených v NTP server oddiele.

Nakoniec nakonfigurujeme ESP32 ako NTP klienta a získame dátum a čas. Na to sme použili configTime() funkciu.

Nakoniec pomocou printLocalTime() Aktuálny dátum a čas sa vytlačí na sériovom monitore. Táto funkcia obsahuje časovú štruktúru tm ktorý ukladá všetky informácie v časová informácia premenlivý.

Nasledujúce príkazy predstavujú časová informácia štruktúru.

Serial.println ( & časová informácia, '%A, %B %d %Y %H:%M:%S' ) ;

Každá štruktúra časového písmena sa vzťahuje na konkrétnu informáciu:

Špecifikátory Informácie
%A Deň návratu v týždni
%B Mesiac návratu
%d Deň návratu v mesiaci
%Y Návrat aktuálny rok
%H Vrátiť aktuálnu hodinu
%M Vrátiť aktuálne minúty
%S Vrátiť aktuálne sekundy

3.2: Výstup

Po nahraní kódu sa ESP32 pripojí k WiFi sieti a odošle požiadavku na NTP server, aby dostal aktuálny dátum a čas. Nasledujúci výstup je možné vidieť na sériovom monitore Arduino.

Aktuálny čas na mojom PC a ESP32 je zhodný.

Úspešne sme načítali čas z NTP servera pomocou ESP32 ako klienta.

Záver

Čas je veľmi dôležitý pre aplikácie, ako je časové označovanie a vykonávanie pokynov v špecifických časoch na generovanie výstupu. Vstavané časovače nie sú také presné, takže na čítanie aktuálneho času a dátumu môžeme použiť server NTP. Tento čas môže byť uložený v premennej na použitie v našom kóde. Táto lekcia pomáha získať presný čas v akomkoľvek časovom pásme na celom svete pomocou ESP32.