Veidojot IoT projektu, kas ir atkarīgs no diennakts laika, vēlaties, lai tas rādītu pareizo laiku bez manuālas pielāgošanas. Šķiet, ka to būtu viegli paveikt ar ESP32, jo tajā ir iebūvēts bezvadu savienojums un tas var izveidot savienojumu ar internetu.

Tomēr, lai gan ir daudz tiešsaistes piemēru, kas parāda, kā konfigurēt ESP32, lai izveidotu savienojumu ar internetu un sinhronizētu laiku ar laiku. serveris, lielākā daļa no tiem prasa manuāli pielāgoties vasaras laikam divas reizes gadā, kas šķiet diezgan smieklīgi jebkurai 21. gadsimta elektroniskajai ierīci.

Šeit mēs iepazīstināsim jūs ar risinājumu, kas ļaus ESP32 rādīt pareizo laiku jebkurā pasaules vietā visu gadu. Bet vispirms apskatīsim SimpleTime piemēru Arduino IDE un redzēsim, ko tas dara un kā mēs to varam uzlabot.

SimpleTime piemērs

Ja izmantojat Arduino IDE ar ESP32, jūs atklāsit, ka tam ir piemērs SimpleTime tas izskatās šādi:

Šim piemēram varat piekļūt, konfigurējot Arduino IDE, lai izmantotu ESP32 plati, no Rīki izvēlnē, piemēram, atlasot

ESP32 izstrādātāju modulis. Kad tas ir izdarīts, varat piekļūt SimpleTime piemēram no Rīki zem izvēlnes piemēri,ESP32,Laiks, un Vienkāršs laiks.

Varētu sagaidīt, ka šis oficiālais piemērs demonstrēs labāko veidu, kā rīkoties, taču šajā piemērā ir viena milzīga problēma. Lai konfigurētu laika joslu un vasaras laiku, ir jāmaina šādas divas rindiņas:

const garš gmtOffset_sec = 3600;
const int daylightOffset_sec = 3600;

Laika joslas iestatīšana, izmantojot gmtOffset_sec ir neērti, jo jums ir jāatrod GMT nobīde jūsu konkrētajai atrašanās vietai. To var izdarīt, konsultējoties ar Vietne pēc Griničas laika. Par laimi, jums tas jādara tikai vienu reizi. The dienasgaismaOffset_sec tomēr rada lielāku problēmu, jo jums tas ir jāpielāgo divas reizes gadā. Lai to izdarītu, jums var būt nepieciešams noņemt projektu un divreiz gadā savienot to ar Arduino IDE, padarot to pilnīgi nepiemērotu IoT projektam, kuru vēlaties iestatīt un aizmirst.

Meklē labāku pieeju

Tātad, kāds būtu labāks veids, kā konfigurēt laika joslu un vasaras laiku? Lai atbildētu uz šo jautājumu, meklējiet tikai to, kā jūsu Windows dators risina situāciju:

Ņemiet vērā, ka tā vietā, lai piešķirtu tai laika nobīdi no GMT, mēs sakām sistēmai Windows, kāda ir mūsu laika josla un atrašanās vieta — mūsu gadījumā. Kalnu laiks (ASV un Kanāda)— un pēc tam atzīmējiet izvēles rūtiņu Automātiski pielāgot pulksteni vasaras laikam. No šī brīža Windows to automātiski apstrādā visu gadu. Šādas ērtības mēs vēlamies no mūsu ESP32.

Saistīts: Kā pielāgot sistēmas teknes pulksteni operētājsistēmā Windows

Atrašanās vietu datu bāzes izveide ESP32

Lai to pašu darītu ar ESP32, ir nepieciešams zināms darbs. mēs sākām ar a emuāra ieraksts kurā aprakstīts, kā iestatīt laika joslu, izmantojot vides mainīgo TZ. Mūsu atrašanās vietai tā gadījās MST7MDT, M3.2.0, M11.1.0, saskaņā ar šo laika joslu tabula. Lai gan tas atrisināja problēmu, kas saistīta ar manuālu pielāgošanu vasaras laikam, mēs vēlējāmies process ir vienkāršāks, bez nepieciešamības katram meklēt ciparu un burtu virkni atrašanās vieta.

Mēs pārveidojām datus no vietnes datu bāzē, ko varat izmantot tieši no Arduino skicēm. Sekojiet šo saiti lai tieši lejupielādētu zip failu ar Arduino skici.

Pati datu bāze tiek saglabāta failā laika_zona.h. Izmantojot datu bāzi, SimpleTime kods izskatās šādi:

SimpleTime piemēra modifikācijas esam iezīmējuši dzeltenā krāsā. Šī rinda ļaus skicē izmantot datu bāzi:

#include "time_zones.h"

Šī rinda konfigurē jūsu atrašanās vietu:

const char* location = "Amerika/Denvera";

Ir 461 iespējamās atrašanās vietas. Pieejamās vietas varat atrast, apskatot laika_zona.h failu vai apskatot laika joslu sarakstu šī vietne.

Visbeidzot, šī rinda liek ESP32 sinhronizēt laiku ar interneta serveri, izmantojot tīkla laika protokolu (NTP):

configTimeWithTz (getTzByLocation (atrašanās vieta), ntpServer);

Konkrēto interneta laika serveri var konfigurēt, izmantojot šo rindiņu, lai gan noklusējuma iestatījumam vajadzētu darboties labi:

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

Varat arī pievienot informāciju par bezvadu piekļuves punktu šādās divās rindās:

const char* ssid = "JŪSU_SSID";
const char* parole = "YOUR_PASS";

Aizvietot JŪSU_SSID ar sava bezvadu tīkla nosaukumu un YOUR_PASS ar paroli, kas izmantota savienojuma izveidei ar to.

Saistīts: Veidi, kā droši konfigurēt bezvadu maršrutētāju kā publisku piekļuves punktu

Beidzot

Kad esat pabeidzis konfigurācijas darbības, augšupielādējiet skici ESP32, un tas izmantos pareizo laiku visu gadu bez jebkādas iejaukšanās!

Lai gan šis kods sniedz jums labu sākumpunktu, ir arī lietotājam draudzīgāki veidi, kā paveikt to pašu. Piemēram, iespējams, vēlēsities ļaut lietotājam konfigurēt visu no tīmekļa lapas, nevis to darīt kompilēšanas laikā. To darot, ir daudz vairāk darba, jo Arduino skicē jums būs jāveic šādas darbības:

  1. Konfigurējiet ESP32 kā bezvadu piekļuves punktu sākotnējai konfigurācijai
  2. Palaidiet tīmekļa serveri, lai parādītu lietotājam konfigurācijas lapu
  3. Izveidojiet HTML veidlapu, lai lietotājs varētu ievadīt bezvadu tīkla informāciju un atlasīt savu atrašanās vietu
  4. Izveidojiet kodu, lai apstrādātu lietotāja izvēles un saglabātu to nemainīgā atmiņā
  5. Ieslēdzot paneli:
    • Nolasīt konfigurāciju no nemainīgās atmiņas
    • Izveidojiet savienojumu ar bezvadu tīklu un sinhronizējiet laiku

Projekts, kas parāda šīs darbības, ir ESP32 Dali pulkstenis. Tieši šis projekts lika mums atrast labāku veidu, kā veikt laika sinhronizāciju ESP32.

Attēla autors: Marcio Teixeira/Flickr

Apskatiet avota kods ESP32 Dali pulkstenim, lai redzētu, kā parādīt pilnvērtīgu tīmekļa konfigurācijas lapu. Konfigurācijas lapā ir redzama nolaižamā izvēlne, kas ļauj lietotājam izvēlēties savu atrašanās vietu un laika joslu un ļauj arī lietotājam manuāli iestatīt laiku, izmantojot laika un kalendāra logrīku, ja nav izveidots savienojums alternatīva!

Uz atrašanās vietu balstīta tīkla laika sinhronizācija ESP32

Tagad jums ir visa nepieciešamā informācija, lai varētu automātiski iestatīt ESP32 pulksteni uz pareizo laiku, kā arī pielāgot to vasaras laikam. Tas ir lieliski piemērots IoT projektiem, kurus nevēlaties manuāli pielāgot.

7 interesanti projekti, kas izmanto ESP32, lai ģenerētu saliktu video

Ja meklējat interesantus projektus ar ESP32, jūs esat īstajā vietā.

Lasiet Tālāk

DalītiesČivinātE-pasts
Saistītās tēmas
  • DIY
  • ESP32
  • Lietu internets
Par autoru
Marcio Teixeira (Publicēti 4 raksti)

Esmu veidotājs ar īpašu interesi par atvērtā pirmkoda programmatūru, elektroniku, 3D drukāšanu, datorgrafiku un retro skaitļošanu.

Vairāk no Marcio Teixeira

Abonējiet mūsu biļetenu

Pievienojieties mūsu informatīvajam izdevumam, lai saņemtu tehniskos padomus, pārskatus, bezmaksas e-grāmatas un ekskluzīvus piedāvājumus!

Noklikšķiniet šeit, lai abonētu