ESPTOP 10 NTP klient -serwer zdobądź datę i godzinę - Arduino IDE

ESPTOP 10 NTP klient -serwer zdobądź datę i godzinę - Arduino IDE
ESP32 to tablica Internetu rzeczy (IoT) oparta na mikrokontrolerze, 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, 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)
  • 2: Ustawienia serwera NTP i czas
    • 2.1: serwer NTP:
    • 2.2: Przesunięcie GMT:
    • 2.3: Offset światła dziennego
  • 3: Drukowanie w czasie rzeczywistym za pomocą funkcji printLocaltime ()
    • 3.1: Kod do drukowania czasu rzeczywistego
    • 3.2: Wyjście

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.

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

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ć
#include „Czas.H"
const char* ssid = "network ssid";
const char* hasło = "hasło sieciowe";
const char* ntpserver = "pula.NTP.org ";
const Long GMToffset_Sec = 18000; /*Offset GMT +5 godzin (18000 sekund)*/
const int DaylightOffset_Sec = 3600; /*1 godzinę przesunięcia światła dziennego*/
void printLocalTime ()
struct tm timeinfo;
Jeśli(!getLocaltime (& TimeInfo))
Seryjny.println („nie udało się uzyskać czasu”);
powrót;

Seryjny.println (i timeinfo, „ %A, %b %d %y %h: %m: %s”);

void setup ()
Seryjny.rozpocząć (115200);
// Połącz się z Wi -Fi
Seryjny.printf („łączenie się z %S”, SSID);
Wifi.początek (SSID, hasło);
While (WiFi.status() != Wl_connected)
opóźnienie (500);
Seryjny.wydrukować(".");

Seryjny.println („Connected”);
// inicjuj i zdobądź czas
configtime (gmtoffset_sec, DaylightOffset_Sec, ntpserver);
printLocalTime ();
// Odłącz Wi -Fi, ponieważ nie jest już potrzebne
Wifi.odłączyć (true);
Wifi.tryb (wifi_off);

void Loop ()
opóźnienie (1000);
printLocalTime ();

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.