Ko gradite IoT projekt, ki je odvisen od časa dneva, želite, da prikazuje točen čas brez ročnih prilagoditev. Zdi se, da bi bilo to enostavno doseči z ESP32, saj ima vgrajeno brezžično povezavo in se lahko poveže z internetom.
Čeprav je na spletu veliko primerov, ki kažejo, kako konfigurirati ESP32 za povezavo z internetom in sinhronizacijo časa s časom strežnika, večina jih zahteva, da dvakrat letno ročno prilagodite poletni čas, kar se zdi precej smešno za vsako elektroniko 21. napravo.
Tukaj vam bomo predstavili rešitev, ki bo omogočila, da bo ESP32 prikazal točen čas za kateri koli kraj na svetu vse leto. Toda najprej si oglejmo primer SimpleTime v Arduino IDE in poglejmo, kaj počne in kako ga lahko izboljšamo.
Primer SimpleTime
Če uporabljate Arduino IDE z ESP32, boste ugotovili, da ima primer imenovan SimpleTime to izgleda takole:
Do tega primera lahko dostopate tako, da konfigurirate Arduino IDE za uporabo plošče ESP32 iz Orodja meni, na primer z izbiro ESP32 Dev modul. Ko to storite, lahko dostopate do primera SimpleTime iz Orodja meni pod Primeri,ESP32,čas, in Preprost čas.
Lahko bi pričakovali, da bo ta uradni primer pokazal najboljši način dela, vendar je v tem primeru ena velika težava. Če želite konfigurirati časovni pas in poletni čas, morate spremeniti naslednji dve vrstici:
const long gmtOffset_sec = 3600;
const int daylightOffset_sec = 3600;
Nastavitev časovnega pasu z gmtOffset_sec je neprijetno, ker morate za svojo lokacijo poiskati GMT odmik. To lahko storite tako, da se posvetujete z Spletno mesto za srednji čas po Greenwichu. Na srečo morate to storiti samo enkrat. The daylightOffset_sec predstavlja večjo težavo, saj jo morate prilagajati dvakrat letno. Zaradi tega boste morda morali odstraniti svoj projekt in ga dvakrat letno priključiti na Arduino IDE, zaradi česar je popolnoma neprimeren za projekt interneta stvari, ki ga želite nastaviti in pozabiti.
Iščete boljši pristop
Kaj bi bil torej boljši način za nastavitev časovnega pasu in poletnega časa? Če želite odgovoriti na to vprašanje, ne iščite več kot to, kako vaš računalnik z operacijskim sistemom Windows obravnava situacijo:
Opazite, kako namesto da bi mu morali dati časovne odmike od GMT, Windowsu povemo, kateri je naš časovni pas in lokacija – v našem primeru gorski čas (ZDA in Kanada)—in nato potrdite potrditveno polje Samodejno prilagodi uro za poletni čas. Od takrat naprej Windows to samodejno obravnava za nas vse leto. To je vrsta udobja, ki jo želimo od našega ESP32.
Povezano: Kako prilagoditi uro sistemske vrstice v sistemu Windows
Ustvarjanje baze podatkov o lokaciji za ESP32
Če želite narediti isto stvar na ESP32, je potrebno nekaj truda. začeli smo z a blog objava ki opisuje, kako nastaviti časovni pas s spremenljivko okolja TZ. Za našo lokacijo se je zgodilo MST7MDT, M3.2.0, M11.1.0, glede na to tabela časovnih pasov. Čeprav je to rešilo težavo, da je bilo treba ročno prilagajati poletni čas, smo želeli postopek je preprostejši, ne da bi morali iskati niz številk in črk za vsako lokacija.
Podatke s spletnega mesta smo pretvorili v bazo podatkov, ki jo lahko uporabite neposredno iz svojih Arduino skic. Sledite ta povezava da neposredno prenesete zip datoteko s skico Arduino.
Sama baza podatkov je shranjena v datoteki časovni_pas.h. Z uporabo baze podatkov je koda za SimpleTime videti takole:
Z rumeno smo poudarili spremembe primera SimpleTime. Ta vrstica bo skici omogočila uporabo baze podatkov:
#include "time_zones.h"
Ta vrstica konfigurira vašo lokacijo:
const char* location = "Amerika/Denver";
Obstaja 461 možnih lokacij. Razpoložljive lokacije najdete tako, da si ogledate časovni_pas.h datoteko ali pa si ogledate seznam časovnega pasu na to spletno mesto.
Nazadnje naslednja vrstica pove ESP32, naj sinhronizira čas z internetnim strežnikom z uporabo protokola Network Time Protocol (NTP):
configTimeWithTz (getTzByLocation (lokacija), ntpServer);
Določen internetni časovni strežnik je mogoče konfigurirati z naslednjo vrstico, čeprav bi vam morala privzeta vrednost dobro delovati:
const char* ntpServer = "pool.ntp.org";
Poskrbite tudi, da boste podatke za svojo brezžično dostopno točko dodali v naslednjih dveh vrsticah:
const char* ssid = "VAŠ_SSID";
const char* geslo = "VAŠ_PASS";
Zamenjati YOUR_SSID z imenom vašega brezžičnega omrežja in YOUR_PASS z geslom, ki se uporablja za povezavo z njim.
Povezano: Načini za varno konfiguracijo brezžičnega usmerjevalnika kot javne dostopne točke
Dokončanje
Ko dokončate korake konfiguracije, naložite skico v ESP32 in uporabljal bo pravilen čas skozi vse leto brez kakršnega koli posega!
Čeprav vam ta koda daje dobro izhodišče, obstajajo bolj uporabniku prijazni načini za dosego iste stvari. Uporabniku lahko na primer dovolite, da vse konfigurira s spletne strani, namesto da bi to naredil med prevajanjem. To je precej več dela, saj bi morali v svoji skici Arduino narediti naslednje:
- Za začetno konfiguracijo konfigurirajte ESP32 kot brezžično dostopno točko
- Zaženite spletni strežnik, da uporabniku predstavite konfiguracijsko stran
- Ustvarite obrazec HTML, ki bo uporabniku omogočil, da vnese podatke o brezžičnem omrežju in izbere svojo lokacijo
- Ustvarite kodo za obdelavo uporabnikovih izbir in jo shranite v nehlapni pomnilnik
- Ob vklopu plošče:
- Preberite konfiguracijo iz nehlapnega pomnilnika
- Povežite se z brezžičnim omrežjem in sinhronizirajte čas
Projekt, ki prikazuje te korake, je ESP32 Dali ura. Prav ta projekt nas je pripeljal do boljšega načina za časovno sinhronizacijo na ESP32.
Oglejte si izvorno kodo za ESP32 Dali Clock, da vidite, kako prikazati spletno stran s popolno konfiguracijo. Stran s konfiguracijo prikazuje spustni meni, ki uporabniku omogoča izbiro lokacije in časovnega pasu in uporabniku omogoča tudi ročno nastavitev časa z uporabo pripomočka za čas in koledar za nepovezane alternativa!
Omrežna časovna sinhronizacija na podlagi lokacije na ESP32
Zdaj imate vse informacije, ki jih potrebujete, da lahko samodejno nastavite uro ESP32 na pravilen čas in jo tudi prilagodite za poletni čas. To je kot nalašč za projekte interneta stvari, ki jih ne želite ročno prilagajati.
Če iščete zanimive projekte z ESP32, ste na pravem mestu.
Preberite Naprej
- DIY
- ESP32
- Internet stvari
Sem izdelovalec s posebnim zanimanjem za odprtokodno programsko opremo, elektroniko, 3D tiskanje, računalniško grafiko in retroračunalništvo.
Naročite se na naše novice
Pridružite se našemu glasilu za tehnične nasvete, ocene, brezplačne e-knjige in ekskluzivne ponudbe!
Kliknite tukaj, da se naročite