ESP32 NTP Client-Server: Pobierz datę i godzinę – Arduino IDE

Esp32 Ntp Client Server Pobierz Date I Godzine Arduino Ide



ESP32 to oparta na mikrokontrolerze płyta Internet of Things (IoT), którą można połączyć z szeroką gamą urządzeń. ESP32 jest szeroko stosowany w projektach opartych na IoT.

Praca z ESP32 lub innym czasem mikrokontrolera jest bardzo ważna, ponieważ wbudowany timer nie jest tak dokładny, więc możemy użyć NTP serwer do pobierania w czasie rzeczywistym i może przechowywać go w zmiennej, której można później użyć w kodzie ESP32.

Network Time Protocol (NTP) wykorzystuje uniwersalny czas koordynowany (UTC), który synchronizuje zegar systemowy z dużą precyzją i dokładnością. W mniejszych sieciach NTP może zapewnić nam zegary z dokładnością do 1 ms, podczas gdy większe sieci, takie jak LAN (sieć lokalna), NTP może zapewnić dokładność dziesiątek milisekund przez Internet. Za pomocą tego dokładnego zegara ESP32 może wykonywać instrukcje o określonej godzinie.







Ten przewodnik zawiera następujące treści:



  1. Wprowadzenie do NTP (Network Time Protocol)
  2. Serwer NTP i ustawienia czasu



  3. Drukowanie w czasie rzeczywistym za pomocą funkcji printLocalTime().





1: Wprowadzenie do NTP (Network Time Protocol)

NTP to skrót od N sieć T do zrobienia P rotocol to standard używany do synchronizacji czasu urządzeń z ich strefą czasową. Protokół czasu sieciowego synchronizuje czas wszystkich urządzeń sieciowych z czasem UTC znanym również jako uniwersalny czas koordynowany.

UTC jest jak GMT (Greenwich Mean Time), ale nie zmienia się i pozostaje taki sam na całym świecie. Główną ideą korzystania z UTC jest odczyt czasu z pliku NTP serwer i stosując przesunięcie UTC możemy uzyskać czas lokalny zgodnie z naszą strefą czasową.



2: Serwer NTP i ustawienia czasu

Aby odczytać czas z serwera NTP, musimy zadeklarować następujące zmienne w kodzie za pomocą tych zmiennych, które możemy pobrać z serwera NTP.

  • Serwer NTP
  • Przesunięcie GMT
  • Przesunięcie światła dziennego

2.1: Serwer NTP

Poprosimy o czas od basen.ntp.org który zawiera dane czasu na całym świecie na serwerze i każdy może zażądać swojego czasu lokalnego za pomocą tej puli. Oto kilka innych serwerów, do których możemy uzyskać dostęp:

Powierzchnia Nazwa hosta
Na calym swiecie basen.ntp.org
Azja azja.pool.ntp.org
Europa europe.pool.ntp.org
Ameryka północna ameryka północna.pool.ntp.org
Oceania oceania.pool.ntp.org
Ameryka Południowa ameryka południowa.pool.ntp.org

2.2: Przesunięcie GMT

Przesunięcie GMT opisuje różnicę czasu w godzinach między strefą czasową, w której mieszkasz, a GMT. Na przykład, jeśli używamy strefy czasowej USA, możemy ją ustawić na UTC = -11:00 .

2.3: Przesunięcie światła dziennego

Tutaj przesunięcie światła dziennego to czas letni, który zwykle przyjmuje się jako 1 godzinę. Zmiana czasu na letni polega na przesunięciu wskazówek zegara o 1 godzinę do przodu w okresie letnim i cofnięciu ich w okresie zimowym. To polecenie jest zwykle używane, gdy używana jest niestandardowa strefa czasowa i stosowana jest reguła czasu letniego.

Skoro już omówiliśmy podstawy serwera NTP, teraz sprawdzimy, jak możemy wysłać żądanie do serwera NTP i odczytać czas lokalny za pomocą ESP32 z kodem Arduino IDE.

3: Drukowanie w czasie rzeczywistym za pomocą funkcji printLocalTime().

The printLocalTime() funkcja wywoła tzw getLocalTime() funkcja, która wysyła żądanie do serwera NTP i przechowuje otrzymaną datę i godzinę w pliku informacje o czasie zmienny.

3.1: Kod do drukowania w czasie rzeczywistym

Wklej podany kod dla serwera klienta NTP w edytorze Arduino IDE. Podłącz ESP32 do komputera, wybierz port COM i wgraj kod.

