Kun rakennat kellonajasta riippuvaa IoT-projektia, haluat sen näyttävän oikean ajan ilman manuaalisia säätöjä. Vaikuttaa siltä, ​​että tämä olisi helppo toteuttaa ESP32:lla, koska siinä on sisäänrakennettu langaton ja se voi muodostaa yhteyden Internetiin.

Vaikka verkossa on kuitenkin paljon esimerkkejä, jotka osoittavat, kuinka ESP32 määritetään muodostamaan yhteys Internetiin ja synkronoimaan aika ajan kanssa. palvelin, useimmat niistä vaativat sinun säätämään kesäaikaa manuaalisesti kahdesti vuodessa, mikä vaikuttaa melko naurettavalta mille tahansa 2000-luvun elektroniselle laite.

Tässä esittelemme sinulle ratkaisun, jonka avulla ESP32 voi näyttää oikean ajan missä tahansa päin maailmaa ympäri vuoden. Mutta ensin, katsotaanpa esimerkkiä SimpleTimesta Arduino IDE: ssä ja katsotaan mitä se tekee ja miten voimme parantaa sitä.

SimpleTime-esimerkki

Jos käytät Arduino IDE: tä ESP32:n kanssa, huomaat, että siinä on esimerkki nimeltä SimpleTime joka näyttää tältä:

Voit käyttää tätä esimerkkiä määrittämällä Arduino IDE: n käyttämään ESP32-korttia osoitteesta

instagram viewer
Työkalut valikosta, esimerkiksi valitsemalla ESP32 Dev moduuli. Kun olet tehnyt niin, voit käyttää SimpleTime-esimerkkiä osoitteesta Työkalut valikon alla Esimerkkejä,ESP32,Aika, ja Yksinkertainen aika.

Tämän virallisen esimerkin voisi odottaa osoittavan parhaan tavan tehdä asiat, mutta tässä esimerkissä on yksi valtava ongelma. Jos haluat määrittää aikavyöhykkeen ja kesäajan, sinun on muutettava seuraavat kaksi riviä:

const pitkä gmtOffset_sec = 3600;
const int daylightOffset_sec = 3600;

Aikavyöhykkeen asettaminen käyttämällä gmtOffset_sec on hankalaa, koska sinun on löydettävä GMT-poikkeama tietylle sijainnillesi. Voit tehdä tämän ottamalla yhteyttä Greenwichin ajan verkkosivusto. Onneksi sinun tarvitsee tehdä tämä vain kerran. The päivänvaloOffset_sec aiheuttaa kuitenkin suuremman ongelman, koska sitä on säädettävä kahdesti vuodessa. Tämä saattaa edellyttää, että poistat projektisi ja kytket sen Arduino IDE: hen kahdesti vuodessa, mikä tekee siitä täysin sopimattoman IoT-projektille, jonka haluat määrittää ja unohtaa.

Etsitkö parempaa lähestymistapaa

Joten mikä olisi parempi tapa määrittää aikavyöhyke ja kesäaika? Voit vastata tähän kysymykseen etsimällä vain sitä, kuinka Windows-tietokoneesi käsittelee tilanteen:

Huomaa, että sen sijaan, että joutuisimme antamaan sille aikaeroja GMT: stä, kerromme Windowsille, mikä aikavyöhykkeemme ja sijaintimme on – meidän tapauksessamme Vuoristoaika (USA ja Kanada)-ja valitse sitten valintaruutu Säädä kello automaattisesti kesäaikaan. Siitä lähtien Windows hoitaa sen automaattisesti puolestamme ympäri vuoden. Tämän mukavuuden haluamme ESP32:lta.

Aiheeseen liittyvä: System Tray -kellon mukauttaminen Windowsissa

Sijaintitietokannan luominen ESP32:lle

Saman asian tekeminen ESP32:lla vaatii jonkin verran jalkatyötä. aloitimme a: lla blogipostaus joka kuvasi kuinka aikavyöhyke asetetaan TZ-ympäristömuuttujan avulla. Sijaintimme kannalta se sattui olemaan MST7MDT, M3.2.0, M11.1.0, tämän perusteella aikavyöhyketaulukko. Vaikka tämä ratkaisi ongelman, joka liittyi manuaaliseen kesäajan säätämiseen, halusimme prosessi on yksinkertaisempi ilman tarvetta etsiä numeroita ja kirjaimia jokaiselle sijainti.

Muunsimme verkkosivuston tiedot tietokannaksi, jota voit käyttää suoraan Arduino-luonnoksistasi. Seuraa tämä linkki ladataksesi suoraan zip-tiedoston Arduino-luonnoksen kanssa.

Itse tietokanta on tallennettu tiedostoon aikavyöhyke.h. Tietokantaa käyttämällä SimpleTimen koodi näyttää tältä:

Olemme korostaneet SimpleTime-esimerkin muutokset keltaisella. Tämä rivi sallii luonnoksen käyttää tietokantaa:

#include "aikavyöhykkeet.h"

Tämä rivi määrittää sijaintisi:

const char* location = "Amerikka/Denver";

Mahdollisia paikkoja on 461. Löydät käytettävissä olevat paikat katsomalla aikavyöhyke.h tiedostoa tai katsomalla aikavyöhykeluetteloa tämä sivusto.

Lopuksi seuraava rivi käskee ESP32:ta synkronoimaan ajan Internet-palvelimen kanssa Network Time Protocol (NTP) -protokollan avulla:

configTimeWithTz (getTzByLocation (sijainti), ntpServer);

Tietty Internet-aikapalvelin voidaan määrittää seuraavalla rivillä, vaikka oletusarvon pitäisi toimia hyvin sinulle:

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

Haluat myös varmistaa, että lisäät langattoman tukiaseman tiedot seuraaville kahdelle riville:

const char* ssid = "OMA_SSID";
const char* salasana = "SINUN_PASSSI";

Korvata YOUR_SSID langattoman verkkosi nimellä ja YOUR_PASS siihen yhteyden muodostamiseen käytetyllä salasanalla.

Aiheeseen liittyvä: Tapoja määrittää langattoman reitittimen turvallisesti julkiseksi tukiasemaksi

Viimeistellä

Kun olet suorittanut konfigurointivaiheet, lataa luonnos ESP32:een ja se käyttää oikeaa aikaa ympäri vuoden ilman mitään väliintuloa!

Vaikka tämä koodi antaa sinulle hyvän lähtökohdan, on olemassa käyttäjäystävällisempiä tapoja saavuttaa sama asia. Voit esimerkiksi antaa käyttäjän määrittää kaiken verkkosivulta käsin sen sijaan, että se tekisi sen käännösaikana. Sen tekeminen on hieman enemmän työtä, koska sinun on tehtävä seuraavat asiat Arduino-luonnoksessasi:

  1. Määritä ESP32 langattomaksi tukiasemaksi alkumääritystä varten
  2. Käynnistä verkkopalvelin ja esitä käyttäjälle määrityssivu
  3. Luo HTML-lomake, jonka avulla käyttäjä voi syöttää langattoman verkon tiedot ja valita sijaintinsa
  4. Luo koodi käyttäjän valintojen käsittelemiseksi ja tallenna se haihtumattomaan muistiin
  5. Laitteen virran kytkemisen yhteydessä:
    • Lue konfiguraatio haihtumattomasta muistista
    • Yhdistä langattomaan verkkoon ja synkronoi aika

Projekti, joka osoittaa nämä vaiheet, on ESP32 Dali Kello. Tämä projekti johti meidät löytämään paremman tavan tehdä aikasynkronointi ESP32:lla.

Kuvan luotto: Marcio Teixeira/Flickr

Tutustu lähdekoodi ESP32 Dali Clock -kellolle nähdäksesi, kuinka voit näyttää kaikki toiminnot sisältävän web-määrityssivun. Konfigurointisivulla näkyy alasvetovalikko, jonka avulla käyttäjä voi valita sijaintinsa ja aikavyöhykkeensä sekä mahdollistaa myös, että käyttäjä voi asettaa ajan manuaalisesti aika- ja kalenteri-widgetin avulla, jos verkkoyhteyttä ei ole muodostettu vaihtoehto!

Sijaintiperusteinen verkkoajan synkronointi ESP32:ssa

Sinulla on nyt kaikki tiedot, joita tarvitset voidaksesi asettaa ESP32:n kellon automaattisesti oikeaan aikaan ja säätää sen myös kesäaikaan. Tämä sopii täydellisesti IoT-projekteihin, joita et halua säätää manuaalisesti.

7 mielenkiintoista projektia, jotka käyttävät ESP32:ta komposiittivideon luomiseen

Jos etsit mielenkiintoisia projekteja ESP32:n kanssa, olet oikeassa paikassa.

Lue Seuraava

JaaTweetSähköposti
Liittyvät aiheet
  • tee-se-itse
  • ESP32
  • Esineiden internet
Kirjailijasta
Marcio Teixeira (4 artikkelia julkaistu)

Olen valmistaja, jota kiinnostavat erityisesti avoimen lähdekoodin ohjelmistot, elektroniikka, 3D-tulostus, tietokonegrafiikka ja retro-laskenta.

Lisää Marcio Teixeirasta

tilaa uutiskirjeemme

Liity uutiskirjeemme saadaksesi teknisiä vinkkejä, arvosteluja, ilmaisia ​​e-kirjoja ja eksklusiivisia tarjouksia!

Klikkaa tästä tilataksesi