Obsah:

Internetové hodiny: Zobrazení data a času pomocí OLED pomocí ESP8266 NodeMCU s protokolem NTP: 6 kroků
Internetové hodiny: Zobrazení data a času pomocí OLED pomocí ESP8266 NodeMCU s protokolem NTP: 6 kroků

Video: Internetové hodiny: Zobrazení data a času pomocí OLED pomocí ESP8266 NodeMCU s protokolem NTP: 6 kroků

Video: Internetové hodiny: Zobrazení data a času pomocí OLED pomocí ESP8266 NodeMCU s protokolem NTP: 6 kroků
Video: Measure Temperature and Humidity WiFi with ESP32 DHT11 and DHT22 - Robojax 2024, Listopad
Anonim
Internetové hodiny: Zobrazení data a času pomocí OLED pomocí ESP8266 NodeMCU s protokolem NTP
Internetové hodiny: Zobrazení data a času pomocí OLED pomocí ESP8266 NodeMCU s protokolem NTP

Ahoj kluci v tomto návodu, postavíme internetové hodiny, které získají čas z internetu, takže tento projekt nebude ke spuštění potřebovat žádný RTC, bude potřebovat pouze funkční připojení k internetu

A pro tento projekt potřebujete esp8266, který bude mít wifi pro přístup k internetu a displej pro zobrazení času na něm a esp8266 bude načítat čas z internetu pomocí protokolu NTP, ntp znamená protokol síťového času, takže v podstatě existují servery ntp na webu, které se používají k synchronizaci hodin počítače, a budeme používat bthose servery, abychom získali čas v našem projektu.

Krok 1: Věci, které potřebujete

Věci, které potřebujete
Věci, které potřebujete
Věci, které potřebujete
Věci, které potřebujete
Věci, které potřebujete
Věci, které potřebujete

pro tento projekt budete potřebovat následující věci:

Esp8266/nodemcu

Oled ssd1306 0,96"

Propojovací vodiče

Prkénko

USB kabel

Krok 2: Připojení

Připojení
Připojení

Tento 4pinový OLED displej komunikuje s modulem ESP8266 pomocí protokolu I2C, níže je schéma zapojení a tabulka připojení pro připojení pinů OLED I2C s NodeMCU k zobrazení internetového času.

Krok 3: Stáhněte si knihovny

Stáhněte si knihovny
Stáhněte si knihovny
Stáhněte si knihovny
Stáhněte si knihovny

Ujistěte se, že jste si do Arduino ide stáhli knihovny SD1306, jak je znázorněno na obrázku, a také knihovnu Adafruit GFX, pokud ne, nainstalujte tyto dvě knihovny.

Ve vašem Arduino IDE přejděte do Správce knihoven a vyhledejte NTP a stáhněte si klientskou knihovnu NTP, jak jsem stáhl, další pomoc naleznete na obrázku.

Krok 4: Co je NTP

Co je NTP
Co je NTP

NTP je jedním z nejstarších síťových internetových protokolů (IP) pro synchronizaci hodin mezi počítačovými sítěmi. Byl navržen Davidem L. Millsem z University of Delaware v roce 1981. Tento protokol lze použít k synchronizaci mnoha sítí do koordinovaného světového času (UTC) během několika milisekund. UTC je primární časový standard, podle kterého svět reguluje hodiny a čas. UTC se pro různé geografické polohy nemění a liší se. NTP používá jako referenci času UTC a poskytuje přesný a synchronizovaný čas na internetu.

NTP funguje na hierarchickém modelu klient-server. Top model má referenční hodiny známé jako „stratum0“jako atomové hodiny, rádiové vlny, GPS, GSM, které přijímají čas ze satelitu. Servery, které přijímají čas ze stratum0, se nazývají „stratum1“a servery, které přijímají čas ze stratum1, se nazývají „stratum2“atd. To pokračuje a přesnost času se po každé fázi snižuje. NTP automaticky vybere to nejlepší z několika dostupných časových zdrojů pro synchronizaci, což z něj činí protokol odolný vůči chybám. Tady v tomto projektu získáváme čas ze serveru NTP pomocí ESP8266 NodeMCU a zobrazujeme jej na OLED displeji. Stejný druh internetových hodin je vytvořen pomocí ESP32 v předchozím tutoriálu.

