Esptop 10 ntp client -server Få dato og tid - Arduino IDE

Esptop 10 ntp client -server Få dato og tid - Arduino IDE
ESP32 er et mikrokontrollerbasert Internet of Things (IoT) -tavle som kan kobles til et bredt spekter av enheter. ESP32 er mye brukt i IoT -baserte prosjekter.

Å jobbe med ESP32 eller annen mikrokontrollertid er veldig viktig ettersom den innebygde tidtakeren ikke er så nøyaktig, så vi kan bruke en Ntp server for å hente sanntid og kan lagre den inne i en variabel som kan brukes senere i ESP32 -koden.

Network Time Protocol (NTP) bruker den koordinerte universelle tiden (UTC) som synkroniserer systemklokken med stor presisjon og nøyaktighet. På mindre nettverk kan NTP gi oss klokker så nøyaktige som 1 ms, mens større nettverk som LAN (Local Area Network) NTP kan gi nøyaktighet med titall. Bruke denne nøyaktige klokken ESP32 kan utføre instruksjoner på et bestemt tidspunkt.

Denne guiden inneholder følgende innhold:

  • 1: Introduksjon til NTP (Network Time Protocol)
  • 2: NTP -server- og tidsinnstillinger
    • 2.1: NTP -server:
    • 2.2: GMT Offset:
    • 2.3: Dagslysforskyvning
  • 3: Skrive ut sanntid ved hjelp av printlocalTime () -funksjonen
    • 3.1: Kode for å skrive ut sanntid
    • 3.2: Output

1: Introduksjon til NTP (Network Time Protocol)

NTP er et forkortelse av Network Tjeg meg PRotocol er en standard som brukes til å synkronisere enheter med tidssonen. Nettverkstidsprotokollen synkroniserer tiden for alle nettverksenheter med UTC også kjent som koordinert universell tid.

UTC ligner på GMT (Greenwich gjennomsnittlig tid), men det endrer seg ikke og forblir den samme over hele verden. Hovedideen bak å bruke UTC er å lese tid fra Ntp server og ved å bruke UTC -forskyvningen kan vi få lokal tid i henhold til tidssonen vår.

2: NTP -server- og tidsinnstillinger

For å lese tid fra NTP -serveren må vi erklære følgende variabler i koden ved hjelp av disse variablene vi kan få tiden fra NTP -serveren.

  • NTP -server
  • GMT forskyvning
  • Dagslysforskyvning

1: NTP -server

Vi vil be om tid fra basseng.ntp.org som inneholder verdensomspennende tidsdata på serveren, og alle kan be om deres lokale tid ved å bruke dette bassenget. Følgende er noen andre servere som vi har tilgang til:

Område Vertsnavn
Verdensomspennende basseng.ntp.org
Asia Asia.basseng.ntp.org
Europa Europa.basseng.ntp.org
Nord Amerika Nord Amerika.basseng.ntp.org
Oceania Oceania.basseng.ntp.org
Sør Amerika Sør Amerika.basseng.ntp.org

2: GMT -forskyvning

GMT -forskyvningen beskriver tidsforskjellen i timer mellom tidssonen du lever til GMT. For eksempel, hvis vi bruker tidssonen til USA, kan vi sette den til UTC = -11: 00.

3: Dagslysforskyvning

Her er dagslysforskyvningen den dagslysbesparende tiden som vanligvis tas som 1 time. Dagslyssparingstid betyr å flytte klokken 1 time fremover om sommeren og endre dem tilbake om vinteren. Denne kommandoen brukes vanligvis der en tilpasset tidssone brukes og dagslysbesparende regel brukes.

Siden vi har dekket det grunnleggende om NTP -serveren nå, vil vi sjekke hvordan vi kan sende en forespørsel til NTP -serveren og lese den lokale tiden ved å bruke ESP32 med Arduino IDE -kode.

3: Skrive ut sanntid ved hjelp av printlocalTime () -funksjonen

De PrintLocalTime () funksjonen vil kalle getLocalTime () Funksjon som sender forespørselen til NTP -serveren og lagrer mottatt dato og klokkeslett inne i TimeInfo variabel.

1: Kode for å skrive ut sanntid

Lim inn gitt kode for NTP -klientserver i Arduino IDE -redigering. Koble til ESP32 med PC, velg COM -porten og last opp koden.

#inkludere
#include "tid.h "
const char* ssid = "nettverk ssid";
const char* passord = "nettverkspassord";
const char* ntpserver = "basseng.ntp.org ";
const long gmtoffset_sec = 18000; /*GMT Offset +5 timer (18000 sek)*/
const int daylightOffset_sec = 3600; /*1 times dagslys forskjøvet*/
void printLoCalTime ()
struct tm timeInfo;
hvis(!getLoCalTime (& timeInfo))
Serie.Println ("Kunne ikke oppnå tid");
komme tilbake;

Serie.Println (& TimeInfo, " %A, %B %D %Y %H: %M: %S");

void setup ()
Serie.Begin (115200);
// koble til wifi
Serie.printf ("koble til %s", ssid);
Wifi.Begynn (SSID, passord);
mens (wifi.status() != Wl_connected)
forsinkelse (500);
Serie.skrive ut(".");

Serie.println ("tilkoblet");
// init og få tiden
configtime (gmtoffset_sec, daylightoffset_sec, ntpserver);
PrintLocalTime ();
// Koble fra wifi ettersom det ikke lenger er nødvendig
Wifi.koble fra (sant);
Wifi.modus (wifi_off);

void loop ()
forsinkelse (1000);
PrintLocalTime ();

Kode startet med å inkludere WiFi og Time Library. Wifi Bibliotek vil bidra til å koble til ESP32 med et nettverk mens tid Biblioteket vil håndtere NTP -serverens synkronisering.

Etter det er SSID og passord for nettverket som ESP32 vil koble til er definert. Bytt ut nettverksopplysning her. Etter det har vi definert GMT forskyvning som 18000 sekunder som er (UTC+5 timer). Du kan erstatte din egen tidssone UTC her. Følg lenken for å få GMT -forskyvningen for din tidssone.

I tillegg er NTP -serveradresse spesifisert ved hjelp av kommandoen:

const char* ntpserver = "basseng.ntp.org ";

Denne kommandoen velger automatisk tidsserveren som vil søke deg. Vi kan imidlertid også sette en tidssone ved å bruke NTP -serverne som er forklart i NTP -server seksjon.

På slutten konfigurerer vi ESP32 som NTP -klient og for å få dato og tid. For det brukte vi configtime () funksjon.

Til slutt ved å bruke PrintLocalTime () funksjon, gjeldende dato og klokkeslett skrives ut på seriemonitoren. Denne funksjonen inneholder en tidsstruktur tm som lagrer all informasjonen i TimeInfo variabel.

Følgende kommandoer representerer TimeInfo struktur.

Serie.Println (& TimeInfo, " %A, %B %D %Y %H: %M: %S");

Hver bokstavsstruktur knytter seg til en spesifikk informasjon:

Spesifikasjoner Informasjon
%EN Returdagen på en uke
%B Returmåned
%d Returdagen i måneden
%Y Returner inneværende år
%H Returner gjeldende time
%M Returner nåværende minutter
%S Returner gjeldende sekunder

2: Output

Etter å ha lastet opp koden vil ESP32 koble til et WiFi -nettverk og sende en forespørsel til NTP -serveren om å motta gjeldende dato og klokkeslett. Følgende utdata kan sees på Arduino Serial Monitor.

Nåværende tid på PCen min og ESP32 er matchet.

Vi har lest tid fra NTP Server ved å bruke ESP32 som klient.

Konklusjon

Tid er veldig viktig for applikasjoner som tidsstempling og utførelse av instruksjoner på bestemte tidspunkter for å generere utgang. Innbygde tidtakere er ikke så nøyaktige, så vi kan bruke en NTP -server for å lese gjeldende tid og dato. Denne gangen kan lagres i en variabel som skal brukes inne i koden vår. Denne leksjonen hjelper med å få nøyaktig tid på enhver tidssone rundt om i verden ved hjelp av ESP32.