Агуулгын хүснэгт:

Интернет цаг: NTP протокол бүхий ESP8266 NodeMCU ашиглан OLED ашиглан огноо, цагийг харуулах: 6 алхам
Интернет цаг: NTP протокол бүхий ESP8266 NodeMCU ашиглан OLED ашиглан огноо, цагийг харуулах: 6 алхам

Видео: Интернет цаг: NTP протокол бүхий ESP8266 NodeMCU ашиглан OLED ашиглан огноо, цагийг харуулах: 6 алхам

Видео: Интернет цаг: NTP протокол бүхий ESP8266 NodeMCU ашиглан OLED ашиглан огноо, цагийг харуулах: 6 алхам
Видео: Полное руководство по Google Forms - универсальный инструмент для опросов и сбора данных онлайн! 2024, Арванхоёрдугаар сар
Anonim
Интернет цаг: NTP протокол бүхий ESP8266 NodeMCU ашиглан OLED ашиглан огноо, цагийг харуулах
Интернет цаг: NTP протокол бүхий ESP8266 NodeMCU ашиглан OLED ашиглан огноо, цагийг харуулах

Сайн байна уу залуусаа, энэ зааварчилгаанд бид интернэтээс цаг авах интернет цаг бүтээх болно, ингэснээр энэ төслийг ажиллуулахад RTC шаардлагагүй, зөвхөн ажиллах интернет холболт хэрэгтэй болно.

Мөн энэ төслийн хувьд танд интернетэд нэвтрэхийн тулд wifi, цагийг харуулах дэлгэцтэй esp8266 хэрэгтэй бөгөөд esp8266 нь NTP протоколыг ашиглан интернетээс цаг авах болно, ntp нь сүлжээний цагийн протоколыг илэрхийлдэг тул үндсэндээ ntp серверүүд байдаг. компьютерийн цагийг синхрончлоход ашигладаг вэб дээр бид төсөл дээрээ цаг гаргахын тулд эдгээр серверүүдийг ашиглах болно.

Алхам 1: Танд хэрэгтэй зүйл

Танд хэрэгтэй зүйлс
Танд хэрэгтэй зүйлс
Танд хэрэгтэй зүйлс
Танд хэрэгтэй зүйлс
Танд хэрэгтэй зүйлс
Танд хэрэгтэй зүйлс

Энэ төслийн хувьд танд дараахь зүйлс хэрэгтэй болно.

Esp8266/nodemcu

Oled ssd1306 0.96"

Холбогч утас

Талхны самбар

USB кабель

Алхам 2: Холболтууд

Холболтууд
Холболтууд

Энэхүү 4 зүүтэй OLED дэлгэц нь I2C протоколыг ашиглан ESP8266 модульд холбогддог бөгөөд интернэтийн цагийг харуулахын тулд OLED I2C тээглүүрийг NodeMCU-тэй холбох схем, холболтын хүснэгтийг доор харуулав.

Алхам 3: Номын санг татаж авах

Номын санг татаж авах
Номын санг татаж авах
Номын санг татаж авах
Номын санг татаж авах

Зураг дээр үзүүлсэн шиг Arduino ide -д SD1306 номын санг татаж авсан эсэхээ шалгаарай, мөн Adafruit GFX номын сан байгаа эсэхийг шалгаарай.

Arduino IDE дээр Libraries менежер рүү ороод NTP хайж, NTP клиентийн номын санг татаж авсны дараа нэмэлт тусламж авахын тулд зургийг үзнэ үү.

Алхам 4: NTP гэж юу вэ

NTP гэж юу вэ
NTP гэж юу вэ

NTP бол компьютерийн сүлжээнүүдийн хооронд цаг синхрончлох хамгийн эртний сүлжээний интернет протоколуудын нэг юм. Үүнийг 1981 онд Делавэрийн их сургуулийн Дэвид Л. Миллс зохион бүтээжээ. Энэхүү протоколыг ашиглан олон сүлжээг хэдхэн миллисекундын дотор Coordinated Universal Time (UTC) синхрончлох боломжтой. UTC бол дэлхийн цаг, цагийг зохицуулдаг үндсэн цагийн стандарт юм. UTC нь өөр өөр газарзүйн байршлын хувьд өөрчлөгддөггүй. NTP нь UTC -ийг цагийн лавлагаа болгон ашигладаг бөгөөд интернет дээр үнэн зөв, синхрончлогдсон цагийг өгдөг.

NTP нь үйлчлүүлэгч-серверийн шаталсан загвар дээр ажилладаг. Шилдэг загвар нь хиймэл дагуулаас цаг хүлээн авдаг атомын цаг, радио долгион, GPS, GSM гэх мэт "давхрага0" гэж нэрлэдэг лавлах цагтай. Stratum0 -ээс цаг авдаг серверүүдийг "stratum1" гэж нэрлэдэг бөгөөд stratum1 -ээс цаг авдаг серверүүдийг "stratum2" гэх мэтээр нэрлэдэг. Энэ нь үргэлжилж, үе шат бүрийн дараа цаг хугацааны нарийвчлал буурсаар байна. NTP нь синхрончлох боломжтой хэд хэдэн цагийн эх үүсвэрийг автоматаар сонгодог бөгөөд энэ нь алдааг тэсвэрлэх чадвартай протокол болдог. Тиймээс энэ төсөлд бид ESP8266 NodeMCU ашиглан NTP серверээс цаг авч, OLED дэлгэц дээр харуулах болно. Энэ төрлийн интернет цагийг өмнөх хичээл дээр ESP32 ашиглан бүтээсэн болно.

