Tworząc projekt IoT, który zależy od pory dnia, chcesz, aby wyświetlał prawidłową godzinę bez konieczności ręcznych korekt. Wydawałoby się, że byłoby to łatwe do osiągnięcia dzięki ESP32, ponieważ ma on wbudowaną łączność bezprzewodową i może łączyć się z Internetem.

Jednak chociaż istnieje wiele przykładów online, które pokazują, jak skonfigurować ESP32, aby połączyć się z Internetem i zsynchronizować czas z czasem serwer, większość z nich wymaga ręcznego dostosowania czasu letniego dwa razy w roku, co wydaje się dość absurdalne dla każdej elektroniki XXI wieku urządzenie.

Tutaj przedstawimy Ci rozwiązanie, które pozwoli ESP32 na pokazywanie przez cały rok poprawnej godziny, dla dowolnego miejsca na świecie. Ale najpierw spójrzmy na przykład SimpleTime w Arduino IDE i zobaczmy, co robi i jak możemy go ulepszyć.

Przykład SimpleTime

Jeśli używasz Arduino IDE z ESP32, przekonasz się, że ma on przykład o nazwie SimpleTime to wygląda tak:

Możesz uzyskać dostęp do tego przykładu, konfigurując Arduino IDE do korzystania z płyty ESP32, z

instagram viewer
Narzędzia menu, na przykład wybierając Moduł deweloperski ESP32. Gdy to zrobisz, możesz uzyskać dostęp do przykładu SimpleTime z Narzędzia menu pod Przykłady,ESP32,Czas, oraz Prosty czas.

Można by oczekiwać, że ten oficjalny przykład zademonstruje najlepszy sposób robienia rzeczy, ale w tym przykładzie jest jeden ogromny problem. Aby skonfigurować strefę czasową i czas letni, musisz zmienić następujące dwie linie:

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

Ustawianie strefy czasowej za pomocą gmtOffset_sec jest niewygodne, ponieważ musisz znaleźć przesunięcie GMT dla swojej konkretnej lokalizacji. Możesz to zrobić, sprawdzając Witryna Greenwich Mean Time. Na szczęście wystarczy to zrobić tylko raz. ten daylightOffset_sec stanowi jednak większy problem, ponieważ trzeba go regulować dwa razy w roku. Może to wymagać usunięcia projektu i podłączenia go do Arduino IDE dwa razy w roku, co czyni go całkowicie nieodpowiednim dla projektu IoT, który chcesz skonfigurować i zapomnieć.

Szukasz lepszego podejścia

Więc jaki byłby lepszy sposób na skonfigurowanie strefy czasowej i czasu letniego? Aby odpowiedzieć na to pytanie, nie szukaj dalej, niż to, jak Twój komputer z systemem Windows radzi sobie z sytuacją:

Zwróć uwagę, jak zamiast podawać mu przesunięcie czasowe od GMT, mówimy systemowi Windows, jaka jest nasza strefa czasowa i lokalizacja - w naszym przypadku Czas górski (USA i Kanada)—a następnie zaznacz pole wyboru Automatycznie dostosuj zegar do czasu letniego. Od tego momentu Windows obsługuje je automatycznie przez cały rok. Takiej wygody oczekujemy od naszego ESP32.

Związane z: Jak dostosować zegar w zasobniku systemowym w systemie Windows

Tworzenie bazy danych lokalizacji dla ESP32

Wykonanie tego samego na ESP32 wymaga trochę pracy. zaczęliśmy od post na blogu opisujący, jak ustawić strefę czasową za pomocą zmiennej środowiskowej TZ. W przypadku naszej lokalizacji tak się złożyło MST7MDT, M3.2.0, M11.1.0, według tego tabela stref czasowych. Chociaż to rozwiązało problem konieczności ręcznego dostosowania czasu letniego, chcieliśmy proces jest prostszy, bez konieczności wyszukiwania ciągu cyfr i liter dla każdej z nich Lokalizacja.

Przekonwertowaliśmy dane ze strony internetowej do bazy danych, z której możesz korzystać bezpośrednio w swoich szkicach Arduino. Podążać ten link aby bezpośrednio pobrać plik zip ze szkicem Arduino.

Sama baza danych jest przechowywana w pliku strefa_czasowa.h. Korzystając z bazy danych, kod SimpleTime wygląda tak:

Modyfikacje przykładu SimpleTime podświetliliśmy na żółto. Ta linia pozwoli szkicowi na korzystanie z bazy danych:

#include "strefy_czasowe.h"

Ta linia konfiguruje Twoją lokalizację:

const char* location = "Ameryka/Denver";

Istnieje 461 możliwych lokalizacji. Możesz znaleźć dostępne lokalizacje, patrząc na strefa_czasowa.h pliku lub patrząc na listę stref czasowych na ta strona internetowa.

Na koniec następujący wiersz mówi ESP32, aby zsynchronizował czas z serwerem internetowym za pomocą protokołu Network Time Protocol (NTP):

configTimeWithTz (getTzByLocation (lokalizacja), ntpServer);

Konkretny internetowy serwer czasu można skonfigurować za pomocą następującej linii, chociaż domyślny powinien działać dobrze dla Ciebie:

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

Należy również upewnić się, że informacje dotyczące bezprzewodowego punktu dostępowego zostały dodane w następujących dwóch wierszach:

const char* ssid = "TWÓJ_SSID";
const char* hasło = "TWÓJ_PASS";

Zastępować TWÓJ_SSID z nazwą Twojej sieci bezprzewodowej i TWOJA PRZEPUSTKA z hasłem użytym do połączenia się z nim.

Związane z: Sposoby bezpiecznej konfiguracji routera bezprzewodowego jako publicznego punktu dostępu

Kończąc

Po zakończeniu czynności konfiguracyjnych, prześlij szkic do ESP32 i będzie używał właściwej godziny przez cały rok bez żadnej interwencji!

Chociaż ten kod stanowi dobry punkt wyjścia, istnieją bardziej przyjazne dla użytkownika sposoby osiągnięcia tego samego. Na przykład możesz chcieć zezwolić użytkownikowi na skonfigurowanie wszystkiego ze strony internetowej, zamiast robić to w czasie kompilacji. Wykonanie tego wymaga trochę więcej pracy, ponieważ w szkicu Arduino trzeba by wykonać następujące czynności:

  1. Skonfiguruj ESP32 jako bezprzewodowy punkt dostępowy do wstępnej konfiguracji
  2. Uruchom serwer sieciowy, aby zaprezentować użytkownikowi stronę konfiguracyjną
  3. Utwórz formularz HTML, aby umożliwić użytkownikowi wprowadzenie informacji o sieci bezprzewodowej i wybranie swojej lokalizacji
  4. Utwórz kod do przetwarzania wyborów użytkownika i przechowuj go w pamięci nieulotnej
  5. Przy włączeniu zasilania na pokładzie:
    • Odczytaj konfigurację z pamięci nieulotnej
    • Połącz się z siecią bezprzewodową i zsynchronizuj czas

Projekt, który demonstruje te kroki, to Zegar ESP32 Dali. To właśnie ten projekt doprowadził nas do znalezienia lepszego sposobu na synchronizację czasu na ESP32.

Źródło: Marcio Teixeira/Flickr

Sprawdź kod źródłowy dla ESP32 Dali Clock, aby zobaczyć, jak wyświetlić w pełni funkcjonalną stronę konfiguracji sieciowej. Strona konfiguracji pokazuje rozwijane menu, które pozwala użytkownikowi wybrać swoją lokalizację i strefę czasową oraz umożliwia również ręczne ustawienie czasu za pomocą widgetu czasu i kalendarza, dla niepołączonych alternatywny!

Synchronizacja czasu sieciowego na podstawie lokalizacji w ESP32

Masz teraz wszystkie informacje, których potrzebujesz, aby automatycznie ustawić zegar ESP32 na prawidłową godzinę, a także dostosować go do czasu letniego. Jest to idealne rozwiązanie w przypadku projektów IoT, których nie chcesz ręcznie dostosowywać.

7 interesujących projektów wykorzystujących ESP32 do generowania wideo kompozytowego

Jeśli szukasz ciekawych projektów z ESP32, jesteś we właściwym miejscu.

Czytaj dalej

UdziałĆwierkaćE-mail
Powiązane tematy
  • majsterkowanie
  • ESP32
  • Internet przedmiotów
O autorze
Marcio Teixeira (4 opublikowane artykuły)

Jestem twórcą specjalizującym się w oprogramowaniu open-source, elektronice, druku 3D, grafice komputerowej i retro-computingu.

Więcej od Marcio Teixeira

Zapisz się do naszego newslettera

Dołącz do naszego newslettera, aby otrzymywać porady techniczne, recenzje, bezpłatne e-booki i ekskluzywne oferty!

Kliknij tutaj, aby zasubskrybować