Spisu treści:

Zegar internetowy: wyświetlanie daty i godziny za pomocą OLED za pomocą ESP8266 NodeMCU z protokołem NTP: 6 kroków
Zegar internetowy: wyświetlanie daty i godziny za pomocą OLED za pomocą ESP8266 NodeMCU z protokołem NTP: 6 kroków

Wideo: Zegar internetowy: wyświetlanie daty i godziny za pomocą OLED za pomocą ESP8266 NodeMCU z protokołem NTP: 6 kroków

Wideo: Zegar internetowy: wyświetlanie daty i godziny za pomocą OLED za pomocą ESP8266 NodeMCU z protokołem NTP: 6 kroków
Wideo: Using HT16K33 4 digit seven segment display with ESP8266 NodeMCU and D1 Mini 2024, Listopad
Anonim
Zegar internetowy: wyświetlaj datę i godzinę za pomocą OLED za pomocą ESP8266 NodeMCU z protokołem NTP
Zegar internetowy: wyświetlaj datę i godzinę za pomocą OLED za pomocą ESP8266 NodeMCU z protokołem NTP

Cześć chłopaki, w tej instrukcji zbudujemy zegar internetowy, który będzie pobierał czas z Internetu, więc ten projekt nie będzie wymagał żadnego czasu RTC, będzie potrzebował tylko działającego połączenia internetowego

A do tego projektu potrzebujesz esp8266 który będzie miał wifi aby uzyskać dostęp do internetu i wyświetlacz do wyświetlania czasu na nim a esp8266 będzie pobierał czas z internetu za pomocą protokołu NTP, ntp oznacza protokół czasu sieciowego, więc w zasadzie są serwery ntp w sieci, które służą do synchronizacji zegarów komputerowych i będziemy używać tych serwerów, aby uzyskać czas w naszym projekcie.

Krok 1: Rzeczy, których potrzebujesz

Rzeczy, których potrzebujesz
Rzeczy, których potrzebujesz
Rzeczy, których potrzebujesz
Rzeczy, których potrzebujesz
Rzeczy, których potrzebujesz
Rzeczy, których potrzebujesz

do tego projektu będziesz potrzebować następujących rzeczy:

Esp8266/nodemcu

Oled ssd1306 0,96"

Przewody połączeniowe

Deska do krojenia chleba

Kabel USB

Krok 2: Połączenia

Znajomości
Znajomości

Ten 4-pinowy wyświetlacz OLED komunikuje się z modułem ESP8266 za pomocą protokołu I2C, poniżej znajduje się schemat obwodu i tabela połączeń do połączenia pinów OLED I2C z NodeMCU w celu wyświetlania czasu internetowego.

Krok 3: Pobierz biblioteki

Pobierz biblioteki
Pobierz biblioteki
Pobierz biblioteki
Pobierz biblioteki

Upewnij się, że pobrałeś biblioteki SD1306 w twoim Arduino ide, jak pokazano na obrazku, i upewnij się, że masz również bibliotekę Adafruit GFX, jeśli nie, zainstaluj te dwie biblioteki.

W swoim Arduino IDE przejdź do menedżera bibliotek i wyszukaj NTP i po prostu pobierz bibliotekę klienta NTP po pobraniu, zapoznaj się z obrazem, aby uzyskać dalszą pomoc.

Krok 4: Co to jest NTP

Co to jest NTP
Co to jest NTP

NTP jest jednym z najstarszych sieciowych protokołów internetowych (IP) do synchronizacji zegarów między sieciami komputerowymi. Został zaprojektowany przez Davida L. Millsa z University of Delaware w 1981 roku. Ten protokół może być używany do synchronizacji wielu sieci z uniwersalnym czasem koordynowanym (UTC) w ciągu kilku milisekund. UTC to podstawowy standard czasu, według którego świat reguluje zegar i czas. UTC nie zmienia się i różni się dla różnych lokalizacji geograficznych. NTP wykorzystuje UTC jako odniesienie do czasu i zapewnia dokładny i zsynchronizowany czas w Internecie.

NTP działa w hierarchicznym modelu klient-serwer. Topowy model posiada zegary referencyjne znane jako „stratum0”, takie jak zegary atomowe, fale radiowe, GPS, GSM, które odbierają czas z satelity. Serwery, które otrzymują czas z warstwy 0, nazywane są „warstwą 1”, a serwery, które otrzymują czas z warstwy 1, nazywane są „warstwą 2” i tak dalej. To trwa, a dokładność czasu maleje po każdym etapie. NTP automatycznie wybiera najlepsze z kilku dostępnych źródeł czasu do synchronizacji, co czyni go odpornym na błędy protokołem. Tak więc w tym projekcie otrzymujemy czas z serwera NTP za pomocą ESP8266 NodeMCU i wyświetlamy go na wyświetlaczu OLED. Ten sam rodzaj zegara internetowego został zbudowany przy użyciu ESP32 w poprzednim samouczku.

