Når du bygger et IoT-prosjekt som avhenger av klokkeslettet, vil du at det skal vise riktig tid uten å trenge manuelle justeringer. Det ser ut til at dette ville være enkelt å få til med ESP32 siden den har innebygd trådløs og kan kobles til Internett.

Men selv om det er mange netteksempler som viser hvordan du konfigurerer ESP32 til å koble til Internett og synkronisere tiden med en tid server, krever de fleste av dem at du justerer for sommertid manuelt to ganger i året, noe som virker ganske latterlig for alle elektroniske enheter fra det 21. århundre. enhet.

Her vil vi presentere deg for en løsning som lar ESP32 vise riktig tid, for ethvert sted i verden, året rundt. Men først, la oss ta en titt på eksempelet SimpleTime i Arduino IDE og se hva det gjør og hvordan vi kan forbedre det.

SimpleTime-eksemplet

Hvis du bruker Arduino IDE med ESP32, vil du finne at den har et eksempel kalt SimpleTime som ser slik ut:

Du kan få tilgang til dette eksemplet ved å konfigurere Arduino IDE til å bruke et ESP32-kort, fra

Verktøy menyen, for eksempel ved å velge ESP32 Dev Module. Når du har gjort det, kan du få tilgang til SimpleTime-eksemplet fra Verktøy meny under Eksempler,ESP32,Tid, og Enkel tid.

Man kan forvente at dette offisielle eksemplet viser den beste måten å gjøre ting på, men det er ett stort problem i dette eksemplet. For å konfigurere tidssonen og sommertid, må du endre følgende to linjer:

const lang gmtOffset_sec = 3600;
const int daylightOffset_sec = 3600;

Stille inn tidssonen med gmtOffset_sec er upraktisk fordi du må finne GMT-forskyvning for din spesifikke plassering. Du kan gjøre dette ved å konsultere Greenwich Mean Time nettsted. Heldigvis trenger du bare å gjøre dette én gang. De dagslysOffset_sek byr på et større problem, fordi du må justere den to ganger i året. Dette kan kreve at du tar ned prosjektet ditt og kobler det til Arduino IDE to ganger i året, noe som gjør det helt upassende for et IoT-prosjekt du vil sette opp og glemme.

Ser etter en bedre tilnærming

Så hva ville være en bedre måte å konfigurere tidssonen og sommertid? For å svare på dette spørsmålet, se ikke lenger enn hvordan Windows-PCen din håndterer situasjonen:

Legg merke til hvordan i stedet for å måtte gi den tidsforskyvninger fra GMT, forteller vi Windows hva vår tidssone og plassering er – i vårt tilfelle Mountain Time (USA og Canada)-og merk av i avmerkingsboksen Juster klokken automatisk for sommertid. Fra det tidspunktet håndterer Windows det automatisk for oss året rundt. Dette er den typen bekvemmelighet vi ønsker fra vår ESP32.

I slekt: Slik tilpasser du systemstatusklokken på Windows

Opprette en plasseringsdatabase for ESP32

Å gjøre det samme på ESP32 krever litt benarbeid. vi startet med en blogg innlegg som beskrev hvordan du setter opp tidssonen ved å bruke TZ-miljøvariabelen. For vårt sted var det tilfeldigvis MST7MDT, M3.2.0, M11.1.0, i følge dette tidssonetabell. Selv om dette løste problemet med å måtte justere for sommertid manuelt, ønsket vi prosessen skal være enklere, uten at du trenger å slå opp en rekke tall og bokstaver for hver plassering.

Vi konverterte dataene fra nettstedet til en database du kan bruke direkte fra Arduino-skissene dine. Følg denne lenken for å laste ned en zip-fil direkte med Arduino-skissen.

Selve databasen er lagret i filen tidssone.h. Ved å bruke databasen ser koden for SimpleTime slik ut:

