Amikor a napszaktól függő IoT-projektet épít fel, azt szeretné, hogy a pontos idő jelenjen meg anélkül, hogy manuális módosításra lenne szüksége. Úgy tűnik, hogy ez könnyen megvalósítható az ESP32-vel, mivel beépített vezeték nélküli és képes csatlakozni az internethez.

Azonban, bár rengeteg online példa bemutatja, hogyan kell beállítani az ESP32-t úgy, hogy csatlakozzon az internethez, és hogyan szinkronizálja az időt az idővel. szerver, a legtöbbjük megköveteli, hogy manuálisan állítsa be a nyári időszámítást évente kétszer, ami elég nevetségesnek tűnik minden 21. századi elektronika esetében. eszköz.

Itt bemutatunk egy olyan megoldást, amely lehetővé teszi, hogy az ESP32 a világ bármely pontján, egész évben a pontos időt mutassa. De először nézzük meg a SimpleTime példáját az Arduino IDE-ben, és nézzük meg, mit csinál, és hogyan javíthatunk rajta.

A SimpleTime példa

Ha az Arduino IDE-t az ESP32-vel együtt használja, azt fogja találni, hogy van egy példa az úgynevezett SimpleTime ez így néz ki:

Ezt a példát úgy érheti el, hogy az Arduino IDE-t ESP32 kártya használatára konfigurálja a webhelyről Eszközök menüből, például a lehetőség kiválasztásával ESP32 fejlesztői modul. Miután ezt megtette, elérheti a SimpleTime példát a Eszközök alatti menü Példák,ESP32,Idő, és Egyszerű idő.

Azt várhatnánk, hogy ez a hivatalos példa bemutatja a dolgok legjobb módját, de van egy óriási probléma ebben a példában. Az időzóna és a nyári időszámítás beállításához módosítania kell a következő két sort:

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

Az időzóna beállítása a segítségével gmtOffset_sec kényelmetlen, mert meg kell találnia a GMT-eltolást az adott helyen. Ezt megteheti, ha konzultál a Greenwichi idő szerint weboldal. Szerencsére ezt csak egyszer kell megtennie. A daylightOffset_sec azonban nagyobb problémát jelent, mivel évente kétszer módosítani kell. Ehhez szükség lehet arra, hogy le kell bontania a projektet, és évente kétszer csatlakoztatnia kell az Arduino IDE-hez, ami teljesen alkalmatlanná teszi azt az IoT-projektet, amelyet be szeretne állítani és elfelejteni.

Jobb megközelítést keresek

Tehát mi lenne a jobb módja az időzóna és a nyári időszámítás beállításának? A kérdés megválaszolásához ne keresse tovább, hogyan kezeli Windows PC-je a helyzetet:

Figyeld meg, hogy ahelyett, hogy a GMT-hez képest időeltolást kellene megadnunk, megmondjuk a Windowsnak, hogy mi az időzónánk és a helyünk – esetünkben Hegyi idő (USA és Kanada)–, majd jelölje be a jelölőnégyzetet Az óra automatikus beállítása a nyári időszámításhoz. Ettől kezdve a Windows egész évben automatikusan kezeli helyettünk. Ezt a kényelmet szeretnénk az ESP32-től.

Összefüggő: A tálca órájának testreszabása Windows rendszeren

Helyadatbázis létrehozása az ESP32 számára

Ugyanezt az ESP32-vel való megtételéhez némi lábmunkára van szükség. kezdtük a blog bejegyzés amely leírja, hogyan kell beállítani az időzónát a TZ környezeti változó használatával. A mi helyünkre ez történt MST7MDT, M3.2.0, M11.1.0, ennek megfelelően időzóna táblázat. Bár ez megoldotta azt a problémát, hogy manuálisan kellett beállítani a nyári időszámítást, szerettük volna a folyamat egyszerűbb legyen, anélkül, hogy mindegyikhez szám- és betűsort kellene keresnie elhelyezkedés.

A webhelyről származó adatokat egy adatbázisba konvertáltuk, amelyet közvetlenül használhat az Arduino vázlatokból. Kövesse ez a link zip fájl közvetlen letöltéséhez az Arduino vázlattal.

Maga az adatbázis a fájlban tárolódik időzóna.h. Az adatbázis használatával a SimpleTime kódja így néz ki:

A SimpleTime példa módosításait sárga színnel emeltük ki. Ez a sor lehetővé teszi a vázlat számára az adatbázis használatát:

#include "time_zones.h"

Ez a sor konfigurálja a tartózkodási helyét:

const char* location = "Amerika/Denver";

461 lehetséges helyszín van. Az elérhető helyeket megtalálja, ha megnézi a időzóna.h fájlt, vagy nézze meg az időzóna listáját ezt a weboldalt.

Végül a következő sor arra utasítja az ESP32-t, hogy szinkronizálja az időt egy internetes szerverrel a Network Time Protocol (NTP) használatával:

configTimeWithTz (getTzByLocation (hely), ntpServer);

Az adott internetes időszerver a következő sor segítségével konfigurálható, bár az alapértelmezettnek megfelelően kell működnie:

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

Győződjön meg arról, hogy a következő két sorban adja hozzá a vezeték nélküli hozzáférési pont adatait:

const char* ssid = "AZ ÖN_SSID";
const char* jelszó = "YOUR_PASS";

Cserélje ki YOUR_SSID a vezeték nélküli hálózat nevével és YOUR_PASS a csatlakozáshoz használt jelszóval.

Összefüggő: A vezeték nélküli útválasztó nyilvános hozzáférési pontként való biztonságos konfigurálásának módjai

Befejezés

A konfigurációs lépések elvégzése után töltse fel a vázlatot az ESP32-re, és az egész évben a megfelelő időt fogja használni beavatkozás nélkül!

Noha ez a kód jó kiindulópontot ad, vannak felhasználóbarátabb módszerek is ugyanennek a megvalósítására. Például megengedheti a felhasználónak, hogy mindent beállítson egy weboldalról, ahelyett, hogy fordítási időben végezné el. Ez egy kicsit több munka, mivel a következőket kell tennie az Arduino vázlatban:

  1. Konfigurálja az ESP32-t vezeték nélküli hozzáférési pontként a kezdeti konfigurációhoz
  2. Indítson el egy webszervert, hogy bemutassa a felhasználónak egy konfigurációs oldalt
  3. Hozzon létre egy HTML űrlapot, amely lehetővé teszi a felhasználó számára a vezeték nélküli hálózat információinak megadását és a tartózkodási hely kiválasztását
  4. Hozza létre a kódot a felhasználó választásainak feldolgozásához, és tárolja a nem felejtő memóriában
  5. A fedélzeti bekapcsoláskor:
    • Olvassa be a konfigurációt a nem felejtő memóriából
    • Csatlakozzon a vezeték nélküli hálózathoz, és szinkronizálja az időt

Az ezeket a lépéseket bemutató projekt a ESP32 Dali óra. Ez a projekt vezetett ahhoz, hogy jobb módszert találjunk az időszinkronizálásra az ESP32-n.

A kép forrása: Marcio Teixeira/Flickr

Nézze meg a forráskód az ESP32 Dali Clockhoz, hogy megtudja, hogyan jeleníthet meg egy teljes értékű webes konfigurációs oldalt. A konfigurációs oldalon egy legördülő menü jelenik meg, amely lehetővé teszi a felhasználó számára a tartózkodási hely és az időzóna kiválasztását azt is lehetővé teszi, hogy a felhasználó manuálisan állítsa be az időt egy idő és naptár widget segítségével, ha nem csatlakozik alternatív!

Hely alapú hálózati időszinkronizálás az ESP32-n

Mostantól minden információ birtokában van ahhoz, hogy automatikusan be tudja állítani az ESP32 óráját a megfelelő időre, és be tudja állítani a nyári időszámításhoz is. Ez tökéletes olyan IoT-projektekhez, amelyeket nem szeretne manuálisan beállítani.

7 érdekes projekt, amelyek az ESP32 segítségével kompozit videót generálnak

Ha érdekes projekteket keres az ESP32 segítségével, akkor jó helyen jár.

Olvassa el a következőt

RészvényCsipogEmail
Kapcsolódó témák
  • DIY
  • ESP32
  • A dolgok internete
A szerzőről
Marcio Teixeira (4 cikk megjelent)

A nyílt forráskódú szoftverek, az elektronika, a 3D nyomtatás, a számítógépes grafika és a retro-számítástechnika iránt különösen érdekelt gyártó vagyok.

Továbbiak Marcio Teixeirától

Iratkozzon fel hírlevelünkre

Csatlakozzon hírlevelünkhöz műszaki tippekért, ismertetőkért, ingyenes e-könyvekért és exkluzív ajánlatokért!

Kattintson ide az előfizetéshez