Алхам 5: Кодлох хэсэг

Кодлох хэсэг
Кодлох хэсэг

Огноо, цагийг хүсэхийн тулд NTP серверийн хаягаар цагийн үйлчлүүлэгчийг эхлүүлнэ үү. Илүү нарийвчлалтай байхын тулд газарзүйн бүсэд ойр байрлах NTP серверүүдийн хаягийг сонгоно уу. Энд бид дэлхийн өнцөг булан бүрээс серверүүдийг өгдөг "pool.ntp.org" -ыг ашигладаг. Хэрэв та Азиас сервер сонгохыг хүсвэл "asia.pool.ntp.org" хаягийг ашиглаж болно. timeClient нь UTC цагийг таны цагийн бүсийн миллисекундээр тооцдог. Жишээлбэл, Энэтхэгийн UTC офсет нь +5: 30 байдаг тул бид энэ офсетийг миллисекундээр 5*60*60 +30*60 = 19800 -тэй тэнцүү болгон хөрвүүлдэг.

Талбай. UTC цагийн офсет (цаг, минут). UTC цагийн офсет (секунд)

Энэтхэг +5: 30 19800

ЛОНДОН 0:00. 0

НЬЮ -ЙОРК -5: 00 -18000

Дараах кодыг хуулж, кодонд wifi болон нууц үгээ оруулаад кодын цагийн хуваарийг оруулаад esp8266 самбартаа оруулна уу.:

#"NTPClient.h" -ийг оруулна уу

NodeMCu -тэй OLED -тэй холбогдох "SPI.h" // SPI -ийг оруулна уу

#"Adafruit_GFX.h" -ийг оруулна уу

#"Adafruit_SSD1306.h" -ийг оруулна уу.

#SCREEN_WIDTH 128 // OLED дэлгэцийн өргөнийг пикселээр тодорхойлох

#DREIN_HEIGHT 64 // OLED дэлгэцийн өндрийг пикселээр тодорхойлно

#тодорхойлох OLED_RESET -1

Adafruit_SSD1306 дэлгэц (SCREEN_WIDTH, SCREEN_HEIGHT, & Wire, OLED_RESET);

constchar *ssid = "yourwifissid";

const char *password = "yourwifipass";

WiFiUDP ntpUDP;

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

String arr_days = {"Ням", "Даваа гариг", "Мягмар", "Лхагва", "Пүрэв", "Баасан", "Бямба гариг"};

String date_time; // Та цагийн серверийн сан болон офсетыг зааж өгч болно (секундын дотор // дараа нь setTimeOffset () ашиглан өөрчилж болно). Үүнээс гадна та // шинэчлэлтийн интервалыг зааж өгч болно (миллисекундээр, setUpdateInterval () ашиглан өөрчилж болно).

хүчингүй тохиргоо ()

{

Цуваа.begin (115200);

WiFi.begin (ssid, нууц үг);

байхад (WiFi.status ()! = WL_CONNECTED)

{

саатал (500);

Serial.print (".");

}

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

{

Serial.println (F ("SSD1306 хуваарилалт амжилтгүй болсон"));

(;;) хувьд; // Үргэлжлүүлэхгүй, үүрд эргүүлээрэй

}

display.clearDisplay ();

display.setTextSize (2); // 2X хэмжээтэй текст зур

display.setTextColor (ЦАГААН);

display.setCursor (5, 2);

display.println ("WELCOME TO");

display.println ("зааварчилгаа");

display.println ("Төсөл");

display.display ();

саатал (3000);

timeClient.begin ();

}

хоосон давталт ()

{

timeClient.update ();

display.clearDisplay ();

Serial.println (timeClient.getFormattedTime ());

display.setTextSize (2); // 2X хэмжээтэй текст зур

display.setTextColor (Цэнхэр);

display.setCursor (0, 2);

int hh = timeClient.getHours ();

int mm = timeClient.getMinutes ();

int ss = timeClient.getSeconds ();

хэрэв (хх> 12)

{

чн = хц-12;

дэлгэц.хэвлэх (hh);

display.print (":");

дэлгэц хэвлэх (мм);

display.print (":");

хэвлэх (хэвлэх);

display.println ("PM");

}

өөр

{

дэлгэц.хэвлэх (hh);

display.print (":");

дэлгэц хэвлэх (мм);

display.print (":");

хэвлэх (хэвлэх);

display.println ("AM");

}

int өдөр = timeClient.getDay ();

display.println ("'"+arr_days [өдөр]+"'");

date_time = timeClient.getFormattedDate ();

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

String огноо = date_time.substring (0, index_date);

Serial.println (огноо);

display.println (огноо);

display.display ();

// Анхны текстийг харуулах}

Алхам 6: Огноо, цаг авах

Огноо, цаг авах
Огноо, цаг авах

Хэрэв та бүх зүйлийг зөв холбож, кодыг зөв оруулсан бол та ntp цагаа oled дэлгэц дээр миний дэлгэц шиг ажиллаж байгааг харах боломжтой болно. Гаргахын тулд зургийг үзнэ үү.

Зөвлөмж болгож буй: