Praca z ESP32 lub innym czasem mikrokontrolera jest bardzo ważna, ponieważ wbudowany timer nie jest tak dokładny, abyśmy mogli użyć NTP serwer, aby pobrać czas rzeczywistego i może przechowywać go w zmiennej, której można użyć później w kodzie ESP32.
Network Time Protocol (NTP) wykorzystuje skoordynowany czas uniwersalny (UTC), który synchronizuje zegar systemowy z dużą precyzją i dokładnością. W mniejszych sieciach NTP może zapewnić nam zegary tak dokładne jak 1 ms, podczas gdy większe sieci, takie jak LAN (sieć lokalna) NTP może zapewnić dokładność dziesiątek milisekund przez Internet. Korzystanie z tego dokładnego zegara ESP32 może wykonywać instrukcje w określonym czasie.
Ten przewodnik zawiera następujące treści:
1: Wprowadzenie do NTP (protokół czasowy sieci)
NTP jest akronimem NEtwork Tja ja PRotocol jest standardem używanym do synchronizacji urządzeń czasowych z ich strefą czasową. Protokół czasu sieci synchronizuje czas wszystkich urządzeń sieciowych z UTC znanym również jako skoordynowany czas uniwersalny.
UTC jest podobny do GMT (średni czas Greenwich), ale nie zmienia się i pozostaje taki sam na całym świecie. Główną ideą korzystania z UTC jest odczytanie czasu z NTP serwer i stosując przesunięcie UTC, możemy uzyskać czas lokalny zgodnie z naszą strefą czasową.
2: Ustawienia serwera NTP i czas
Aby odczytać czas z serwera NTP, musimy zadeklarować następujące zmienne wewnątrz kodu za pomocą tych zmiennych, możemy uzyskać czas z serwera NTP.
1: serwer NTP
Będziemy poprosić o czas od basen.NTP.org który zawiera dane na całym świecie na serwerze i każdy może żądać czasu lokalnego za pomocą tej puli. Poniżej znajdują się inne serwery, do których możemy uzyskać dostęp:
Obszar | Nazwa hosta |
---|---|
Na całym świecie | basen.NTP.org |
Azja | Azja.basen.NTP.org |
Europa | Europa.basen.NTP.org |
Ameryka północna | Ameryka północna.basen.NTP.org |
Oceania | Oceania.basen.NTP.org |
Ameryka Południowa | Ameryka Południowa.basen.NTP.org |
2: Przesunięcie GMT
Przesunięcie GMT opisuje różnicę czasową w godzinach między strefą czasową, którą żyjesz w GMT. Na przykład, jeśli używamy strefy czasowej USA, możemy ją ustawić UTC = -11: 00.
3: Offset światła dziennego
Tutaj przesunięcie światła dziennego to czas oszczędzania światła, który zwykle jest traktowany jako 1 godzina. Czas oszczędzania światła oznacza przeniesienie zegara 1 godzinę naprzód i ponowne zmiana ich z powrotem zimą. To polecenie jest zwykle używane, gdy używana jest niestandardowa strefa czasowa i stosuje się regułę oszczędzania światła.
Ponieważ omówiliśmy podstawy serwera NTP, sprawdzimy, w jaki sposób możemy wysłać żądanie na serwer NTP i odczytać czas lokalny za pomocą ESP32 z kodem Arduino IDE.
3: Drukowanie w czasie rzeczywistym za pomocą funkcji printLocaltime ()
printLocaltime () funkcja wywoła getLocaltime () funkcja, która wysyła żądanie do serwera NTP i przechowuje datę i godzinę otrzymania Timeinfo zmienny.
1: Kod do drukowania czasu rzeczywistego
Wklej kod dla serwera klienta NTP w Arduino IDE Editor. Podłącz ESP32 z komputerem, wybierz port COM i prześlij kod.
#włączaćKod zaczął się od włączenia biblioteki Wi -Fi i czasu. Wifi Biblioteka pomoże połączyć ESP32 z siecią czas Biblioteka obsługuje synchronizację serwera NTP.
Po tym SSID i hasło sieci, z którymi połączy się ESP32. Zastąp swój poświadczenie sieciowe tutaj. Następnie zdefiniowaliśmy Przesunięcie GMT jako 18000 sekund (UTC+5 godzin). Możesz wymienić własną stref timeT UTC tutaj. Kliknij link, aby uzyskać przesunięcie GMT dla swojej strefy czasowej.
Ponadto adres serwera NTP jest określony za pomocą polecenia:
const char* ntpserver = "pula.NTP.org ";
To polecenie automatycznie wybiera serwer czasu, który Cię przeszukie. Możemy jednak ustawić strefę czasową za pomocą serwerów NTP wyjaśnionych w Serwer NTP Sekcja.
Na końcu konfigurujemy ESP32 jako klienta NTP i aby uzyskać datę i godzinę. Do tego użyliśmy configtime () funkcjonować.
Wreszcie, używając printLocaltime () funkcja, bieżąca data i godzina są drukowane na monitor szeregowych. Ta funkcja zawiera strukturę czasową tm który przechowuje wszystkie informacje w Timeinfo zmienny.
Następujące polecenia reprezentują Timeinfo Struktura.
Seryjny.println (i timeinfo, „ %A, %b %d %y %h: %m: %s”);
Każda litera struktury czasu odnosi się do konkretnej informacji:
Specyfikatory | Informacja |
---|---|
%A | Dzień powrotu tygodnia |
%B | Miesiąc zwrotu |
%D | Dzień powrotu miesiąca |
%Y | Zwrot bieżącego roku |
%H | Zwrócić bieżącą godzinę |
%M | Zwrócić bieżące minuty |
%S | Zwróć bieżące sekundy |
2: Wyjście
Po przesłaniu kodu ESP32 połączy się z siecią Wi -Fi i wyśle żądanie do serwera NTP, aby otrzymać bieżącą datę i godzinę. Następujące wyjście można zobaczyć na monitor szeregowy Arduino.
Obecny czas na moim komputerze i ESP32 jest dopasowany.
Z powodzeniem odczytujemy czas z serwera NTP za pomocą ESP32 jako klienta.
Wniosek
Czas jest bardzo ważny dla aplikacji, takich jak stemplowanie czasu i wykonywanie instrukcji w określonych czasach, aby wygenerować wyjście. Wbudowane timery nie są tak dokładne, więc możemy użyć serwera NTP do odczytania bieżącej godziny i daty. Tym razem można przechowywać w zmiennej do użycia w naszym kodzie. Ta lekcja pomaga uzyskać dokładny czas w dowolnej strefie czasowej na całym świecie za pomocą ESP32.