ESP32 NTP klient-server: Získejte datum a čas – Arduino IDE

Esp32 Ntp Klient Server Ziskejte Datum A Cas Arduino Ide



ESP32 je deska internetu věcí (IoT) založená na mikrokontroléru, kterou lze propojit se širokou škálou zařízení. ESP32 je široce používán v projektech založených na IoT.

Práce s ESP32 nebo jakýmkoli jiným mikrokontrolérem je velmi důležitá, protože vestavěný časovač není tak přesný, takže můžeme použít NTP server pro načtení reálného času a může jej uložit do proměnné, kterou lze později použít v kódu ESP32.

Network Time Protocol (NTP) používá koordinovaný světový čas (UTC), který synchronizuje systémové hodiny s velkou přesností a přesností. Na menších sítích nám NTP může poskytnout hodiny s přesností 1 ms, zatímco větší sítě, jako je LAN (Local Area Network), NTP může poskytovat přesnost s desítkami milisekund přes internet. Pomocí těchto přesných hodin může ESP32 provádět instrukce v konkrétním čase.







Tato příručka obsahuje následující obsah:



  1. Úvod do NTP (Network Time Protocol)
  2. Nastavení NTP serveru a času



  3. Tisk v reálném čase pomocí funkce printLocalTime().





1: Úvod do NTP (Network Time Protocol)

NTP je zkratka pro N síť T dělat P rotocol je standard používaný pro synchronizaci času zařízení s jejich časovou zónou. Síťový časový protokol synchronizuje čas všech síťových zařízení s UTC známým také jako koordinovaný světový čas.

UTC je jako GMT (Greenwich Mean Time), ale nemění se a zůstává stejné po celém světě. Hlavní myšlenkou používání UTC je čtení času z NTP server a použitím offsetu UTC můžeme získat místní čas podle našeho časového pásma.



2: Nastavení serveru NTP a času

Abychom mohli číst čas z NTP serveru, musíme v kódu deklarovat následující proměnné, pomocí kterých můžeme získat čas z NTP serveru.

  • NTP server
  • GMT Offset
  • Posun denního světla

2.1: Server NTP

Požádáme o čas od pool.ntp.org který obsahuje celosvětová časová data na serveru a kdokoli může pomocí tohoto fondu požádat o svůj místní čas. Níže jsou uvedeny některé další servery, ke kterým máme přístup:

Plocha Název hostitele
Celosvětově pool.ntp.org
Asie asie.pool.ntp.org
Evropa europe.pool.ntp.org
Severní Amerika north-america.pool.ntp.org
Oceánie oceania.pool.ntp.org
Jižní Amerika south-america.pool.ntp.org

2.2: GMT Offset

Posun GMT popisuje časový rozdíl v hodinách mezi časovým pásmem, ve kterém žijete, a GMT. Pokud například používáme časové pásmo USA, můžeme jej nastavit na UTC = -11:00 .

2.3: Posun denního světla

Zde je posunem denního světla letní čas, který se obvykle bere jako 1 hodina. Letní čas znamená posunutí hodin o 1 hodinu dopředu v létě a jejich změnu zpět v zimě. Tento příkaz se obvykle používá tam, kde se používá vlastní časové pásmo a platí pravidlo pro letní čas.

Protože jsme nyní probrali základy NTP serveru, zkontrolujeme, jak můžeme odeslat požadavek na NTP server a číst místní čas pomocí ESP32 s kódem Arduino IDE.

3: Tisk v reálném čase pomocí funkce printLocalTime().

The printLocalTime() funkce zavolá getLocalTime() funkce, která odešle požadavek na NTP server a uloží přijaté datum a čas uvnitř časová informace variabilní.

3.1: Kód pro tisk v reálném čase

Vložte daný kód pro klientský server NTP do editoru Arduino IDE. Připojte ESP32 k PC, vyberte COM port a nahrajte kód.