Vi har fremhevet endringene i SimpleTime-eksemplet i gult. Denne linjen lar skissen bruke databasen:

#inkluder "tidssoner.h"

Denne linjen konfigurerer posisjonen din:

const char* location = "Amerika/Denver";

Det er 461 mulige lokasjoner. Du kan finne de tilgjengelige stedene ved å ta en titt på tidssone.h fil, eller ved å se på tidssonelisten på denne nettsiden.

Til slutt ber følgende linje ESP32 om å synkronisere tiden med en Internett-server ved å bruke Network Time Protocol (NTP):

configTimeWithTz (getTzByLocation (plassering), ntpServer);

Den bestemte Internett-tidsserveren kan konfigureres ved hjelp av følgende linje, selv om standarden skal fungere fint for deg:

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

Du vil også sørge for å legge til informasjonen for det trådløse tilgangspunktet på følgende to linjer:

const char* ssid = "DIN_SSID";
const char* passord = "DITT_PASS";

Erstatte DIN_SSID med navnet på det trådløse nettverket ditt og DIN_PASS med passordet som ble brukt for å koble til det.

I slekt: Måter å sikkert konfigurere en trådløs ruter som et offentlig tilgangspunkt

Etterbehandling

Når du har fullført konfigurasjonstrinnene, last opp skissen til ESP32 og den vil bruke riktig tid året rundt uten inngrep!

Selv om denne koden gir deg et godt utgangspunkt, er det mer brukervennlige måter å oppnå det samme på. For eksempel vil du kanskje la brukeren konfigurere alt fra en nettside i stedet for å gjøre det på kompileringstidspunktet. Å gjøre det er ganske mye mer arbeid, siden du må gjøre følgende ting i Arduino-skissen din:

  1. Konfigurer ESP32 som et trådløst tilgangspunkt for innledende konfigurasjon
  2. Start en webserver for å presentere en konfigurasjonsside for brukeren
  3. Lag et HTML-skjema for å la brukeren legge inn informasjon om det trådløse nettverket og velge plassering
  4. Lag koden for å behandle brukerens valg og lagre den i ikke-flyktig minne
  5. Ved oppstart av kortet:
    • Les konfigurasjonen fra ikke-flyktig minne
    • Koble til det trådløse nettverket og synkroniser tiden

Et prosjekt som viser disse trinnene er ESP32 Dali-klokke. Det var dette prosjektet som førte til at vi fant en bedre måte å gjøre tidssynkronisering på ESP32.

Bildekreditt: Marcio Teixeira/Flickr

Sjekk ut kildekode for ESP32 Dali Clock for å se hvordan du viser en fullverdig nettkonfigurasjonsside. Konfigurasjonssiden viser en rullegardinmeny som lar brukeren velge sin plassering og tidssone og lar brukeren også stille inn klokkeslettet manuelt ved hjelp av en tid- og kalenderwidget, for en ikke-tilkoblet alternativ!

Stedsbasert nettverkstidssynkronisering på ESP32

Du har nå all informasjonen du trenger for automatisk å kunne stille klokken til ESP32 til riktig tid, og også justere den for sommertid. Dette er perfekt for IoT-prosjekter som du ikke vil måtte justere manuelt.

7 interessante prosjekter som bruker ESP32 til å generere komposittvideo

Hvis du ser etter interessante prosjekter med ESP32, er du på rett sted.

Les Neste

DelekvitringE-post
Relaterte temaer
  • DIY
  • ESP32
  • Internett av ting
Om forfatteren
Marcio Teixeira (4 artikler publisert)

Jeg er en produsent med en spesiell interesse for åpen kildekode-programvare, elektronikk, 3D-printing, datagrafikk og retro-databehandling.

Mer fra Marcio Teixeira

Abonner på vårt nyhetsbrev

Bli med i vårt nyhetsbrev for tekniske tips, anmeldelser, gratis e-bøker og eksklusive tilbud!

Klikk her for å abonnere