Konfigurowanie zegara ESP32 NTP jest stosunkowo proste, ponieważ ESP32 ma wbudowaną obsługę NTP i istnieje wiele bibliotek, które można pomóc w wyświetlaczu LCD. Po skonfigurowaniu zegar ESP32 NTP może być używany do śledzenia czasu z dużą dokładnością, nawet po odłączeniu się od Internetu.
Teraz zaprojektujemy zegar oparty na NTP za pomocą ESP32.
Wymagane komponenty
Aby zaprojektować zegar internetowy NTP za pomocą ESP32 następujących komponentów:
Wprowadzenie do NTP (protokół czasu sieciowego)
Network Time Protocol (NTP) to protokół sieciowy do synchronizacji zegara między systemami komputerowymi. Służy do zapewnienia, że zegary na różnych urządzeniach są zsynchronizowane, nawet jeśli znajdują się w różnych częściach świata.
NTP działa przy użyciu hierarchii serwerów czasowych, przy czym każdy serwer synchronizuje swój zegar z dokładniejszym źródłem czasu. Pozwala to urządzeniom synchronizować swoje zegary z wysokim poziomem dokładności, zwykle w ciągu kilku milisekund.
NTP jest ważnym protokołem dla wielu aplikacji, w tym sieci komputerowych, transakcji finansowych i badań naukowych. Służy również do synchronizacji czasu wyświetlanego na zegarach cyfrowych i innych urządzeniach.
Jak działa NTP?
Network Time Protocol (NTP) działa poprzez wysyłanie i odbieranie znaczników czasu między serwerami a klientami, korzystając z kombinacji bieżącego czasu i czasu wymaganego przez wiadomość, aby wiadomość została wysłana i odebrana.
Serwer NTP utrzymuje bardzo precyzyjny zegar referencyjny i wykorzystuje ten zegar do regulacji zegarów na innych urządzeniach. Klient NTP wysyła żądanie do serwera, a serwer odpowiada aktualnym czasem i innymi danymi, takimi jak czas podróży w obie strony i aktualny czas serwera. Klient następnie wykorzystuje te informacje do dostosowania własnego zegara i utrzymania dokładnego czasu.
Klient NTP dostosowuje swój lokalny zegar za pomocą internetowego serwera NTP za pomocą opóźnienia łącza i lokalnego przesunięcia zdefiniowanego w kodzie Arduino.
Zegar internetowy z wyświetlaczem ESP32 i LCD za pomocą klienta NTP
Projektowanie zegara opartego na serwerze NTP za pomocą ESP32 ma wiele korzyści. Ponieważ nie jest to zależne od wewnętrznego modułu RTC, abyśmy mogli uzyskać dokładny czas za pomocą serwera NTP. Aby najpierw zaprojektować ten zegar, musimy zainstalować niezbędne biblioteki w Arduino IDE.
Instalowanie wymaganych bibliotek
Aby zrobić zegar internetowy ESP32 za pomocą serwera NTP i wyświetlić czas na ekranie LCD, musimy zainstalować następujące biblioteki:
Kliknij link, aby pobrać bibliotekę NTPClient.
Aby pobrać bibliotekę czasu, otwórz link i kliknij Pobierz zip.
Po pobraniu obu bibliotek otwórz IDE i przejdź do: Szkic> Dołącz bibliotekę> Dodaj .Biblioteka zip.
Zainstaluj obie biblioteki jeden po drugim. Teraz, aby wyświetlić czas na ekranie LCD, otwórz menedżer biblioteki i zainstaluj Liquidcrystal I2C biblioteka przez Szczery.
Po zainstalowaniu wymaganych bibliotek możemy teraz zintegrować ESP32 z wyświetlaczem LCD.
Okablowanie LCD do ESP32
Możliwe jest podłączenie wyświetlacza LCD z ESP32 za pośrednictwem jego pinów I2C. SDA Pin jest na D21 i SCL/SCK jest w D22. Połącz ESP32 z LCD, jak pokazano na poniższym obrazku:
Poniżej znajdują się połączenia:
I2C LCD | ESP32 |
---|---|
VCC | Vin |
GND | GND |
SDA | D21 |
Scl | D22 |
Uzyskanie adresu LCD I2C
Po podłączeniu LCD I2C z ESP32 ważne jest, aby sprawdzić adres I2C. W przypadku, gdy ktoś używa więcej niż jednego urządzenia w tej samej magistrali I2C, ESP32 nie będzie w stanie komunikować się z oboma.
Zawsze używaj urządzeń z różnymi adresami I2C. Aby uzyskać adres I2C, użyjemy Drut biblioteka. Aby uzyskać bardziej szczegółowy kod Arduino Przeczytaj artykuł, uzyskaj adres I2C w ESP32 za pomocą Arduino IDE.
Tutaj używany przez nas lcd ma adres I2C 0x27.
Kod zegara internetowego ESP32
Otwórz IDE i prześlij kod, aby połączyć się z serwerem NTP. Po podłączeniu ESP32 z serwerem NTP za pomocą połączenia Wi -Fi zdefiniowanego w kodzie, Arduino Serial Monitor i I2C LCD wyświetlą czas rzeczywistego.
#włączać
#włączać
#włączać
#włączać
#włączać
int lcd_columns = 16; /*Zdefiniuj rozmiar LCD*/
int lcd_rows = 2;
Liquidcrystal_I2C LCD (0x27, LCD_COLUMNS, LCD_ROWS); /*0x27 I2C Adres dla LCD*/
const char *ssid = "ssid"; /*Zastąp swoją sieć SSID*/
const char *hasło = "hasło"; /*Zastąp hasłem sieciowym*/
Wifiudp ntpudp;
NTPClient Timeclient (NTPUDP, „Czas.nist.Gov ”, 18000, 60000);
CHAR TIME [] = "TIME: 00: 00: 00";
Char Data [] = "Data: 00/00/2000";
BYTE LAST_SECOND, Second_, Minute_, Hour_, Day_, Month_;
int rok_;
void setup ()
Seryjny.rozpocząć (115200);
LCD.w tym(); /*Zainicjuj wyświetlacz LCD*/
LCD.FRETLIGHT (); /*Na podświetleniu LCD*/
LCD.setCursor (0, 0); /*Ustaw kursor*/
LCD.druk („czas”); /*Czas wydruku na LCD*/
LCD.setCursor (0, 1); /*Ustaw kursor LCD*/
LCD.druk (data); /*Data wydruku*/
Wifi.początek (SSID, hasło); /*Rozpocznij wifi*/
Seryjny.Drukuj („Łączenie.");
While (WiFi.status() != Wl_connected)
opóźnienie (500);
Seryjny.wydrukować(".");
Seryjny.println („Connected”);
Timeclient.zaczynać();
opóźnienie (1000);
LCD.jasne(); /*Wyczyść wyświetlacz LCD*/
void Loop ()
Timeclient.aktualizacja();
niepodpisany długi UNIX_EPOCH = Timeclient.benePochtime (); // Uzyskaj czas epoch z serwera NTP
Second_ = Second (UNIX_EPOCH);
if (last_second != second_)
minute_ = minute (UNIX_EPOCH);
hour_ = hour (UNIX_EPOCH);
dzień_ = dzień (unix_epoch);
miesiąc_ = miesiąc (UNIX_EPOCH);
rok_ = rok (UNIX_EPOCH);
Czas [12] = Second_ % 10 + 48;
Czas [11] = Second_ / 10 + 48;
Czas [9] = minute_ % 10 + 48;
Czas [8] = minute_ / 10 + 48;
Czas [6] = hour_ % 10 + 48;
Czas [5] = hour_ / 10 + 48;
Data [5] = dzień_ / 10 + 48;
Data [6] = dzień_ % 10 + 48;
Data [8] = miesiąc_ / 10 + 48;
Data [9] = miesiąc_ % 10 + 48;
Data [13] = (rok_ / 10) % 10 + 48;
Data [14] = rok_ % 10 % 10 + 48;
Seryjny.println (czas); /*Drukuje czas na monitor szeregowych*/
Seryjny.println (data); /*Data wydruku na monitorze szeregowym*/
LCD.setCursor (0, 0); /*Ustaw kursor LCD*/
LCD.wydrukować (czas); /*Czas wyświetlania na LCD*/
LCD.setCursor (0, 1); /*Ustaw kursor LCD*/
LCD.druk (data); /*Data wyświetlania na LCD*/
last_second = second_;
opóźnienie (200);
Korzystając z powyższego kodu, możemy uzyskać czas NTP z serwera. Aby uzyskać prawidłowy czas na LCD, musisz wprowadzić zmiany według swojej strefy czasowej.
NTPClient Timeclient (NTPUDP, „Asia.basen.NTP.org ", 18000, 60000);
Obecnie kraj, w którym mieszkam, jest o 5 godzin przed skoordynowanym czasem uniwersalnym (czas UTC). Muszę więc przekonwertować 5 godzin na sekundy.
+5 godzin = 5x60x60 = 18 000 sekund
Zmień tę strefę czasową zgodnie z Twoją lokalizacją. Możesz użyć Google, aby sprawdzić GMT Offset for Twój kraj.
Dodatkowo zmień sieć SSID i hasło zdefiniowane w kodzie.
Kod rozpoczął się od wywołania zainstalowanych bibliotek. I2C LCD, ESP32 WiFi, NTPClient i Time Library.
Ntpclient.H Biblioteka połączy ESP32 z serwerem NTP i Wifiudp.H Wyślę i odbiera wiadomości UDP.
Do komunikacji z protokołem UDP NTP Time Server jest używany. Aby uzyskać czas z serwera internetowego NTP tam zmienne adres serwera NTP, przesunięcie NTP i interwał NTP należy zdefiniować.
NTPClient Timeclient (NTPUDP, „Asia.basen.NTP.org ", 18000, 60000);
Serwer NTP wysyła informacje o czasie do ESP32. Otrzymany czas jest w UNIX Format czasu czasu (Unix Epoch). Biblioteka czasu przekonwertuje czas epoch na minuty, godziny i format dzienny.
Następny adres I2C (0x27) LCD jest zdefiniowane. Ponadto konfigurowany jest również rozmiar LCD 16 × 2.
W pętla funkcjonować Timeclient.aktualizacja() Funkcja otrzyma czas z serwera NTP i przechowuje ją w zmiennej czasowej.
Wyjście
Na monitor szeregowych zobaczysz poniższe dane:
Na wyświetlaczu LCD wyświetla się zegar z zaktualizowaną datą i godziną można zobaczyć.
Wniosek
ESP32 to kompaktowa płyta IoT oparta na mikrokontrolerze. W tym artykule obejmuje wszystkie kroki potrzebne do zaprojektowania zegara opartego na serwerze NTP w czasie rzeczywistym. Wyjście jest wyświetlane na ekranie LCD za pomocą kodu Arduino. Ustawiając prawidłowy serwer NTP, każdy może zaprojektować zegar na podstawie swojej strefy czasowej za pomocą kodu ESP32 i Arduino.