Агуулгын хүснэгт:
- Алхам 1: Танд хэрэгтэй зүйл
- Алхам 2: Холболтууд
- Алхам 3: Номын санг татаж авах
- Алхам 4: NTP гэж юу вэ
- Алхам 5: Кодлох хэсэг
- Алхам 6: Огноо, цаг авах
Видео: Интернет цаг: NTP протокол бүхий ESP8266 NodeMCU ашиглан OLED ашиглан огноо, цагийг харуулах: 6 алхам
2024 Зохиолч: John Day | [email protected]. Хамгийн сүүлд өөрчлөгдсөн: 2024-01-30 11:02
Сайн байна уу залуусаа, энэ зааварчилгаанд бид интернэтээс цаг авах интернет цаг бүтээх болно, ингэснээр энэ төслийг ажиллуулахад 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 бол компьютерийн сүлжээнүүдийн хооронд цаг синхрончлох хамгийн эртний сүлжээний интернет протоколуудын нэг юм. Үүнийг 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 дэлгэц дээр миний дэлгэц шиг ажиллаж байгааг харах боломжтой болно. Гаргахын тулд зургийг үзнэ үү.
Зөвлөмж болгож буй:
ESP8266 ашиглан интернетээс цаг авах - ESP8266 Nodemcu бүхий NTP цагны төсөл: 5 алхам
ESP8266 ашиглан интернетээс цаг авах | ESP8266 Nodemcu -тэй NTP цагны төсөл: Энэхүү гарын авлагад бид Arduino IDE -тэй ESP8266/nodemcu -ийг хэрхэн ашиглах талаар олж мэдэх болно. Цаг авах нь өгөгдлийг бүртгэхэд уншилтынхаа цагийг тэмдэглэхэд тустай байдаг. Хэрэв таны ESP8266 төсөл интернетэд холбогдсон бол та сүлжээний T -ийг ашиглан цаг авах боломжтой
ESP8266 RTC байхгүй сүлжээний цаг - Nodemcu NTP цаг RTC байхгүй байна - ИНТЕРНЕТ ЦАГИЙН ТӨСӨЛ: 4 алхам
ESP8266 RTC байхгүй сүлжээний цаг | Nodemcu NTP цаг RTC байхгүй | ИНТЕРНЕТ ЦАГИЙН ТӨСӨЛ: Төсөл нь RTC -гүй цагны төсөл хийх бөгөөд wifi ашиглан интернэтээс цаг авч, st7735 дэлгэц дээр харуулах болно
Arduino 3-in-1-ийг ашиглан цаг, цагийг харуулах: 11 алхам
Arduino 3-in-1 in Time and Weather Display: Би PIC микроконтроллерт дуртай, угсрах хэл дээр програмчлах дуртай. Үнэндээ өнгөрсөн хоёр жилийн хугацаанд би энэ хослол дээр үндэслэн вэбсайтдаа 40 орчим төсөл оруулсан. Саяхан би АНУ -ын дуртай нэг дэлгүүрээс зарим хэсгийг нь захиалж авлаа
Хөөрхөн огноо, цаг, температурыг харуулах нэгж: 3 алхам
Хөөрхөн огноо, цаг, температурыг харуулах нэгж: Сайн байна уу найзуудаа, энэхүү зааварчилгаанд би Arduino pro mini, RTC болон долоон сегмент бүхий долоон сегмент бүхий дэлгэц, огноо, цаг, одоогийн температурыг харуулах нэгжийг хэрхэн яаж гаргахыг тайлбарлах болно. ашигтай төхөөрөмж болох маш авсаархан нэгжид
Wemos D1 Mini Pro ашиглан Blynk апп руу огноо, цагийг оруулах: 10 алхам
Wemos D1 Mini Pro -ийг ашиглан Blynk апп руу огноо, цагийг түлхэх: Бид Wemos D1 Mini Pro -ийг ашиглан цагийг шахах болно. Энэ үйл ажиллагааг хийхийн тулд та Wemos D1 Mini Pro -т ямар ч бүрэлдэхүүн хэсгийг холбох шаардлагагүй болно