Prilikom izrade IoT projekta koji ovisi o dobu dana, želite da prikazuje točno vrijeme bez potrebe za ručnim prilagodbama. Čini se da bi to bilo lako postići s ESP32 budući da ima ugrađenu bežičnu vezu i može se povezati s internetom.
Međutim, iako postoji mnogo online primjera koji pokazuju kako konfigurirati ESP32 za povezivanje s internetom i sinkronizirati vrijeme s vremenom poslužitelja, većina njih zahtijeva da dvaput godišnje ručno prilagodite ljetno računanje vremena, što se čini prilično smiješnim za bilo koju elektroniku 21. stoljeća uređaj.
Ovdje ćemo vam predstaviti rješenje koje će omogućiti da ESP32 prikazuje točno vrijeme, za bilo koje mjesto na svijetu, tijekom cijele godine. Ali prvo, pogledajmo primjer SimpleTime u Arduino IDE-u i vidimo što radi i kako ga možemo poboljšati.
Primjer SimpleTime
Ako koristite Arduino IDE s ESP32, vidjet ćete da ima primjer pod nazivom SimpleTime to izgleda ovako:
Ovom primjeru možete pristupiti tako da konfigurirate Arduino IDE da koristi ESP32 ploču iz
Alati izborniku, kao što je odabirom ESP32 Dev modul. Nakon što to učinite, možete pristupiti primjeru SimpleTime iz Alati izbornik ispod primjeri,ESP32,Vrijeme, i Jednostavno vrijeme.Moglo bi se očekivati da će ovaj službeni primjer pokazati najbolji način rada, ali u ovom primjeru postoji jedan veliki problem. Da biste konfigurirali vremensku zonu i ljetno računanje vremena, morate promijeniti sljedeća dva retka:
const long gmtOffset_sec = 3600;
const int daylightOffset_sec = 3600;
Postavljanje vremenske zone pomoću gmtOffset_sec je nezgodno jer morate pronaći GMT offset za svoju određenu lokaciju. To možete učiniti savjetovanjem s Web stranica srednjeg vremena po Greenwichu. Na sreću, ovo trebate učiniti samo jednom. The daylightOffset_sec predstavlja veći problem, međutim, jer ga trebate prilagođavati dva puta godišnje. To može zahtijevati da skinete svoj projekt i spojite ga na Arduino IDE dvaput godišnje, što ga čini potpuno neprikladnim za IoT projekt koji želite postaviti i zaboraviti.
U potrazi za boljim pristupom
Dakle, koji bi bio bolji način za konfiguriranje vremenske zone i ljetnog računanja vremena? Da biste odgovorili na ovo pitanje, ne tražite dalje od toga kako vaše Windows PC rješava situaciju:
Primijetite kako umjesto da mu moramo dati vremenske pomake od GMT-a, mi govorimo Windowsu koja je naša vremenska zona i lokacija - u našem slučaju Planinsko vrijeme (SAD i Kanada)—a zatim označite potvrdni okvir Automatski podesite sat za ljetno računanje vremena. Od tog trenutka, Windows to automatski rješava za nas tijekom cijele godine. Ovo je vrsta pogodnosti koju želimo od našeg ESP32.
Povezano: Kako prilagoditi sat na traci sustava u sustavu Windows
Izrada baze podataka o lokaciji za ESP32
Raditi istu stvar na ESP32 zahtijeva malo rada. počeli smo s a blog post koji opisuje kako postaviti vremensku zonu pomoću varijable okruženja TZ. Za našu lokaciju, dogodilo se MST7MDT, M3.2.0, M11.1.0, prema tome tablica vremenskih zona. Iako je to riješilo problem ručnog podešavanja ljetnog računanja vremena, željeli smo da proces bude jednostavniji, bez potrebe za traženjem niza brojeva i slova za svaki mjesto.
Podatke s web stranice pretvorili smo u bazu podataka koju možete koristiti izravno iz svojih Arduino skica. slijediti ovaj link za izravno preuzimanje zip datoteke s Arduino skicom.
Sama baza podataka je pohranjena u datoteci vremenska_zona.h. Koristeći bazu podataka, kod za SimpleTime izgleda ovako:
Žutom smo bojom istaknuli modifikacije primjera SimpleTime. Ova linija će omogućiti skici da koristi bazu podataka:
#include "time_zones.h"
Ova linija konfigurira vašu lokaciju:
const char* location = "Amerika/Denver";
Postoji 461 moguća lokacija. Dostupne lokacije možete pronaći ako pogledate vremenska_zona.h datoteku ili gledajući popis vremenskih zona na ovu web stranicu.
Konačno, sljedeći red govori ESP32 da sinkronizira vrijeme s internetskim poslužiteljem koristeći Network Time Protocol (NTP):
configTimeWithTz (getTzByLocation (lokacija), ntpServer);
Određeni internetski vremenski poslužitelj može se konfigurirati pomoću sljedećeg retka, iako bi zadani trebao dobro funkcionirati za vas:
const char* ntpServer = "pool.ntp.org";
Također želite dodati podatke za svoju bežičnu pristupnu točku u sljedeća dva retka:
const char* ssid = "VAŠ_SSID";
const char* lozinka = "VAŠ_PASS";
Zamijeniti YOUR_SSID s nazivom vaše bežične mreže i YOUR_PASS s lozinkom koja se koristi za povezivanje s njim.
Povezano: Načini sigurnog konfiguriranja bežičnog usmjerivača kao javne pristupne točke
Dovršavanje
Nakon što dovršite korake konfiguracije, prenesite skicu na ESP32 i on će koristiti točno vrijeme tijekom cijele godine bez ikakve intervencije!
Iako vam ovaj kod daje dobru početnu točku, postoje jednostavniji načini za postizanje iste stvari. Na primjer, možda želite dopustiti korisniku da sve konfigurira s web-stranice umjesto da to radi u vrijeme kompajliranja. To je dosta više posla, jer biste trebali učiniti sljedeće stvari u svojoj Arduino skici:
- Konfigurirajte ESP32 kao bežičnu pristupnu točku za početnu konfiguraciju
- Pokrenite web-poslužitelj kako biste korisniku prikazali stranicu s konfiguracijom
- Izradite HTML obrazac koji će korisniku omogućiti da unese podatke o bežičnoj mreži i odabere svoju lokaciju
- Izradite kod za obradu korisničkih izbora i pohranite ga u nepromjenjivu memoriju
- Prilikom uključivanja ploče:
- Pročitajte konfiguraciju iz nepromjenjive memorije
- Povežite se na bežičnu mrežu i sinkronizirajte vrijeme
Projekt koji pokazuje ove korake je ESP32 Dali sat. Upravo nas je ovaj projekt naveo da pronađemo bolji način za sinkronizaciju vremena na ESP32.
Provjerite izvorni kod za ESP32 Dali sat kako biste vidjeli kako prikazati web-konfiguracijsku stranicu s punim značajkama. Stranica s konfiguracijom prikazuje padajući izbornik koji korisniku omogućuje odabir lokacije i vremenske zone i također omogućuje korisniku da ručno postavi vrijeme pomoću widgeta za vrijeme i kalendar, za nepovezane alternativa!
Sinkronizacija mrežnog vremena na temelju lokacije na ESP32
Sada imate sve informacije koje su vam potrebne da biste mogli automatski postaviti sat vašeg ESP32 na točno vrijeme, te ga također prilagoditi za ljetno računanje vremena. Ovo je savršeno za IoT projekte koje ne želite ručno prilagođavati.
Ako tražite zanimljive projekte s ESP32, na pravom ste mjestu.
Pročitajte dalje
- DIY
- ESP32
- Internet stvari
Ja sam proizvođač s posebnim interesom za softver otvorenog koda, elektroniku, 3D ispis, računalnu grafiku i retro računalstvo.
Pretplatite se na naše obavijesti
Pridružite se našem biltenu za tehničke savjete, recenzije, besplatne e-knjige i ekskluzivne ponude!
Kliknite ovdje za pretplatu