Krok 5: Część kodowania

Część kodująca
Część kodująca

Aby zażądać daty i godziny, zainicjuj klienta czasu z adresem serwerów NTP. Aby uzyskać większą dokładność, wybierz adres serwerów NTP, które znajdują się w pobliżu Twojego obszaru geograficznego. Tutaj używamy „pool.ntp.org”, który daje serwery z całego świata. Jeśli chcesz wybrać serwery z Azji, możesz użyć „asia.pool.ntp.org”. timeClient pobiera również przesunięcie czasu UTC w milisekundach strefy czasowej. Na przykład przesunięcie UTC dla Indii wynosi +5:30, więc przeliczamy to przesunięcie w milisekundach, co jest równe 5*60*60+30*60 = 19800.

Powierzchnia. Przesunięcie czasu UTC (godziny i minuty). Przesunięcie czasu UTC (sekundy)

INDIE +5:30 1800

LONDYN 0:00. 0

NOWY JORK -5:00 -18000

Skopiuj następujący kod i wprowadź w kodzie swoje wifi i hasło i wprowadź przesunięcie czasu w kodzie, a następnie prześlij go na swoje płyty esp8266.:

#include "NTPClient.h"#include "ESP8266WiFi.h" // udostępnia procedury Wi-Fi specyficzne dla ESP8266, które wywołujemy, aby połączyć się z siecią #include "WiFiUdp.h" //obsługuje wysyłanie i odbieranie pakietów UDP

#include "SPI.h" // SPI do łączenia OLED z NodeMCu

#include "Adafruit_GFX.h"

#include "Adafruit_SSD1306.h"

#define SCREEN_WIDTH 128 // Szerokość wyświetlacza OLED w pikselach

#define SCREEN_HEIGHT 64 // Wysokość wyświetlacza OLED w pikselach

#define OLED_RESET -1

Wyświetlacz Adafruit_SSD1306 (SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

constchar *ssid = "twójwifisid";

const char *hasło = "twoje hasło do Wi-Fi";

WiFiUDP ntpUDP;

Klient czasu NTPClient (ntpUDP, "pool.ntp.org", 19800, 60000);

String arr_days={"Niedziela", "Poniedziałek", "Wtorek", "Środa", "Czwartek", "Piątek", "Sobota"};

Ciąg data_godzina; // Możesz określić pulę serwera czasu i przesunięcie (w sekundach, można // zmienić później za pomocą setTimeOffset()). Dodatkowo można określić // interwał aktualizacji (w milisekundach, można go zmienić za pomocą setUpdateInterval()).

pusta konfiguracja()

{

Serial.początek(115200);

WiFi.begin(SSid, hasło);

podczas (WiFi.status() != WL_CONNECTED)

{

opóźnienie (500);

Serial.print (".");

}

if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C))

{

Serial.println(F("alokacja SSD1306 nie powiodła się"));

dla(;;); // Nie kontynuuj, pętla na zawsze

}

display.clearDisplay();

display.setTextSize(2); // Narysuj tekst w skali 2X

display.setTextColor (BIAŁY);

display.setCursor(5, 2);

display.println("WITAJCIE");

display.println("instrukcje");

display.println("Projekt");

display.display();

opóźnienie(3000);

czasKlient.początek();

}

pusta pętla()

{

timeClient.update();

display.clearDisplay();

Serial.println(timeClient.getFormattedTime());

display.setTextSize(2); // Narysuj tekst w skali 2X

display.setTextColor(NIEBIESKI);

display.setCursor(0, 2);

int hh = czasKlient.getGodziny();

int mm = timeClient.getMinutes();

int ss = klient.getSeconds();

jeśli(hh>12)

{

gg=gg-12;

display.print(hh);

display.print(":");

wyśw.druk (mm);

display.print(":");

display.print(ss);

display.println("PM");

}

w przeciwnym razie

{

display.print(hh);

display.print(":");

wyśw.druk (mm);

display.print(":");

display.print(ss);

display.println("AM");

}

int dzień = czasKlient.getDay();

display.println("'"+arr_dni[dzień]+"'");

data_godzina = godzinaKlient.getFormattedDate();

int data_indeksu = data_godzina.indexOf("T");

Data ciągu = data_godzina.substring(0, data_indeksu);

Serial.println(data);

display.println(data);

display.display();

// Pokaż początkowy tekst }

Krok 6: Uzyskiwanie daty i czasu

Uzyskiwanie daty i czasu
Uzyskiwanie daty i czasu

jeśli wszystko prawidłowo podłączono i poprawnie przesłałeś kod, będziesz mógł zobaczyć swój zegar ntp działający na wyświetlaczu oled jako mój podczas pracy na wyświetlaczu oled. Proszę odnieść się do obrazu do wyjścia.

Zalecana: