Esptop 10 NTP Client -Server Ottieni data e ora - Arduino IDE

Esptop 10 NTP Client -Server Ottieni data e ora - Arduino IDE
ESP32 è una scheda Internet of Things (IoT) basata su microcontrollori che può essere interfacciata con una vasta gamma di dispositivi. ESP32 è ampiamente utilizzato nei progetti basati su IoT.

Lavorare con ESP32 o qualsiasi altro tempo di microcontrollore è molto importante in quanto il timer integrato non è così accurato, quindi possiamo usare un Ntp server per recuperare in tempo reale e può archiviarlo all'interno di una variabile che può essere utilizzata in seguito all'interno del codice ESP32.

Network Time Protocol (NTP) utilizza il tempo universale coordinato (UTC) che sincronizza l'orologio di sistema con grande precisione e precisione. Su reti più piccole NTP può fornirci orologi accurati di 1 ms mentre reti più grandi come LAN (Area Local Area) NTP possono dare precisione con decine di millisecondi su Internet. L'uso di questo clock accurato ESP32 può eseguire istruzioni in un momento specifico.

Questa guida contiene i seguenti contenuti:

  • 1: Introduzione a NTP (Protocollo temporale di rete)
  • 2: Server NTP e impostazioni di tempo
    • 2.1: server NTP:
    • 2.2: Offset GMT:
    • 2.3: Offset della luce del giorno
  • 3: Stampa in tempo reale utilizzando la funzione printLocalTime ()
    • 3.1: codice da stampare in tempo reale
    • 3.2: output

1: Introduzione a NTP (Protocollo temporale di rete)

NTP è un acronimo di NEtwork TIME PRotocol è uno standard utilizzato per la sincronizzazione dei dispositivi con il loro fuso orario. Il protocollo del tempo di rete sincronizza il tempo di tutti i dispositivi di rete con l'UTC noto anche come tempo universale coordinato.

UTC è simile a GMT (Greenwich Mean Time) ma non cambia e rimane lo stesso in tutto il mondo. L'idea principale alla base dell'utilizzo dell'UTC è leggere i tempi da Ntp server e applicando l'offset UTC possiamo ottenere il tempo locale in base al nostro fuso orario.

2: Server NTP e impostazioni di tempo

Per leggere i tempi dal server NTP dobbiamo dichiarare le seguenti variabili all'interno del codice usando queste variabili, possiamo ottenere il tempo da NTP Server.

  • Server NTP
  • Offset GMT
  • Offset della luce del giorno

1: server NTP

Chiederemo tempo a piscina.ntp.org che contiene dati temporali in tutto il mondo sul server e chiunque può richiedere l'ora locale utilizzando questo pool. Di seguito sono riportati alcuni altri server a cui possiamo accedere:

La zona Nome host
In tutto il mondo piscina.ntp.org
Asia Asia.piscina.ntp.org
Europa Europa.piscina.ntp.org
Nord America Nord America.piscina.ntp.org
Oceania Oceania.piscina.ntp.org
Sud America Sud America.piscina.ntp.org

2: offset GMT

L'offset GMT descrive la differenza di tempo in ore tra il fuso orario che stai vivendo al GMT. Ad esempio, se utilizziamo il fuso orario degli Stati Uniti, possiamo impostarlo su UTC = -11: 00.

3: Offset della luce del giorno

Qui la luce del giorno è il tempo di risparmio diurno che di solito è preso come 1 ora. L'ora legale significa spostare l'orologio 1 ora in avanti durante l'estate e ricostruirli in inverno. Questo comando viene solitamente utilizzato in cui viene utilizzato un fuso orario personalizzato e viene applicata la regola dell'umiliare.

Dato che abbiamo coperto le basi del server NTP ora, controlleremo come possiamo inviare una richiesta al server NTP e leggere l'ora locale utilizzando ESP32 con il codice IDE Arduino.

3: Stampa in tempo reale utilizzando la funzione printLocalTime ()

IL printLocalTime () La funzione chiamerà il getLocalTime () funzione che invia la richiesta al server NTP e memorizza la data e l'ora ricevuta all'interno del timeinfo variabile.

1: codice da stampare in tempo reale

Incolla codice fornito per NTP Client Server in Arduino IDE Editor. Connetti ESP32 con PC, seleziona la porta COM e il codice di caricamento.

#includere
#include ".H"
const char* ssid = "network ssid";
const char* password = "password di rete";
const char* ntpserver = "pool.ntp.org ";
const long gmtoffset_sec = 18000; /*Offset GMT +5 ore (18000 sec)*/
const int DaylightOffset_sec = 3600; /*1 ora Offset della luce del giorno*/
void printLocalTime ()
struct tm timeinfo;
Se(!getLocalTime (& timeInfo))
Seriale.println ("Impossibile ottenere tempo");
ritorno;

Seriale.println (& timeInfo, " %a, %b %d %y %h: %m: %s");

void setup ()
Seriale.Inizia (115200);
// Connettiti al wifi
Seriale.printf ("connessione a %s", ssid);
Wifi.inizio (SSID, password);
mentre (wifi.stato() != Wl_connected)
ritardo (500);
Seriale.stampa(".");

Seriale.println ("connesso");
// init e ottieni il tempo
configtime (gmtoffset_sec, daylightoffset_sec, ntpserver);
printLocalTime ();
// disconnetti il ​​wifi in quanto non è più necessario
Wifi.disconnessione (vero);
Wifi.modalità (wifi_off);

void loop ()
ritardo (1000);
printLocalTime ();

Codice avviato includendo la libreria WiFi e Time. Wifi La libreria aiuterà a connettere ESP32 con una rete mentre tempo La libreria gestirà la sincronizzazione del server NTP.

Dopo di che SSID e password della rete a cui verrà definito ESP32. Sostituisci qui le credenziali di rete. Dopodiché abbiamo definito Offset GMT come 18000 sec che è (UTC+5 ore). Puoi sostituire il tuo fuso orario UTC qui. Segui il link per ottenere l'offset GMT per il tuo fuso orario.

Inoltre, l'indirizzo del server NTP è specificato utilizzando il comando:

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

Questo comando seleziona automaticamente il server del tempo che ti cercherà. Tuttavia possiamo anche impostare un fuso orario usando i server NTP spiegati nel Server NTP sezione.

Alla fine configuriamo ESP32 come client NTP e per ottenere data e ora. Per questo abbiamo usato il configtime () funzione.

Infine, usando il printLocalTime () funzione, la data e l'ora corrente sono stampate sul monitor seriale. Questa funzione contiene una struttura temporale tm che memorizza tutte le informazioni in timeinfo variabile.

I seguenti comandi rappresentano il file timeinfo struttura.

Seriale.println (& timeInfo, " %a, %b %d %y %h: %m: %s");

Ogni struttura di lettera di tempo si riferisce a un'informazione specifica:

Specificatori Informazione
%UN Giorno di ritorno di una settimana
%B Mese di ritorno
%D Giorno di ritorno del mese
%Y Restituisci l'anno in corso
%H Restituisci l'ora corrente
%M Restituisci i minuti di corrente
%S Restituisci i secondi attuali

2: output

Dopo aver caricato il codice ESP32 si connetterà con una rete WiFi e invierà una richiesta al server NTP per ricevere la data e l'ora correnti. A seguito di output è possibile vedere sul monitor seriale Arduino.

L'ora corrente sul mio PC e ESP32 è abbinato.

Abbiamo letto correttamente i tempi dal server NTP utilizzando ESP32 come client.

Conclusione

Il tempo è molto importante per applicazioni come il timestamp e l'esecuzione delle istruzioni in momenti specifici per generare output. I timer integrati non sono così accurati, quindi possiamo utilizzare un server NTP per leggere l'ora e la data corrente. Questa volta può essere archiviato all'interno di una variabile da utilizzare all'interno del nostro codice. Questa lezione aiuta a ottenere un tempo accurato di qualsiasi fuso orario in tutto il mondo usando ESP32.