Při vytváření projektu IoT, který závisí na denní době, chcete, aby ukazoval správný čas, aniž byste potřebovali ruční úpravy. Zdá se, že by to bylo snadné provést s ESP32, protože má vestavěné bezdrátové připojení a lze se připojit k internetu.

I když však existuje spousta online příkladů, které ukazují, jak nakonfigurovat ESP32 pro připojení k internetu a synchronizaci času s časem Většina z nich vyžaduje, abyste dvakrát ročně ručně upravovali letní čas, což se zdá být pro jakoukoli elektroniku 21. století docela směšné. přístroj.

Zde vám představíme řešení, které umožní ESP32 po celý rok ukazovat správný čas pro jakékoli místo na světě. Nejprve se však podívejme na příklad SimpleTime v Arduino IDE a uvidíme, co dělá a jak jej můžeme zlepšit.

Příklad SimpleTime

Pokud používáte Arduino IDE s ESP32, zjistíte, že má příklad nazvaný SimpleTime to vypadá takto:

K tomuto příkladu se dostanete tak, že nakonfigurujete Arduino IDE pro použití desky ESP32 z Nástroje nabídky, například výběrem Vývojářský modul ESP32

. Jakmile tak učiníte, můžete přistupovat k příkladu SimpleTime z Nástroje menu pod příklady,ESP32,Čas, a Jednoduchý čas.

Dalo by se očekávat, že tento oficiální příklad demonstruje nejlepší způsob, jak věci dělat, ale v tomto příkladu je jeden obrovský problém. Chcete-li nakonfigurovat časové pásmo a letní čas, musíte změnit následující dva řádky:

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

Nastavení časového pásma pomocí gmtOffset_sec je nepohodlné, protože musíte najít posun GMT pro vaši konkrétní polohu. Můžete to udělat konzultací s Web Greenwich Mean Time. Naštěstí to stačí udělat jen jednou. The daylightOffset_sec představuje však větší problém, protože jej musíte upravovat dvakrát ročně. To může vyžadovat, abyste svůj projekt zrušili a připojili jej k Arduino IDE dvakrát ročně, což je zcela nevhodné pro projekt IoT, který chcete nastavit a zapomenout.

Hledáte lepší přístup

Jaký by byl tedy lepší způsob konfigurace časového pásma a letního času? Chcete-li odpovědět na tuto otázku, nehledejte nic jiného, ​​než jak situaci řeší váš počítač se systémem Windows:

Všimněte si, že místo toho, abychom mu museli dávat časové posuny od GMT, říkáme systému Windows, jaké je naše časové pásmo a umístění – v našem případě Horský čas (USA a Kanada)—a poté zaškrtněte políčko Automaticky upravit hodiny na letní čas. Od té chvíle to za nás Windows po celý rok zpracovávají automaticky. Toto je druh pohodlí, který od našeho ESP32 požadujeme.

Příbuzný: Jak přizpůsobit hodiny na systémové liště v systému Windows

Vytvoření databáze umístění pro ESP32

Dělat to samé na ESP32 vyžaduje trochu práce. začali jsme s a blogový příspěvek který popisoval, jak nastavit časové pásmo pomocí proměnné prostředí TZ. Pro naše umístění se to stalo MST7MDT, M3.2.0, M11.1.0, podle tohoto tabulka časových pásem. I když to vyřešilo problém nutnosti ručního nastavení letního času, chtěli jsme proces bude jednodušší, aniž by bylo nutné pro každé hledat řetězec čísel a písmen umístění.

Data z webu jsme převedli do databáze, kterou můžete použít přímo z vašich Arduino skic. Následovat tento odkaz přímo stáhnout soubor zip s náčrtem Arduino.

Samotná databáze je uložena v souboru time_zone.h. Pomocí databáze vypadá kód pro SimpleTime takto:

Změny v příkladu SimpleTime jsme zvýraznili žlutě. Tento řádek umožní náčrtu používat databázi:

#include "time_zones.h"

Tento řádek konfiguruje vaši polohu:

const char* umístění = "Amerika/Denver";

Existuje 461 možných umístění. Dostupná místa najdete tak, že se podíváte na time_zone.h nebo se podívejte na výpis časového pásma na tento web.

Nakonec následující řádek říká ESP32, aby synchronizoval čas s internetovým serverem pomocí Network Time Protocol (NTP):

configTimeWithTz (getTzByLocation (umístění), ntpServer);

Konkrétní internetový časový server lze nakonfigurovat pomocí následujícího řádku, i když výchozí nastavení by pro vás mělo fungovat dobře:

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

Také se ujistěte, že jste do následujících dvou řádků přidali informace o vašem bezdrátovém přístupovém bodu:

const char* ssid = "VAŠE_SSID";
const char* heslo = "VAŠE_HESLO";

Nahradit VAŠE_SSID s názvem vaší bezdrátové sítě a YOUR_PASS s heslem použitým pro připojení k němu.

Příbuzný: Způsoby, jak bezpečně nakonfigurovat bezdrátový směrovač jako veřejný přístupový bod

Dokončování

Jakmile dokončíte konfigurační kroky, nahrajte skicu do ESP32 a bude používat správný čas po celý rok bez jakéhokoli zásahu!

I když vám tento kód poskytuje dobrý výchozí bod, existují uživatelsky přívětivější způsoby, jak dosáhnout stejné věci. Můžete například chtít uživateli umožnit konfigurovat vše z webové stránky, místo aby to dělal v době kompilace. Je to o něco více práce, protože ve skice Arduina budete muset udělat následující věci:

  1. Nakonfigurujte ESP32 jako bezdrátový přístupový bod pro počáteční konfiguraci
  2. Spusťte webový server, který uživateli nabídne konfigurační stránku
  3. Vytvořte formulář HTML, který uživateli umožní zadat informace o bezdrátové síti a vybrat své umístění
  4. Vytvořte kód pro zpracování uživatelských voleb a uložte jej do energeticky nezávislé paměti
  5. Při zapnutí desky:
    • Načtěte konfiguraci z energeticky nezávislé paměti
    • Připojte se k bezdrátové síti a synchronizujte čas

Projekt, který demonstruje tyto kroky, je ESP32 Dali hodiny. Právě tento projekt nás vedl k nalezení lepšího způsobu synchronizace času na ESP32.

Fotografický kredit: Marcio Teixeira/Flickr

Podívejte se na zdrojový kód pro ESP32 Dali Clock, abyste viděli, jak zobrazit plnohodnotnou webovou konfigurační stránku. Konfigurační stránka zobrazuje rozbalovací nabídku, která umožňuje uživateli vybrat si své umístění a časové pásmo také umožňuje uživateli nastavit čas ručně pomocí widgetu času a kalendáře pro uživatele, kteří nejsou připojeni alternativní!

Synchronizace času sítě na základě polohy na ESP32

Nyní máte všechny informace, které potřebujete, abyste mohli automaticky nastavit hodiny ESP32 na správný čas a také je upravit pro letní čas. To je ideální pro projekty IoT, které nechcete ručně upravovat.

7 zajímavých projektů, které využívají ESP32 ke generování kompozitního videa

Pokud hledáte zajímavé projekty s ESP32, jste na správném místě.

Přečtěte si další

PodíltweetE-mailem
Související témata
  • DIY
  • ESP32
  • Internet věcí
O autorovi
Marcio Teixeira (4 články zveřejněny)

Jsem tvůrce se zvláštním zájmem o open-source software, elektroniku, 3D tisk, počítačovou grafiku a retro-computing.

Více od Marcio Teixeira

Přihlaste se k odběru našeho newsletteru

Připojte se k našemu zpravodaji a získejte technické tipy, recenze, bezplatné e-knihy a exkluzivní nabídky!

Chcete-li se přihlásit k odběru, klikněte sem