#include
#include 'time.h'
konst char * ssid     = „NAHRADIT_VAŠÍ_SSID“;
konst char * heslo = “NAHRAĎTE_VAŠÍM_HESLEM”;
konst char * ntpServer = 'pool.ntp.org' ;
const long  gmtOffset_sec = 18 000 ; /* GMT OFFSET + 5 HODIN ( 18 000 SEC ) */
const int   daylightOffset_sec = 3600 ; /* 1 hodinový posun denního světla */
void printLocalTime ( )
{
struct tm timeinfo;
-li ( ! getLocalTime ( & informace o čase ) ) {
Serial.println ( 'Nepodařilo se získat čas' ) ;
vrátit se ;
}
Serial.println ( & informace o čase, '%A, %B %d %Y %H:%M:%S' ) ;
}
neplatné nastavení ( )
{
Serial.begin ( 115200 ) ;
// připojit k WiFi
Serial.printf ( 'Připojování k %s' , ssid ) ;
WiFi.začátek ( ssid, heslo ) ;
zatímco ( Stav WiFi ( ) ! = WL_CONNECTED ) {
zpoždění ( 500 ) ;
Sériový.tisk ( '.' ) ;
}
Serial.println ( 'PŘIPOJENO' ) ;
// init a získat čas
configTime ( gmtOffset_sec, daylightOffset_sec, ntpServer ) ;
printLocalTime ( ) ;
// odpojit WiFi tak jako to již není potřeba
WiFi.disconnect(true);
WiFi.mode(WIFI_OFF);
}
void loop()
{
zpoždění(1000);
printLocalTime();
}

Kód začal zahrnutím WiFi a časové knihovny. WiFi knihovna pomůže připojit ESP32 se sítí čas Knihovna se postará o synchronizaci NTP serveru.

Poté je definováno SSID a heslo sítě, ke které se ESP32 připojí. Zde nahraďte své přihlašovací údaje k síti. Poté jsme definovali GMT posun jako 18 000 sekund, což je (UTC + 5 hodin). Zde můžete nahradit své vlastní časové pásmo UTC. Následuj odkaz získat GMT posun pro vaše časové pásmo.

Kromě toho se adresa NTP serveru specifikuje pomocí příkazu:

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

Tento příkaz automaticky vybere časový server, který vás bude hledat. Můžeme však také nastavit časové pásmo pomocí serverů NTP vysvětlených v NTP server sekce.

Nakonec nakonfigurujeme ESP32 jako NTP klienta a získáme datum a čas. K tomu jsme použili configTime() funkce.

Nakonec pomocí printLocalTime() funkce se na sériovém monitoru vytiskne aktuální datum a čas. Tato funkce obsahuje časovou strukturu tm který ukládá všechny informace do informace o čase variabilní.

Následující příkazy představují informace o čase struktura.

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

Každé písmeno časové struktury se vztahuje ke konkrétní informaci:

Specifikátory Informace
%A Den návratu v týdnu
%B Měsíc návratu
%d Den návratu v měsíci
%Y Návrat aktuální rok
%H Vrátit aktuální hodinu
%M Vrátit aktuální minuty
%S Vrátit aktuální sekundy

3.2: Výstup

Po nahrání kódu se ESP32 připojí k WiFi síti a odešle požadavek na NTP server, aby obdržel aktuální datum a čas. Následující výstup lze vidět na sériovém monitoru Arduino.

Aktuální čas na mém PC a ESP32 je shodný.

Úspěšně jsme načetli čas z NTP serveru pomocí ESP32 jako klienta.

Závěr

Čas je velmi důležitý pro aplikace, jako je časové razítko a provádění instrukcí v určitých časech pro generování výstupu. Vestavěné časovače nejsou tak přesné, takže můžeme použít NTP server ke čtení aktuálního času a data. Tento čas lze uložit do proměnné a použít jej v našem kódu. Tato lekce pomáhá získat přesný čas v jakémkoli časovém pásmu po celém světě pomocí ESP32.