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)
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.
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.
#includereCodice 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.