Krok 5: Část kódování

Kódovací část
Kódovací část

Chcete -li požádat o datum a čas, inicializujte časového klienta s adresou serverů NTP. Pro lepší přesnost zvolte adresu serverů NTP, které jsou blízko vaší geografické oblasti. Zde používáme „pool.ntp.org“, který poskytuje servery z celého světa. Pokud si přejete vybrat servery z Asie, můžete použít „asia.pool.ntp.org“. timeClient také trvá časový posun UTC v milisekundách vašeho časového pásma. Offset UTC pro Indii je například +5: 30, takže tento posun převedeme na milisekundy, což se rovná 5*60*60 +30*60 = 19800.

Plocha. Časový posun UTC (hodiny a minuty). Časový posun UTC (sekundy)

INDIE +5: 30 19800

LONDÝN 0:00. 0

NEW YORK -5: 00 -18000

Zkopírujte prosím následující kód a do kódu zadejte své wifi a heslo & Zadejte do kódu časový posun a poté jej nahrajte na desky esp8266.:

#include "NTPClient.h" #include "ESP8266WiFi.h" // poskytuje ESP8266 specifické Wi-Fi rutiny, které voláme pro připojení k síti #include "WiFiUdp.h" // zpracovává odesílání a přijímání UDP balíčků

#include "SPI.h" // SPI pro propojení OLED s NodeMCu

#include "Adafruit_GFX.h"

#include "Adafruit_SSD1306.h"

#define SCREEN_WIDTH 128 // OLED šířka displeje, v pixelech

#define SCREEN_HEIGHT 64 // OLED výška displeje, v pixelech

#define OLED_RESET -1

Displej Adafruit_SSD1306 (SCREEN_WIDTH, SCREEN_HEIGHT, & Wire, OLED_RESET);

constchar *ssid = "yourwifissid";

const char *heslo = "yourwifipass";

WiFiUDP ntpUDP;

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

Řetězec arr_days = {"neděle", "pondělí", "úterý", "středa", "čtvrtek", "pátek", "sobota"};

Řetězec date_time; // Můžete zadat fond časových serverů a offset (v sekundách, // lze později změnit pomocí setTimeOffset ()). Navíc můžete zadat // interval aktualizace (v milisekundách, lze změnit pomocí setUpdateInterval ()).

neplatné nastavení ()

{

Serial.begin (115200);

WiFi.begin (ssid, heslo);

while (WiFi.status ()! = WL_CONNECTED)

{

zpoždění (500);

Serial.print (".");

}

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

{

Serial.println (F ("Přidělení SSD1306 se nezdařilo"));

pro(;;); // Nepokračujte, smyčka navždy

}

display.clearDisplay ();

display.setTextSize (2); // Nakreslete text v měřítku 2X

display.setTextColor (BÍLÁ);

display.setCursor (5, 2);

display.println („VÍTEJTE“);

display.println ("instructables");

display.println („Projekt“);

display.display ();

zpoždění (3000);

timeClient.begin ();

}

prázdná smyčka ()

{

timeClient.update ();

display.clearDisplay ();

Serial.println (timeClient.getFormattedTime ());

display.setTextSize (2); // Nakreslete text v měřítku 2X

display.setTextColor (MODRÁ);

display.setCursor (0, 2);

int hh = timeClient.getHours ();

int mm = timeClient.getMinutes ();

int ss = timeClient.getSeconds ();

pokud (hh> 12)

{

hh = hh-12;

display.print (hh);

display.print (":");

displej.print (mm);

display.print (":");

display.print (ss);

display.println („PM“);

}

jiný

{

display.print (hh);

display.print (":");

displej.print (mm);

display.print (":");

display.print (ss);

display.println („AM“);

}

int den = timeClient.getDay ();

display.println ("'"+arr_days [den]+"'");

date_time = timeClient.getFormattedDate ();

int index_date = date_time.indexOf ("T");

Řetězec date = date_time.substring (0, index_date);

Serial.println (datum);

display.println (datum);

display.display ();

// Zobrazit počáteční text}

Krok 6: Získání data a času

Získání data a času
Získání data a času

pokud jste vše správně připojili a také správně nahráli kód, pak uvidíte, že vaše hodiny ntp běží na oled displeji jako moje běží na oled displeji. Výstup najdete na obrázku.

Doporučuje: