Kurdami daiktų interneto projektą, kuris priklauso nuo paros laiko, norite, kad jis rodytų teisingą laiką, nereikalaujant rankinio koregavimo. Atrodytų, kad tai būtų lengva padaryti naudojant ESP32, nes jame yra įmontuotas belaidis ryšys ir galima prisijungti prie interneto.

Tačiau nors internete yra daug pavyzdžių, rodančių, kaip sukonfigūruoti ESP32 prisijungti prie interneto ir sinchronizuoti laiką su laiku. serverio, daugumoje jų reikia du kartus per metus rankiniu būdu koreguoti vasaros laiką, o tai atrodo gana juokinga bet kokiai XXI a. prietaisas.

Čia pateiksime jums sprendimą, kuris leis ESP32 rodyti teisingą laiką bet kurioje pasaulio vietoje ištisus metus. Tačiau pirmiausia pažvelkime į „SimpleTime“ pavyzdį „Arduino IDE“ ir pažiūrėkime, ką jis daro ir kaip galime jį patobulinti.

„SimpleTime“ pavyzdys

Jei naudojate Arduino IDE su ESP32, pamatysite, kad jame yra pavyzdys Paprastas laikas tai atrodo taip:

Šį pavyzdį galite pasiekti sukonfigūravę „Arduino IDE“, kad naudotų ESP32 plokštę, iš

instagram viewer
Įrankiai meniu, pvz., pasirinkdami ESP32 kūrėjo modulis. Kai tai padarysite, galite pasiekti SimpleTime pavyzdį iš Įrankiai meniu Pavyzdžiai,ESP32,Laikas, ir Paprastas Laikas.

Galima tikėtis, kad šis oficialus pavyzdys parodys geriausią veiksmų atlikimo būdą, tačiau šiame pavyzdyje yra viena didžiulė problema. Norėdami sukonfigūruoti laiko juostą ir vasaros laiką, turite pakeisti šias dvi eilutes:

const long gmtOffset_sec = 3600;
const int daylightOffset_sec = 3600;

Laiko juostos nustatymas naudojant gmtOffset_sec yra nepatogu, nes turite rasti GMT poslinkį jūsų konkrečiai vietai. Tai galite padaryti pasikonsultavę su Svetainė Grinvičo laiku. Laimei, tai padaryti reikia tik vieną kartą. The daylightOffset_sec vis dėlto kelia didesnę problemą, nes ją reikia koreguoti du kartus per metus. Dėl to gali tekti panaikinti projektą ir prijungti jį prie Arduino IDE du kartus per metus, todėl jis visiškai netinkamas daiktų interneto projektui, kurį norite nustatyti ir pamiršti.

Ieškau geresnio požiūrio

Taigi, koks būtų geresnis būdas sukonfigūruoti laiko juostą ir vasaros laiką? Norėdami atsakyti į šį klausimą, pažiūrėkite, kaip jūsų „Windows“ kompiuteris tvarko situaciją:

Atkreipkite dėmesį, kad užuot turėję suteikti jai laiko nuokrypius nuo GMT, mes nurodome Windows, kokia yra mūsų laiko juosta ir vieta (mūsų atveju). Kalnų laikas (JAV ir Kanada)ir pažymėkite žymimąjį laukelį Automatiškai sureguliuokite laikrodį pagal vasaros laiką. Nuo to laiko „Windows“ tai automatiškai tvarko už mus visus metus. Būtent tokio patogumo norime iš savo ESP32.

Susijęs: Kaip tinkinti sistemos dėklo laikrodį sistemoje „Windows“.

Vietos duomenų bazės kūrimas ESP32

Norint atlikti tą patį su ESP32, reikia šiek tiek padirbėti. pradėjome nuo a tinklaraščio straipsnis aprašoma, kaip nustatyti laiko juostą naudojant TZ aplinkos kintamąjį. Mūsų vietai taip atsitiko MST7MDT, M3.2.0, M11.1.0, pagal šitą laiko juostų lentelė. Nors tai išsprendė problemą, kai reikėjo rankiniu būdu reguliuoti vasaros laiką, mes norėjome kad procesas būtų paprastesnis, nereikia ieškoti kiekvieno skaičių ir raidžių eilutės vieta.

Mes konvertavome duomenis iš svetainės į duomenų bazę, kurią galite naudoti tiesiogiai iš savo Arduino eskizų. Sekite šią nuorodą Norėdami tiesiogiai atsisiųsti ZIP failą su Arduino eskizu.

Pati duomenų bazė yra saugoma faile laiko_zona.h. Naudojant duomenų bazę, SimpleTime kodas atrodo taip:

SimpleTime pavyzdžio pakeitimus paryškinome geltona spalva. Ši eilutė leis eskizui naudoti duomenų bazę:

#include "time_zones.h"

Ši eilutė sukonfigūruoja jūsų vietą:

const char* location = "Amerika/Denveris";

Yra 461 galima vieta. Galimas vietas rasite pažiūrėję į laiko_zona.h failą arba žiūrėdami į laiko juostos sąrašą ši svetainė.

Galiausiai, ši eilutė nurodo ESP32 sinchronizuoti laiką su interneto serveriu naudojant tinklo laiko protokolą (NTP):

configTimeWithTz (getTzByLocation (vieta), ntpServer);

Konkretus interneto laiko serveris gali būti sukonfigūruotas naudojant šią eilutę, nors numatytasis nustatymas turėtų jums gerai veikti:

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

Be to, šiose dviejose eilutėse norite pridėti belaidžio prieigos taško informaciją:

const char* ssid = "JŪSŲ_SSID";
const char* slaptažodis = "YOUR_PASS";

Pakeiskite YOUR_SSID su savo belaidžio tinklo pavadinimu ir YOUR_PASS su slaptažodžiu, naudojamu prisijungiant prie jo.

Susijęs: Būdai, kaip saugiai sukonfigūruoti belaidį maršruto parinktuvą kaip viešą prieigos tašką

Baigiama

Baigę konfigūravimo veiksmus, įkelkite eskizą į ESP32 ir jis naudos tinkamą laiką ištisus metus be jokio įsikišimo!

Nors šis kodas suteikia gerą atspirties tašką, yra patogesnių būdų, kaip atlikti tą patį. Pavyzdžiui, galbūt norėsite leisti vartotojui konfigūruoti viską iš tinklalapio, o ne tai daryti kompiliavimo metu. Tai padaryti yra šiek tiek daugiau darbo, nes „Arduino“ eskize turėsite atlikti šiuos veiksmus:

  1. Sukonfigūruokite ESP32 kaip belaidį prieigos tašką pradinei konfigūracijai
  2. Paleiskite žiniatinklio serverį, kad pateiktumėte vartotojui konfigūracijos puslapį
  3. Sukurkite HTML formą, kad vartotojas galėtų įvesti belaidžio tinklo informaciją ir pasirinkti savo vietą
  4. Sukurkite kodą, kad apdorotumėte vartotojo pasirinkimus, ir išsaugokite jį nepastovioje atmintyje
  5. Įjungus plokštę:
    • Nuskaitykite konfigūraciją iš nuolatinės atminties
    • Prisijunkite prie belaidžio tinklo ir sinchronizuokite laiką

Projektas, parodantis šiuos veiksmus, yra ESP32 Dali laikrodis. Būtent šis projektas paskatino mus rasti geresnį būdą sinchronizuoti laiką naudojant ESP32.

Vaizdo kreditas: Marcio Teixeira/Flickr

Patikrinkite pirminis kodas ESP32 Dali laikrodžiui, kad pamatytumėte, kaip parodyti visų funkcijų interneto konfigūracijos puslapį. Konfigūracijos puslapyje rodomas išskleidžiamasis meniu, leidžiantis vartotojui pasirinkti vietą ir laiko juostą bei taip pat leidžia vartotojui rankiniu būdu nustatyti laiką, naudojant laiko ir kalendoriaus valdiklį, neprisijungus alternatyva!

Vieta pagrįstas tinklo laiko sinchronizavimas ESP32

Dabar turite visą reikiamą informaciją, kad galėtumėte automatiškai nustatyti ESP32 laikrodį pagal teisingą laiką ir pritaikyti jį vasaros laikui. Tai puikiai tinka daiktų interneto projektams, kurių nenorite koreguoti rankiniu būdu.

7 įdomūs projektai, naudojantys ESP32 sudėtiniam vaizdo įrašui generuoti

Jei ieškote įdomių projektų naudodami ESP32, esate tinkamoje vietoje.

Skaitykite toliau

DalintisTviteryjeEl. paštas
Susijusios temos
  • DIY
  • ESP32
  • Daiktų internetas
Apie autorių
Marcio Teixeira (4 straipsniai paskelbti)

Esu kūrėjas, kuris ypač domisi atvirojo kodo programine įranga, elektronika, 3D spausdinimu, kompiuterine grafika ir retro kompiuterija.

Daugiau iš Marcio Teixeira

Prenumeruokite mūsų naujienlaiškį

Prisijunkite prie mūsų naujienlaiškio, kad gautumėte techninių patarimų, apžvalgų, nemokamų el. knygų ir išskirtinių pasiūlymų!

Spauskite čia norėdami užsiprenumeruoti