ESP32 NTP Client-Server: Hent dato og tid – Arduino IDE

Esp32 Ntp Client Server Hent Dato Og Tid Arduino Ide



ESP32 er et mikrocontroller-baseret Internet of Things (IoT)-kort, der kan forbindes med en lang række enheder. ESP32 er meget brugt i IoT-baserede projekter.

Det er meget vigtigt at arbejde med ESP32 eller enhver anden mikrocontrollertid, da den indbyggede timer ikke er så nøjagtig, så vi kan bruge en NTP server til at hente realtid og kan gemme den inde i en variabel, der kan bruges senere i ESP32-koden.

Network Time Protocol (NTP) bruger UTC (Coordinated Universal Time), der synkroniserer systemuret med stor præcision og nøjagtighed. På mindre netværk kan NTP give os ure så nøjagtige som 1 ms, mens større netværk som LAN (Local Area Network) NTP kan give nøjagtighed med titusinder af millisekunder over internettet. Ved at bruge dette nøjagtige ur kan ESP32 udføre instruktioner på et bestemt tidspunkt.







Denne vejledning indeholder følgende indhold:



  1. Introduktion til NTP (Network Time Protocol)
  2. NTP-server og tidsindstillinger



  3. Udskrivning i realtid ved hjælp af printLocalTime()-funktionen





1: Introduktion til NTP (Network Time Protocol)

NTP er et akronym af N netværk T at gøre P rotocol er en standard, der bruges til at synkronisere enheders tid med deres tidszone. Netværkstidsprotokollen synkroniserer tiden for alle netværksenheder med UTC, også kendt som Coordinated Universal Time.

UTC er ligesom GMT (Greenwich Mean Time), men det ændrer sig ikke og forbliver det samme over hele verden. Hovedideen bag at bruge UTC er at læse tiden fra NTP server og ved at anvende UTC offset kan vi få lokal tid i henhold til vores tidszone.



2: NTP-server og tidsindstillinger

For at læse tiden fra NTP-serveren skal vi erklære følgende variabler inde i kode ved hjælp af disse variabler, vi kan få tiden fra NTP-serveren.

  • NTP-server
  • GMT offset
  • Dagslys offset

2.1: NTP-server

Vi vil anmode om tid fra kl pool.ntp.org som indeholder verdensomspændende tidsdata på serveren, og enhver kan anmode om deres lokale tid ved hjælp af denne pulje. Følgende er nogle andre servere, som vi kan få adgang til:

Areal Værtsnavn
I hele verden pool.ntp.org
Asien asia.pool.ntp.org
Europa europe.pool.ntp.org
Nordamerika north-america.pool.ntp.org
Oceanien oceania.pool.ntp.org
Sydamerika south-america.pool.ntp.org

2.2: GMT Offset

GMT-forskydningen beskriver tidsforskellen i timer mellem den tidszone, du bor, og GMT. For eksempel, hvis vi bruger tidszonen i USA, kan vi indstille den til UTC = -11:00 .

2.3: Dagslysforskydning

Her er dagslysforskydningen den sommertid, som normalt tages som 1 time. Sommertid betyder at flytte uret 1 time frem om sommeren og skifte det tilbage igen om vinteren. Denne kommando bruges normalt, hvor der bruges en brugerdefineret tidszone, og der anvendes sommertid.

Da vi har dækket det grundlæggende i NTP-serveren nu, vil vi kontrollere, hvordan vi kan sende en anmodning til NTP-serveren og læse den lokale tid ved hjælp af ESP32 med Arduino IDE-kode.

3: Udskrivning i realtid ved hjælp af printLocalTime()-funktionen

Det printLocalTime() funktionen vil kalde getLocalTime() funktion, der sender anmodningen til NTP-serveren og gemmer den modtagne dato og klokkeslæt inde i tid info variabel.

3.1: Kode til udskrivning i realtid

Indsæt givet kode til NTP-klientserver i Arduino IDE-editor. Forbind ESP32 med pc, vælg COM-porten og upload kode.

