Client-server ESP32 NTP: ottieni data e ora - IDE Arduino

Client Server Esp32 Ntp Ottieni Data E Ora Ide Arduino



ESP32 è una scheda Internet of Things (IoT) basata su microcontrollore che può essere interfacciata con un'ampia gamma di dispositivi. ESP32 è ampiamente utilizzato nei progetti basati su IoT.

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

Network Time Protocol (NTP) utilizza il Coordinated Universal Time (UTC) che sincronizza l'orologio di sistema con grande precisione e accuratezza. Su reti più piccole NTP può fornirci clock precisi fino a 1 ms mentre reti più grandi come LAN (Local Area Network) NTP può fornire precisione con decine di millisecondi su Internet. Utilizzando questo orologio preciso ESP32 può eseguire istruzioni in un momento specifico.







Questa guida contiene i seguenti contenuti:



  1. Introduzione a NTP (Network Time Protocol)
  2. Server NTP e impostazioni dell'ora



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





1: Introduzione a NTP (Network Time Protocol)

NTP è un acronimo di N rete T da fare P rotocol è uno standard utilizzato per sincronizzare l'ora dei dispositivi con il loro fuso orario. Il protocollo dell'ora di rete sincronizza l'ora di tutti i dispositivi di rete con l'UTC, noto anche come Coordinated Universal Time.

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



2: Server NTP e impostazioni dell'ora

Per leggere l'ora dal server NTP dobbiamo dichiarare le seguenti variabili all'interno del codice utilizzando queste variabili possiamo ottenere l'ora dal server NTP.

  • Server NTP
  • Scostamento GMT
  • Offset luce diurna

2.1: Server NTP

Chiederemo tempo da pool.ntp.org che contiene dati sull'ora mondiale sul server e chiunque può richiedere la propria ora locale utilizzando questo pool. Di seguito sono riportati alcuni altri server a cui possiamo accedere:

La zona Nome host
In tutto il mondo pool.ntp.org
Asia asia.pool.ntp.org
Europa europe.pool.ntp.org
Nord America nord-america.pool.ntp.org
Oceania oceania.pool.ntp.org
Sud America south-america.pool.ntp.org

2.2: Scostamento GMT

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

2.3: Offset luce diurna

Qui l'offset di luce diurna è l'ora legale che di solito è presa come 1 ora. L'ora legale significa spostare l'orologio di 1 ora in avanti durante l'estate e riportarlo indietro in inverno. Questo comando viene solitamente utilizzato quando viene utilizzato un fuso orario personalizzato e viene applicata la regola dell'ora legale.

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

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

Il stampaOraLocale() funzione chiamerà il getLocalTime() funzione che invia la richiesta al server NTP e memorizza la data e l'ora ricevuta all'interno del informazioni sull'ora variabile.

3.1: Codice da stampare in tempo reale

Incolla il codice specificato per il server client NTP nell'editor IDE di Arduino. Collega ESP32 al PC, seleziona la porta COM e carica il codice.

#include
#include 'ora.h'
carattere const * ssid     = 'SOSTITUIRE_CON_IL_TUO_SSID';
carattere const * password = “SOSTITUIRE_CON_LA_VOSTRA_PASSWORD”;
carattere const * ntpserver = 'pool.ntp.org' ;
const long  gmtOffset_sec = 18000 ; /* DIFFERENZA GMT + 5 ORE ( 18000 SEZ ) */
const int   luce del giornoOffset_sec = 3600 ; /* 1 offset orario diurno */
void printLocalTime ( )
{
struct tm timeinfo;
Se ( ! getLocalTime ( & informazioni sull'ora ) ) {
Serial.println ( 'Impossibile ottenere il tempo' ) ;
Restituzione ;
}
Serial.println ( & informazioni sull'ora, '%A, %B %d %Y %H:%M:%S' ) ;
}
configurazione nulla ( )
{
Inizio.seriale ( 115200 ) ;
// connettersi al Wi-Fi
Serial.printf ( 'Connessione a %s' , ssid ) ;
Wi-Fi.inizio ( ssid, parola d'ordine ) ;
mentre ( WiFi.stato ( ) ! = WL_CONNESSO ) {
ritardo ( 500 ) ;
Stampa.seriale ( '.' ) ;
}
Serial.println ( 'CONNESSO' ) ;
// init e ottieni il file volta
configTime ( gmtOffset_sec, luce diurnaOffset_sec, ntpServer ) ;
stampaOra locale ( ) ;
// disconnettere il Wi-Fi come esso non è più necessario
WiFi.disconnect(true);
WiFi.mode(WIFI_OFF);
}
ciclo vuoto()
{
ritardo(1000);
stampaOraLocale();
}

Il codice è iniziato includendo il WiFi e la libreria del tempo. Wifi library aiuterà a connettere ESP32 con una rete mentre volta library gestirà la sincronizzazione del server NTP.

Successivamente vengono definiti l'SSID e la password della rete a cui si collegherà ESP32. Sostituisci qui le tue credenziali di rete. Dopo di che abbiamo definito Differenza GMT come 18000 sec che è (UTC+5 ore). Puoi sostituire il tuo fuso orario UTC qui. Segui il collegamento prendere il Differenza GMT per il tuo fuso orario.

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

carattere const * ntpserver = 'pool.ntp.org' ;

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

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

Infine, utilizzando il stampaOraLocale() funzione, la data e l'ora correnti vengono stampate sul monitor seriale. Questa funzione contiene una struttura temporale tm che memorizza tutte le informazioni nel file informazioni sull'ora variabile.

I seguenti comandi rappresentano il informazioni sull'ora struttura.

Serial.println ( & informazioni sull'ora, '%A, %B %d %Y %H:%M:%S' ) ;

Ogni lettera della struttura temporale si riferisce a un'informazione specifica:

Specificatori Informazione
%UN Ritorno giorno della settimana
%B Mese di ritorno
%d Giorno del mese di ritorno
%Y Torna all'anno in corso
%H Restituisce l'ora corrente
%M Restituisce i minuti correnti
%S Restituisce i secondi correnti

3.2: Uscita

Dopo aver caricato il codice ESP32 si collegherà con una rete WiFi e invierà una richiesta al server NTP per ricevere la data e l'ora correnti. Il seguente output può essere visualizzato sul monitor seriale di Arduino.

L'ora corrente sul mio PC e su ESP32 corrisponde.

Abbiamo letto con successo l'ora dal server NTP utilizzando ESP32 come client.

Conclusione

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