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:
- Úvod do NTP (Network Time Protocol)
- Nastavenia servera NTP a času
- 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.