Mundarija:

Internet soati: NTP protokoli bilan ESP8266 NodeMCU yordamida OLED yordamida sana va vaqtni ko'rsatish: 6 qadam
Internet soati: NTP protokoli bilan ESP8266 NodeMCU yordamida OLED yordamida sana va vaqtni ko'rsatish: 6 qadam

Video: Internet soati: NTP protokoli bilan ESP8266 NodeMCU yordamida OLED yordamida sana va vaqtni ko'rsatish: 6 qadam

Video: Internet soati: NTP protokoli bilan ESP8266 NodeMCU yordamida OLED yordamida sana va vaqtni ko'rsatish: 6 qadam
Video: ESP32 Tutorial 53 - Build an LCD Internet Clock | SunFounder's ESP32 IoT Learnig kit 2024, Iyul
Anonim
Internet -soat: NTP protokoli bilan ESP8266 NodeMCU yordamida OLED yordamida sana va vaqtni ko'rsatish
Internet -soat: NTP protokoli bilan ESP8266 NodeMCU yordamida OLED yordamida sana va vaqtni ko'rsatish

Salom bolalar, bu ko'rsatmalarni o'qish uchun biz Internetdan vaqt oladigan Internet soatini quramiz, shuning uchun bu loyihani ishga tushirish uchun hech qanday RTC kerak emas, faqat ishlaydigan internet aloqasi kerak.

Va bu loyiha uchun sizga esp8266 kerak bo'ladi, u Internetga kirish uchun wifi va vaqtini ko'rsatadigan displeyga ega bo'ladi va esp8266 NTP protokoli yordamida Internetdan vaqt oladi, ntp tarmoq vaqti protokoli, shuning uchun asosan ntp serverlari mavjud. Internetda kompyuter soatlarini sinxronlashtirish uchun ishlatiladi va biz loyihamizda vaqt topish uchun boshqa serverlardan foydalanamiz.

1 -qadam: Sizga kerak bo'lgan narsalar

Sizga kerak bo'lgan narsalar
Sizga kerak bo'lgan narsalar
Sizga kerak bo'lgan narsalar
Sizga kerak bo'lgan narsalar
Sizga kerak bo'lgan narsalar
Sizga kerak bo'lgan narsalar

Ushbu loyiha uchun sizga quyidagilar kerak bo'ladi:

Esp8266/nodemcu

Oled ssd1306 0,96"

Jumper simlari

Non paneli

Usb kabeli

2 -qadam: ulanishlar

Ulanishlar
Ulanishlar

Bu 4-pinli OLED-displey I2C protokoli yordamida ESP8266 moduli bilan aloqa o'rnatadi, Internetda vaqtni ko'rsatish uchun OLED I2C pinlarini NodeMCU bilan ulash uchun sxemalar va ulanishlar jadvali quyida keltirilgan.

3 -qadam: Kutubxonalarni yuklab oling

Kutubxonalar yuklab olish
Kutubxonalar yuklab olish
Kutubxonalar yuklab olish
Kutubxonalar yuklab olish

Arduino ide -dagi SD1306 kutubxonalarini rasmda ko'rsatilgandek yuklaganingizga ishonch hosil qiling va Adafruit GFX kutubxonasiga ishonch hosil qiling, agar bo'lmasa, bu ikkita kutubxonani o'rnating.

Arduino IDE -da kutubxonalar menejeriga o'ting va NTP -ni qidiring va men yuklaganimdek NTP mijozlar kutubxonasini yuklab oling, qo'shimcha yordam uchun rasmga qarang.

4 -qadam: NTP nima?

NTP nima
NTP nima

NTP - bu kompyuter tarmoqlari orasidagi soatlarni sinxronlashtirish uchun eng qadimgi tarmoqli Internet protokoli. U 1981 yilda Delaver universiteti Devid L. Mills tomonidan ishlab chiqilgan. Bu protokol ko'p tarmoqlarni bir necha millisekund ichida muvofiqlashtirilgan universal vaqtga (UTC) sinxronlashtirish uchun ishlatilishi mumkin. UTC - bu dunyo soat va vaqtni boshqaradigan asosiy vaqt standarti. UTC har xil geografik joylar uchun o'zgarmaydi va farq qiladi. NTP vaqt ma'lumoti sifatida UTCdan foydalanadi va Internetda aniq va sinxron vaqtni ta'minlaydi.

NTP ierarxik mijoz-server modelida ishlaydi. Eng yaxshi modelda sun'iy yo'ldoshdan vaqt oladigan atom soatlari, radio to'lqinlari, GPS, GSM kabi "stratum0" deb nomlanuvchi mos yozuvlar soatlar mavjud. Stratum 0dan vaqt oladigan serverlar "stratum1" deb nomlanadi va stratum1dan vaqt oladigan serverlar "stratum2" deb nomlanadi. Bu davom etadi va har bir bosqichdan keyin vaqtning aniqligi pasayadi. NTP sinxronizatsiya qilish uchun mavjud bo'lgan vaqt manbalarining eng yaxshisini avtomatik ravishda tanlaydi, bu protokolni xatolarga bardoshli qiladi. Shunday qilib, bu loyihada biz ESP8266 NodeMCU yordamida NTP serveridan vaqt olamiz va uni OLED displeyda ko'rsatamiz. Xuddi shu turdagi Internet -soat oldingi qo'llanmada ESP32 yordamida yaratilgan.

5 -qadam: Kodlash qismi

Kodlash qismi
Kodlash qismi

Sana va vaqtni so'rash uchun vaqt mijozini NTP serverlari manzili bilan boshlang. Aniqroq bo'lish uchun geografik hududingizga yaqin bo'lgan NTP serverlarining manzilini tanlang. Bu erda biz butun dunyo bo'ylab serverlarni taqdim etadigan "pool.ntp.org" dan foydalanamiz. Agar siz Osiyodan serverlarni tanlashni xohlasangiz, "asia.pool.ntp.org" dan foydalanishingiz mumkin. timeClient shuningdek, sizning vaqt mintaqangizning millisekundlarida UTC vaqtini o'zgartiradi. Masalan, Hindiston uchun UTC ofset +5: 30, shuning uchun biz bu ofsetni 5*60*60 +30*60 = 19800 ga teng millisekundlarga aylantiramiz.

Hudud. UTC vaqtini almashtirish (soat va daqiqa). UTC vaqtini almashtirish (soniya)

Hindiston +5: 30 19800

LONDON 0:00. 0

Nyu -York -5:00 -18000

Iltimos, quyidagi kodni nusxa ko'chiring va Wi -Fi va parolingizni kodga kiriting va vaqtni ofsetga kiriting, so'ng uni esp8266 taxtangizga yuklang.:

#include "NTPClient.h" #include "ESP8266WiFi.h" // tarmoqqa ulanish uchun qo'ng'iroq qilayotgan ESP8266 o'ziga xos Wi-Fi tartibini taqdim etadi #include "WiFiUdp.h" // UDP paketlarini yuborish va qabul qilishni boshqaradi.

#OLED -ni NodeMCu bilan bog'lash uchun "SPI.h" // SPI -ni qo'shing

#"Adafruit_GFX.h" ni qo'shing

#"Adafruit_SSD1306.h" ni qo'shing

#define SCREEN_WIDTH 128 // OLED displey kengligi, piksellarda

#define SCREEN_HEIGHT 64 // OLED displey balandligi, piksellarda

#OLED_RESET -1 ni belgilang

Adafruit_SSD1306 displeyi (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 = {"Yakshanba", "Dushanba", "Seshanba", "Chorshanba", "Payshanba", "Juma", "Shanba"};

String date_time; // Vaqt serveri havzasini va ofsetini belgilashingiz mumkin (soniyalarda // keyinchalik setTimeOffset () yordamida o'zgartirilishi mumkin). Bundan tashqari, siz // yangilanish oralig'ini belgilashingiz mumkin (millisekundlarda, setUpdateInterval () yordamida o'zgartirilishi mumkin).

bo'sh o'rnatish ()

{

Serial.begin (115200);

WiFi.begin (ssid, parol);

esa (WiFi.status ()! = WL_CONNECTED)

{

kechikish (500);

Serial.print (".");

}

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

{

Serial.println (F ("SSD1306 ajratib bo'lmadi"));

uchun(;;); // Davom etma, abadiy aylan

}

display.clearDisplay ();

display.setTextSize (2); // 2X o'lchovli matnni chizish

display.setTextColor (oq);

display.setCursor (5, 2);

display.println ("Xush kelibsiz");

display.println ("ko'rsatmali");

display.println ("Loyiha");

display.display ();

kechikish (3000);

timeClient.begin ();

}

bo'sh halqa ()

{

timeClient.update ();

display.clearDisplay ();

Serial.println (timeClient.getFormattedTime ());

display.setTextSize (2); // 2X o'lchovli matnni chizish

display.setTextColor (KO'K);

display.setCursor (0, 2);

int hh = timeClient.getHours ();

int mm = timeClient.getMinutes ();

int ss = timeClient.getSeconds ();

agar (ss> 12)

{

hh = hh-12;

display.print (hh);

display.print (":");

displey. bosma (mm);

display.print (":");

display.print (ss);

display.println ("PM");

}

boshqa

{

display.print (hh);

display.print (":");

displey. bosma (mm);

display.print (":");

display.print (ss);

display.println ("AM");

}

int kun = timeClient.getDay ();

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

date_time = timeClient.getFormattedDate ();

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

String sanasi = date_time.substring (0, index_date);

Serial.println (sana);

display.println (sana);

display.display ();

// Boshlang‘ich matnni ko‘rsatish}

6 -qadam: Sana va vaqtni olish

Sana va vaqtni olish
Sana va vaqtni olish

Agar siz hamma narsani to'g'ri ulab qo'ysangiz va kodni to'g'ri yuklagan bo'lsangiz, siz ntp soatingizni oled displeyda ishlayotganini ko'rasiz. Chiqish uchun rasmga qarang.

Tavsiya: