Pri vytváraní projektu IoT, ktorý závisí od dennej doby, chcete, aby ukazoval správny čas bez potreby manuálnych úprav. Zdalo by sa, že by to bolo jednoduché dosiahnuť s ESP32, pretože má vstavané bezdrôtové pripojenie a môže sa pripojiť k internetu.
Napriek tomu, že existuje množstvo online príkladov, ktoré ukazujú, ako nakonfigurovať ESP32 na pripojenie k internetu a synchronizáciu času s časom Väčšina z nich vyžaduje, aby ste dvakrát do roka manuálne prispôsobili letný čas, čo sa zdá byť pre každú elektroniku 21. storočia dosť smiešne zariadenie.
Tu vám predstavíme riešenie, ktoré umožní ESP32 po celý rok ukazovať správny čas pre akékoľvek miesto na svete. Najprv sa však pozrime na príklad SimpleTime v Arduino IDE a uvidíme, čo robí a ako ho môžeme zlepšiť.
Príklad SimpleTime
Ak použijete Arduino IDE s ESP32, zistíte, že má príklad tzv SimpleTime to vyzerá takto:
K tomuto príkladu sa dostanete nakonfigurovaním Arduino IDE na používanie dosky ESP32 z Nástroje menu, napríklad výberom položky
Vývojársky modul ESP32. Keď tak urobíte, môžete pristupovať k príkladu SimpleTime z Nástroje menu pod príklady,ESP32,čas, a Jednoduchý čas.Dalo by sa očakávať, že tento oficiálny príklad demonštruje najlepší spôsob, ako robiť veci, ale v tomto príklade je jeden obrovský problém. Ak chcete nakonfigurovať časové pásmo a letný čas, musíte zmeniť nasledujúce dva riadky:
const long gmtOffset_sec = 3600;
const int daylightOffset_sec = 3600;
Nastavenie časového pásma pomocou gmtOffset_sec je nepohodlné, pretože musíte nájsť posun GMT pre vašu konkrétnu polohu. Môžete to urobiť konzultáciou s Web Greenwich Mean Time. Našťastie to musíte urobiť len raz. The daylightOffset_sec predstavuje však väčší problém, pretože ho musíte upravovať dvakrát do roka. To môže vyžadovať, aby ste svoj projekt zrušili a pripojili ho k Arduino IDE dvakrát ročne, čo je úplne nevhodné pre projekt IoT, ktorý chcete nastaviť a zabudnúť.
Hľadáte lepší prístup
Aký by bol teda lepší spôsob, ako nakonfigurovať časové pásmo a letný čas? Ak chcete odpovedať na túto otázku, nehľadajte ďalej, ako situáciu rieši váš počítač so systémom Windows:
Všimnite si, ako namiesto toho, aby sme mu museli dávať časové posuny od GMT, hovoríme systému Windows, aké je naše časové pásmo a umiestnenie – v našom prípade Horský čas (USA a Kanada)—a potom začiarknite políčko Automaticky upravte hodiny na letný čas. Od tohto momentu to za nás Windows rieši automaticky po celý rok. Toto je druh pohodlia, ktorý od nášho ESP32 požadujeme.
Súvisiace: Ako prispôsobiť hodiny na systémovej lište v systéme Windows
Vytvorenie databázy umiestnenia pre ESP32
Robiť to isté na ESP32 si vyžaduje určitú prácu. začali sme s a príspevok v blogu ktorý popisoval, ako nastaviť časové pásmo pomocou premennej prostredia TZ. Pre naše umiestnenie sa to stalo MST7MDT, M3.2.0, M11.1.0, vzhľadom na toto tabuľka časových pásiem. Aj keď to vyriešilo problém s ručnou úpravou letného času, chceli sme proces bude jednoduchší, bez potreby hľadať reťazec čísel a písmen pre každý z nich umiestnenie.
Údaje z webovej stránky sme previedli do databázy, ktorú môžete použiť priamo z vašich náčrtov Arduina. Nasledujte tento odkaz priamo stiahnuť súbor zip s náčrtom Arduino.
Samotná databáza je uložená v súbore časová_zóna.h. Pomocou databázy vyzerá kód pre SimpleTime takto:
Zmeny v príklade SimpleTime sme zvýraznili žltou farbou. Tento riadok umožní náčrtu používať databázu:
#include "time_zones.h"
Tento riadok konfiguruje vašu polohu:
const char* umiestnenie = "Amerika/Denver";
Existuje 461 možných umiestnení. Dostupné miesta nájdete tak, že sa pozriete na časová_zóna.h súbor alebo pohľadom na výpis časových pásiem tento web.
Nakoniec nasledujúci riadok informuje ESP32, aby synchronizoval čas s internetovým serverom pomocou Network Time Protocol (NTP):
configTimeWithTz (getTzByLocation (umiestnenie), ntpServer);
Konkrétny internetový časový server je možné nakonfigurovať pomocou nasledujúceho riadku, aj keď predvolené nastavenie by pre vás malo fungovať dobre:
const char* ntpServer = "pool.ntp.org";
Tiež sa uistite, že ste do nasledujúcich dvoch riadkov pridali informácie o vašom bezdrôtovom prístupovom bode:
const char* ssid = "VAŠE_SSID";
const char* heslo = "VÁŠ_PRÍSTUP";
Vymeňte YOUR_SSID s názvom vašej bezdrôtovej siete a YOUR_PASS s heslom použitým na pripojenie k nemu.
Súvisiace: Spôsoby, ako bezpečne nakonfigurovať bezdrôtový smerovač ako verejný prístupový bod
Dokončovanie
Po dokončení konfiguračných krokov nahrajte náčrt do ESP32 a bude používať správny čas po celý rok bez akéhokoľvek zásahu!
Aj keď vám tento kód poskytuje dobrý východiskový bod, existujú aj užívateľsky prívetivejšie spôsoby, ako dosiahnuť to isté. Môžete napríklad chcieť používateľovi umožniť konfiguráciu všetkého z webovej stránky namiesto toho, aby to robil v čase kompilácie. Je to o niečo viac práce, pretože v náčrte Arduina budete musieť urobiť nasledujúce veci:
- Nakonfigurujte ESP32 ako bezdrôtový prístupový bod pre počiatočnú konfiguráciu
- Spustite webový server, aby ste používateľovi poskytli konfiguračnú stránku
- Vytvorte HTML formulár, ktorý umožní používateľovi zadať informácie o bezdrôtovej sieti a vybrať si svoje umiestnenie
- Vytvorte kód na spracovanie volieb používateľa a uložte ho do energeticky nezávislej pamäte
- Pri zapnutí dosky:
- Prečítajte si konfiguráciu z energeticky nezávislej pamäte
- Pripojte sa k bezdrôtovej sieti a synchronizujte čas
Projekt, ktorý demonštruje tieto kroky, je ESP32 Dali hodiny. Bol to tento projekt, ktorý nás viedol k nájdeniu lepšieho spôsobu synchronizácie času na ESP32.
Pozrite sa na zdrojový kód pre ESP32 Dali Clock, aby ste videli, ako zobraziť plnohodnotnú webovú konfiguračnú stránku. Konfiguračná stránka zobrazuje rozbaľovaciu ponuku, ktorá umožňuje používateľovi vybrať si svoju polohu a časové pásmo tiež umožňuje používateľovi nastaviť čas manuálne pomocou miniaplikácie času a kalendára pre nepripojených alternatíva!
Synchronizácia času siete na základe polohy na ESP32
Teraz máte všetky informácie, ktoré potrebujete, aby ste mohli automaticky nastaviť hodiny vášho ESP32 na správny čas a tiež ich upraviť na letný čas. To je ideálne pre projekty internetu vecí, ktoré nechcete ručne upravovať.
Ak hľadáte zaujímavé projekty s ESP32, ste na správnom mieste.
Prečítajte si ďalej
- DIY
- ESP32
- Internet vecí
Som tvorca so špeciálnym záujmom o open-source softvér, elektroniku, 3D tlač, počítačovú grafiku a retro-počítače.
prihlásiť sa ku odberu noviniek
Pripojte sa k nášmu bulletinu a získajte technické tipy, recenzie, bezplatné e-knihy a exkluzívne ponuky!
Kliknutím sem sa prihlásite na odber