#include
#inkluder 'tid.h'
konst char * ssid     = 'REPLACE_WITH_YOUR_SSID';
konst char * adgangskode = 'REPLACE_WITH_YOUR_PASSWORD';
konst char * ntpServer = 'pool.ntp.org' ;
const long  gmtOffset_sec = 18.000 ; /* GMT OFFSET + 5 TIMER ( 18.000 SEC ) */
const int   daylightOffset_sec = 3600 ; /* 1 time dagslys offset */
ugyldig printLocalTime ( )
{
struct tm timeinfo;
hvis ( ! getLocalTime ( & info om tid ) ) {
Serial.println ( 'Det lykkedes ikke at få tid' ) ;
Vend tilbage ;
}
Serial.println ( & info om tid, '%A, %B %d %Y %H:%M:%S' ) ;
}
ugyldig opsætning ( )
{
Serial.begin ( 115200 ) ;
// oprette forbindelse til WiFi
Serial.printf ( 'Opretter forbindelse til %s' , ssid ) ;
WiFi.begynd ( ssid, adgangskode ) ;
mens ( WiFi.status ( ) ! = WL_CONNECTED ) {
forsinke ( 500 ) ;
Seriel.print ( '.' ) ;
}
Serial.println ( 'TILBUNDET' ) ;
// init og få tid
configTime ( gmtOffset_sec, daylightOffset_sec, ntpServer ) ;
printLocalTime ( ) ;
// afbryde WiFi som det er ikke længere nødvendig
WiFi.disconnect(true);
WiFi.tilstand(WIFI_OFF);
}
void loop()
{
forsinkelse(1000);
printLocalTime();
}

Kode startede med at inkludere WiFi og tidsbibliotek. Trådløst internet bibliotek vil hjælpe med at forbinde ESP32 med et netværk, mens tid biblioteket håndterer NTP-serversynkroniseringen.

Derefter defineres SSID og adgangskode for netværket, som ESP32 vil oprette forbindelse til. Udskift dine netværksoplysninger her. Efter det har vi defineret GMT offset som 18000 sek, hvilket er (UTC+5 timer). Du kan erstatte din egen tidszone UTC her. Følg link at få GMT offset for din tidszone.

Derudover angives NTP-serveradresse ved hjælp af kommandoen:

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

Denne kommando vælger automatisk den tidsserver, som vil søge efter dig. Vi kan dog også indstille en tidszone ved hjælp af de NTP-servere, der er forklaret i NTP-server afsnit.

Til sidst konfigurerer vi ESP32 som NTP-klient og for at få dato og klokkeslæt. Til det brugte vi configTime() fungere.

Til sidst ved hjælp af printLocalTime() funktion, udskrives den aktuelle dato og klokkeslæt på den serielle monitor. Denne funktion indeholder en tidsstruktur tm som gemmer alle oplysninger i info om tid variabel.

Følgende kommandoer repræsenterer info om tid struktur.

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

Hvert bogstav af tidsstruktur relaterer til en specifik information:

Specifikatorer Information
%EN Returdag i ugen
%B Retur måned
%d Returdag i måneden
%Y Retur indeværende år
%H Returner nuværende time
%M Returner aktuelle minutter
%S Returner aktuelle sekunder

3.2: Output

Efter upload af kode vil ESP32 oprette forbindelse til et WiFi-netværk og sende en anmodning til NTP-serveren om at modtage den aktuelle dato og klokkeslæt. Følgende output kan ses på Arduino seriel skærm.

Nuværende tid på min pc og ESP32 er matchet.

Vi har med succes læst tid fra NTP-server med ESP32 som klient.

Konklusion

Tid er meget vigtigt for applikationer som tidsstempling og udførelse af instruktioner på bestemte tidspunkter for at generere output. Indbyggede timere er ikke så nøjagtige, så vi kan bruge en NTP-server til at læse det aktuelle klokkeslæt og dato. Denne tid kan gemmes i en variabel til brug i vores kode. Denne lektion hjælper med at få præcis tid for enhver tidszone rundt om i verden ved hjælp af ESP32.