ESP32 NTP Client-Servidor: Obteniu data i hora - Arduino IDE

Esp32 Ntp Client Servidor Obteniu Data I Hora Arduino Ide



ESP32 és una placa d'Internet de les coses (IoT) basada en microcontroladors que es pot connectar amb una àmplia gamma de dispositius. ESP32 s'utilitza àmpliament en projectes basats en IoT.

Treballar amb ESP32 o qualsevol altre temps de microcontrolador és molt important, ja que el temporitzador incorporat no és tan precís, de manera que podem utilitzar un NTP servidor per obtenir temps real i pot emmagatzemar-lo dins d'una variable que es pot utilitzar més tard dins del codi ESP32.

El protocol de temps de xarxa (NTP) utilitza el temps universal coordinat (UTC) que sincronitza el rellotge del sistema amb gran precisió i precisió. En xarxes més petites, NTP ens pot proporcionar rellotges amb una precisió d'1 ms, mentre que xarxes més grans com la LAN (Xarxa d'àrea local) NTP ens pot proporcionar una precisió amb desenes de mil·lisegons a través d'Internet. L'ús d'aquest rellotge precís ESP32 pot executar instruccions en un moment específic.







Aquesta guia conté el contingut següent:



  1. Introducció a NTP (Network Time Protocol)
  2. Configuració del servidor NTP i hora



  3. Impressió en temps real mitjançant la funció printLocalTime().





1: Introducció a NTP (Network Time Protocol)

NTP és un acrònim de N etwork T fer P rotocol és un estàndard utilitzat per sincronitzar l'hora dels dispositius amb la seva zona horària. El protocol d'hora de la xarxa sincronitza l'hora de tots els dispositius de la xarxa amb l'UTC també conegut com a temps universal coordinat.

L'UTC és com el GMT (Greenwich Mean Time), però no canvia i segueix sent igual a tot el món. La idea principal darrere de l'ús de l'UTC és llegir l'hora del NTP servidor i aplicant el desplaçament UTC podem obtenir l'hora local segons la nostra zona horària.



2: Servidor NTP i Configuració de l'hora

Per llegir l'hora del servidor NTP hem de declarar les variables següents dins del codi utilitzant aquestes variables podem obtenir l'hora del servidor NTP.

  • Servidor NTP
  • Desplaçament GMT
  • Offset de llum diürna

2.1: Servidor NTP

Sol·licitarem temps des pool.ntp.org que conté dades horàries mundials al servidor i qualsevol persona pot sol·licitar la seva hora local utilitzant aquest grup. A continuació es mostren alguns altres servidors als quals podem accedir:

Àrea Nom d'amfitrió
A tot el món pool.ntp.org
Àsia asia.pool.ntp.org
Europa europe.pool.ntp.org
Amèrica del nord north-america.pool.ntp.org
Oceania oceania.pool.ntp.org
Sud Amèrica south-america.pool.ntp.org

2.2: compensació GMT

El desplaçament GMT descriu la diferència horària en hores entre la zona horària en què vius i el GMT. Per exemple, si fem servir la zona horària dels EUA, podem configurar-la UTC = -11:00 .

2.3: Offset de llum diürna

Aquí, la compensació de llum diürna és l'horari d'estiu que normalment es pren com a 1 hora. L'horari d'estiu significa avançar el rellotge 1 hora durant l'estiu i tornar-lo a canviar a l'hivern. Aquesta ordre s'utilitza normalment quan s'utilitza una zona horària personalitzada i s'aplica la regla d'estiu.

Com hem tractat els conceptes bàsics del servidor NTP ara comprovarem com podem enviar una sol·licitud al servidor NTP i llegir l'hora local mitjançant ESP32 amb codi IDE d'Arduino.

3: Impressió en temps real mitjançant la funció printLocalTime().

El printLocalTime() funció cridarà a getLocalTime() funció que envia la sol·licitud al servidor NTP i emmagatzema la data i l'hora rebuda dins del informació del temps variable.

3.1: Codi per imprimir en temps real

Enganxeu el codi donat per al servidor de client NTP a l'editor IDE d'Arduino. Connecteu l'ESP32 amb l'ordinador, seleccioneu el port COM i carregueu el codi.

#inclou
#inclou 'time.h'
const char * ssid     = “SUBSTITUÏT_AMB_EL_TEUS_SSID”;
const char * contrasenya = 'REPLACE_WITH_YOUR_PASSWORD';
const char * ntpServer = 'pool.ntp.org' ;
const long  gmtOffset_sec = 18000 ; /* GMT OFFSET + 5 HORARI ( 18000 SEC ) */
const int   daylightOffset_sec = 3600 ; /* 1 compensació d'hora de llum diürna */
void printLocalTime ( )
{
struct tm timeinfo;
si ( ! getLocalTime ( & informació del temps ) ) {
Serial.println ( 'No s'ha pogut obtenir el temps' ) ;
tornar ;
}
Serial.println ( & informació del temps, '%A, %B %d %Y %H:%M:%S' ) ;
}
configuració de buit ( )
{
Serial.begin ( 115200 ) ;
// connectar-se a WiFi
Serial.printf ( 'S'està connectant a %s' , ssid ) ;
WiFi.inici ( ssid, contrasenya ) ;
mentre ( estat.WiFi ( ) ! = WL_CONNECTAT ) {
retard ( 500 ) ;
Impressió.sèria ( '.' ) ;
}
Serial.println ( 'CONNECTAT' ) ;
// init i obteniu el temps
configTime ( gmtOffset_sec, daylightOffset_sec, ntpServer ) ;
printLocalTime ( ) ;
// desconnectar WiFi com això ja no és necessari
WiFi.desconnect(true);
WiFi.mode(WIFI_OFF);
}
bucle buit ()
{
retard (1000);
printLocalTime();
}

El codi va començar per incloure la WiFi i la biblioteca de temps. WiFi La biblioteca ajudarà a connectar ESP32 amb una xarxa mentre temps biblioteca gestionarà la sincronització del servidor NTP.

Després d'això, es defineix el SSID i la contrasenya de la xarxa a la qual es connectarà ESP32. Substituïu la vostra credencial de xarxa aquí. Després d'això hem definit Compensació GMT com 18.000 segons que és (UTC+5 hores). Podeu substituir el vostre propi fus horari UTC aquí. Segueix el enllaç per aconseguir el Compensació GMT per a la teva zona horària.

A més, s'especifica l'adreça del servidor NTP mitjançant l'ordre:

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

Aquesta ordre selecciona automàticament el servidor de temps que us cercarà. Tanmateix, també podem establir una zona horària utilitzant els servidors NTP que s'expliquen a la pàgina Servidor NTP secció.

Al final configurem l'ESP32 com a client NTP i per obtenir data i hora. Per a això hem utilitzat el configTime() funció.

Finalment, utilitzant el printLocalTime() funció, la data i l'hora actuals s'imprimeixen al monitor sèrie. Aquesta funció conté una estructura de temps tm que emmagatzema tota la informació al informació del temps variable.

Les ordres següents representen el informació del temps estructura.

Serial.println ( & informació del temps, '%A, %B %d %Y %H:%M:%S' ) ;

Cada lletra d'estructura de temps es relaciona amb una informació específica:

Especificadors Informació
%A Dia de tornada d'una setmana
%B Mes de tornada
%d Dia de tornada del mes
%Y Torna l'any en curs
%H Torna l'hora actual
%M Torna els minuts actuals
%S Torna els segons actuals

3.2: Sortida

Després de carregar el codi, ESP32 es connectarà amb una xarxa WiFi i enviarà una sol·licitud al servidor NTP per rebre la data i l'hora actuals. La següent sortida es pot veure al monitor sèrie Arduino.

L'hora actual del meu ordinador i l'ESP32 coincideixen.

Hem llegit correctament el temps del servidor NTP utilitzant ESP32 com a client.

Conclusió

El temps és molt important per a aplicacions com ara marcar el temps i executar instruccions en moments específics per generar resultats. Els temporitzadors integrats no són tan precisos, de manera que podem utilitzar un servidor NTP per llegir l'hora i la data actuals. Aquest temps es pot emmagatzemar dins d'una variable per utilitzar-lo dins del nostre codi. Aquesta lliçó ajuda a obtenir l'hora precisa de qualsevol zona horària del món mitjançant ESP32.