Quando si crea un progetto IoT che dipende dall'ora del giorno, si desidera che mostri l'ora corretta senza che siano necessarie regolazioni manuali. Sembrerebbe facile da realizzare con l'ESP32 poiché è dotato di wireless integrato e può connettersi a Internet.

Tuttavia, mentre ci sono molti esempi online che mostrano come configurare l'ESP32 per connettersi a Internet e sincronizzare l'ora con un'ora server, la maggior parte di essi richiede di regolare manualmente l'ora legale due volte l'anno, il che sembra abbastanza ridicolo per qualsiasi elettronica del 21° secolo dispositivo.

Qui ti presenteremo una soluzione che consentirà all'ESP32 di mostrare l'ora corretta, per qualsiasi luogo del mondo, tutto l'anno. Ma prima, diamo un'occhiata all'esempio SimpleTime nell'IDE di Arduino e vediamo cosa fa e come possiamo migliorarlo.

L'esempio SimpleTime

Se usi l'IDE Arduino con ESP32, scoprirai che ha un esempio chiamato SimpleTime che assomiglia a questo:

Puoi accedere a questo esempio configurando l'IDE Arduino per utilizzare una scheda ESP32, da

instagram viewer
Utensili menu, ad esempio selezionando il Modulo di sviluppo ESP32. Dopo averlo fatto, puoi accedere all'esempio SimpleTime da Utensili menu sotto esempi,ESP32,Volta, e Tempo semplice.

Ci si potrebbe aspettare che questo esempio ufficiale dimostri il modo migliore di fare le cose, ma c'è un grosso problema in questo esempio. Per configurare il fuso orario e l'ora legale, è necessario modificare le due righe seguenti:

const lungo gmtOffset_sec = 3600;
const int luce diurnaOffset_sec = 3600;

Impostazione del fuso orario utilizzando gmtOffset_sec è scomodo perché devi trovare l'offset GMT per la tua posizione particolare. Puoi farlo consultando il Sito web dell'ora di Greenwich. Fortunatamente, devi farlo solo una volta. Il luce diurnaOffset_sec presenta un problema più grande, tuttavia, perché è necessario regolarlo due volte l'anno. Ciò potrebbe richiedere di rimuovere il progetto e collegarlo all'IDE di Arduino due volte all'anno, rendendolo del tutto inappropriato per un progetto IoT che si desidera configurare e dimenticare.

Alla ricerca di un approccio migliore

Quindi quale sarebbe un modo migliore per configurare il fuso orario e l'ora legale? Per rispondere a questa domanda, non guardare oltre il modo in cui il tuo PC Windows gestisce la situazione:

Nota come invece di dovergli dare gli scostamenti dall'ora GMT, diciamo a Windows qual è il nostro fuso orario e la nostra posizione, nel nostro caso Mountain Time (Stati Uniti e Canada)—e quindi selezionare la casella di controllo Regola automaticamente l'orologio per l'ora legale. Da quel momento in poi, Windows lo gestisce automaticamente per noi tutto l'anno. Questo è il tipo di comodità che desideriamo dal nostro ESP32.

Imparentato: Come personalizzare l'orologio della barra delle applicazioni su Windows

Creazione di un database delle posizioni per ESP32

Fare la stessa cosa sull'ESP32 richiede un po' di lavoro. abbiamo iniziato con un post sul blog che ha descritto come impostare il fuso orario utilizzando la variabile di ambiente TZ. Per la nostra posizione, è successo MST7MDT, M3.2.0, M11.1.0, secondo questo tabella dei fusi orari. Anche se questo ha risolto il problema di dover regolare manualmente l'ora legale, volevamo il processo è più semplice, senza la necessità di cercare una stringa di numeri e lettere per ciascuno Posizione.

Abbiamo convertito i dati dal sito Web in un database che puoi utilizzare direttamente dai tuoi schizzi Arduino. Seguire questo link per scaricare direttamente un file zip con lo sketch di Arduino.

Il database stesso è memorizzato nel file time_zone.h. Utilizzando il database, il codice per SimpleTime è simile al seguente:

Abbiamo evidenziato in giallo le modifiche all'esempio SimpleTime. Questa linea consentirà allo schizzo di utilizzare il database:

#include "time_zones.h"

Questa riga configura la tua posizione:

const char* posizione = "America/Denver";

Ci sono 461 possibili posizioni. Puoi trovare le posizioni disponibili dando un'occhiata al time_zone.h file, o guardando l'elenco del fuso orario su questo sito web.

Infine, la riga seguente indica all'ESP32 di sincronizzare l'ora con un server Internet utilizzando il Network Time Protocol (NTP):

configTimeWithTz (getTzByLocation (posizione), ntpServer);

Il particolare server dell'ora Internet può essere configurato utilizzando la riga seguente, sebbene l'impostazione predefinita dovrebbe funzionare correttamente per te:

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

Assicurati inoltre di aggiungere le informazioni per il tuo punto di accesso wireless sulle due righe seguenti:

const char* ssid = "TUO_SSID";
const char* password = "TUO_PASS";

Sostituire IL TUO_SSID con il nome della tua rete wireless e IL TUO_PASS con la password utilizzata per la connessione.

Imparentato: Modi per configurare in modo sicuro un router wireless come punto di accesso pubblico

Terminando

Una volta completati i passaggi di configurazione, carica lo sketch su ESP32 e utilizzerà l'ora corretta tutto l'anno senza alcun intervento!

Sebbene questo codice ti dia un buon punto di partenza, ci sono modi più intuitivi per ottenere la stessa cosa. Ad esempio, potresti voler consentire all'utente di configurare tutto da una pagina Web piuttosto che farlo in fase di compilazione. Farlo è un po' più di lavoro, poiché dovresti fare le seguenti cose nel tuo schizzo Arduino:

  1. Configurare l'ESP32 come punto di accesso wireless per la configurazione iniziale
  2. Avvia un server web per presentare all'utente una pagina di configurazione
  3. Creare un modulo HTML per consentire all'utente di inserire le informazioni sulla rete wireless e di selezionare la propria posizione
  4. Creare il codice per elaborare le scelte dell'utente e salvarlo nella memoria non volatile
  5. All'accensione della scheda:
    • Leggere la configurazione dalla memoria non volatile
    • Collegarsi alla rete wireless e sincronizzare l'ora

Un progetto che dimostra questi passaggi è il ESP32 Orologio Dalì. È stato questo progetto che ci ha portato a trovare un modo migliore per eseguire la sincronizzazione dell'ora sull'ESP32.

Credito immagine: Marcio Teixeira/Flickr

Dai un'occhiata al codice sorgente per ESP32 Dali Clock per vedere come mostrare una pagina di configurazione web completa. La pagina di configurazione mostra un menu a discesa per consentire all'utente di selezionare la propria posizione e fuso orario e consente inoltre all'utente di impostare l'ora manualmente utilizzando un widget di ora e calendario, per un non connesso alternativa!

Sincronizzazione dell'ora di rete basata sulla posizione sull'ESP32

Ora hai tutte le informazioni necessarie per poter impostare automaticamente l'orologio del tuo ESP32 sull'ora corretta e anche regolarlo per l'ora legale. Questo è perfetto per i progetti IoT che non vuoi dover modificare manualmente.

7 progetti interessanti che utilizzano l'ESP32 per generare video compositi

Se stai cercando progetti interessanti con ESP32, sei nel posto giusto.

Leggi Avanti

CondividereTwittaE-mail
Argomenti correlati
  • Fai da te
  • ESP32
  • Internet delle cose
Circa l'autore
Marcio Teixeira (4 articoli pubblicati)

Sono un maker con un interesse particolare per il software open source, l'elettronica, la stampa 3D, la computer grafica e il retro-computing.

Altro da Marcio Teixeira

Iscriviti alla nostra Newsletter

Iscriviti alla nostra newsletter per suggerimenti tecnici, recensioni, ebook gratuiti e offerte esclusive!

Clicca qui per iscriverti