#włącz
#włącz 'czas.h'
stały znak * ssid     = „REPLACE_WITH_YOUR_SSID”;
stały znak * hasło = „REPLACE_WITH_YOUR_PASSWORD”;
stały znak * ntpSerwer = „pool.ntp.org” ;
const long  gmtOffset_sec = 18000 ; /* PRZESUNIĘCIE GMT + 5 GODZINY ( 18000 SEK ) */
const int  daylightOffset_sec = 3600 ; /* 1 przesunięcie godziny względem światła dziennego */
nieważne printLocalTime ( )
{
struct tm informacje o czasie;
jeśli ( ! pobierz czas lokalny ( & informacje o czasie ) ) {
Serial.println ( „Nie udało się uzyskać czasu” ) ;
zwrócić ;
}
Serial.println ( & informacje o czasie, '%A, %B %d %Y %H:%M:%S' ) ;
}
unieważnić konfigurację ( )
{
Serial.początek ( 115200 ) ;
// połączyć się z Wi-Fi
Serial.printf ( 'Łączenie z %s' , ssd ) ;
WiFi.rozpocznij ( ssd, hasło ) ;
podczas gdy ( Stan.WiFi ( ) ! = WL_POŁĄCZONY ) {
opóźnienie ( 500 ) ;
Wydruk.seryjny ( '.' ) ;
}
Serial.println ( „POŁĄCZONY” ) ;
// init i pobierz czas
Czas konfiguracji ( gmtOffset_sec, daylightOffset_sec, ntpServer ) ;
drukujCzasLokalny ( ) ;
// odłącz Wi-Fi jak to nie jest już potrzebny
WiFi.disconnect(true);
Tryb WiFi(WIFI_OFF);
}
pusta pętla ()
{
opóźnienie(1000);
printLocalTime();
}

Kod rozpoczął się od włączenia Wi-Fi i biblioteki czasu. WiFi biblioteka pomoże na chwilę połączyć ESP32 z siecią czas biblioteka obsłuży synchronizację serwera NTP.

Następnie określa się identyfikator SSID i hasło sieci, z którą połączy się ESP32. Zastąp swoje dane logowania do sieci tutaj. Następnie zdefiniowaliśmy Przesunięcie GMT jako 18000 sekund, czyli (UTC + 5 godzin). Tutaj możesz zmienić własną strefę czasową UTC. Podążaj za połączyć aby uzyskać Przesunięcie GMT dla Twojej strefy czasowej.

Dodatkowo podajemy adres serwera NTP za pomocą polecenia:

stały znak * ntpSerwer = „pool.ntp.org” ;

To polecenie automatycznie wybiera serwer czasu, który cię przeszuka. Możemy jednak również ustawić strefę czasową za pomocą serwerów NTP wyjaśnionych w Serwer NTP Sekcja.

Na koniec konfigurujemy ESP32 jako klienta NTP oraz do uzyskiwania daty i czasu. Do tego użyliśmy tzw configTime() funkcjonować.

Wreszcie, korzystając z printLocalTime() funkcji, bieżąca data i godzina są drukowane na monitorze szeregowym. Ta funkcja zawiera strukturę czasową tm który przechowuje wszystkie informacje w informacje o czasie zmienny.

Następujące polecenia reprezentują informacje o czasie Struktura.

Serial.println ( & informacje o czasie, '%A, %B %d %Y %H:%M:%S' ) ;

Każda litera struktury czasu odnosi się do określonej informacji:

Specyfikatory Informacja
%A Dzień powrotu w tygodniu
%B Miesiąc zwrotu
%d Dzień powrotu miesiąca
%Y Zwróć bieżący rok
%H Zwróć aktualną godzinę
%M Zwróć bieżące minuty
%S Zwróć bieżące sekundy

3.2: Wyjście

Po wgraniu kodu ESP32 połączy się z siecią WiFi i wyśle ​​żądanie do serwera NTP w celu odebrania aktualnej daty i godziny. Poniższe dane wyjściowe można zobaczyć na monitorze szeregowym Arduino.

Bieżący czas na moim komputerze i ESP32 są zgodne.

Pomyślnie odczytaliśmy czas z serwera NTP przy użyciu ESP32 jako klienta.

Wniosek

Czas jest bardzo ważny dla aplikacji takich jak znakowanie czasem i wykonywanie instrukcji w określonym czasie w celu generowania danych wyjściowych. Wbudowane timery nie są tak dokładne, więc możemy użyć serwera NTP do odczytania aktualnej godziny i daty. Ten czas może być przechowywany w zmiennej do użycia w naszym kodzie. Ta lekcja pomaga w uzyskaniu dokładnego czasu w dowolnej strefie czasowej na całym świecie za pomocą ESP32.