Სარჩევი:

ინტერნეტ საათი: ჩვენება თარიღი და დრო OLED გამოყენებით ESP8266 NodeMCU NTP პროტოკოლით: 6 ნაბიჯი
ინტერნეტ საათი: ჩვენება თარიღი და დრო OLED გამოყენებით ESP8266 NodeMCU NTP პროტოკოლით: 6 ნაბიჯი

ვიდეო: ინტერნეტ საათი: ჩვენება თარიღი და დრო OLED გამოყენებით ESP8266 NodeMCU NTP პროტოკოლით: 6 ნაბიჯი

ვიდეო: ინტერნეტ საათი: ჩვენება თარიღი და დრო OLED გამოყენებით ESP8266 NodeMCU NTP პროტოკოლით: 6 ნაბიჯი
ვიდეო: როგორ გავაზიაროთ ტელეფონის ეკრანი ტელევიზორში 2024, ივლისი
Anonim
ინტერნეტ საათი: თარიღისა და დროის ჩვენება OLED გამოყენებით ESP8266 NodeMCU NTP პროტოკოლით
ინტერნეტ საათი: თარიღისა და დროის ჩვენება OLED გამოყენებით ESP8266 NodeMCU NTP პროტოკოლით

გამარჯობა ბიჭებო ამ ინსტრუქციებში ჩვენ ავაშენებთ ინტერნეტ საათს რომელიც მიიღებს დროს ინტერნეტიდან ამ პროექტს არ დასჭირდება არანაირი RTC გაშვება, მას დასჭირდება მხოლოდ სამუშაო ინტერნეტ კავშირი

და ამ პროექტისათვის გჭირდებათ esp8266 რომელსაც ექნება wifi ინტერნეტის მისაღებად და ჩვენება მასზე დროის გამოსაჩენად და esp8266 მიიღებს დროს ინტერნეტიდან NTP პროტოკოლის გამოყენებით, ntp ნიშნავს ქსელის დროის პროტოკოლს, ასე რომ ძირითადად არსებობს ntp სერვერები ინტერნეტში, რომელიც გამოიყენება კომპიუტერის საათების სინქრონიზაციისთვის და ჩვენ ვიყენებთ ამ სერვერებს, რომ მივიღოთ დრო ჩვენს პროექტში.

ნაბიჯი 1: ის, რაც გჭირდებათ

ნივთები რაც თქვენ გჭირდებათ
ნივთები რაც თქვენ გჭირდებათ
ნივთები რაც თქვენ გჭირდებათ
ნივთები რაც თქვენ გჭირდებათ
ნივთები რაც თქვენ გჭირდებათ
ნივთები რაც თქვენ გჭირდებათ

ამ პროექტისთვის დაგჭირდებათ შემდეგი ნივთები:

Esp8266/nodemcu

ოლედი ssd1306 0.96"

ჯუმბერის მავთულები

პურის დაფა

USB კაბელი

ნაბიჯი 2: კავშირები

კავშირები
კავშირები

ეს 4 პინიანი OLED ეკრანი ESP8266 მოდულთან კომუნიკაციას ახდენს I2C პროტოკოლის გამოყენებით, ქვემოთ მოცემულია წრიული დიაგრამა და კავშირების ცხრილი OLED I2C ქინძისთავების დასაკავშირებლად NodeMCU– სთან ინტერნეტის დროის საჩვენებლად.

ნაბიჯი 3: ჩამოტვირთეთ ბიბლიოთეკები

ჩამოტვირთეთ ბიბლიოთეკები
ჩამოტვირთეთ ბიბლიოთეკები
ჩამოტვირთეთ ბიბლიოთეკები
ჩამოტვირთეთ ბიბლიოთეკები

დარწმუნდით, რომ გადმოწერილი გაქვთ SD1306 ბიბლიოთეკები თქვენს Arduino ide– ში, როგორც ეს მოცემულია სურათზე და დარწმუნდით, რომ თქვენ ასევე გაქვთ Adafruit GFX ბიბლიოთეკა, თუ არა, მაშინ დააინსტალირეთ ეს ორი ბიბლიოთეკა.

თქვენს Arduino IDE- ში გადადით ბიბლიოთეკების მენეჯერში და მოძებნეთ NTP და გადმოწერეთ NTP კლიენტის ბიბლიოთეკა გადმოწერილი სახით, მიმართეთ სურათს შემდგომი დახმარებისთვის.

ნაბიჯი 4: რა არის NTP

რა არის NTP
რა არის NTP

NTP არის ერთ – ერთი უძველესი ინტერნეტ პროტოკოლი (IP) კომპიუტერული ქსელებისთვის საათის სინქრონიზაციისათვის. ის შეიქმნა დევიდ ლ. მილსის მიერ დელავერის უნივერსიტეტიდან 1981 წელს. ეს პროტოკოლი შეიძლება გამოყენებულ იქნას მრავალი ქსელის სინქრონიზაციისათვის კოორდინირებულ უნივერსალურ დროზე (UTC) რამდენიმე მილიწამში. UTC არის დროის ძირითადი სტანდარტი, რომლის მიხედვითაც სამყარო არეგულირებს საათს და დროს. UTC არ იცვლება და განსხვავდება სხვადასხვა გეოგრაფიული მდებარეობისთვის. NTP იყენებს UTC როგორც დროის მითითებას და უზრუნველყოფს ზუსტ და სინქრონიზებულ დროს ინტერნეტში.

NTP მუშაობს იერარქიულ კლიენტ-სერვერის მოდელზე. ტოპ მოდელს აქვს საცნობარო საათები, რომლებიც ცნობილია როგორც "stratum0", როგორიცაა ატომური საათები, რადიოტალღები, GPS, GSM, რომელიც იღებს დროს თანამგზავრიდან. სერვერებს, რომლებიც დროს იღებენ stratum0– დან, ეწოდება „stratum1“, ხოლო სერვერებს, რომლებიც იღებენ დროს stratum1– დან, ეწოდება „stratum2“და ასე შემდეგ. ეს გრძელდება და დროის სიზუსტე მცირდება ყოველი ეტაპის შემდეგ. NTP ავტომატურად ირჩევს სინქრონიზაციისათვის არსებული დროის რამდენიმე წყაროდან საუკეთესოს, რაც მას შეცდომების შემწყნარებლურ პროტოკოლად აქცევს. ასე რომ, ამ პროექტში, ჩვენ ვიღებთ დროს NTP სერვერისგან ESP8266 NodeMCU გამოყენებით და ვაჩვენებთ მას 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" #მოიცავს "ESP8266WiFi.h" // უზრუნველყოფს ESP8266 სპეციფიკურ Wi-Fi რუტინას, რომელსაც ჩვენ ვიძახებთ ქსელთან დასაკავშირებლად #მოიცავს "WiFiUdp.h" // ამუშავებს UDP პაკეტების გაგზავნას და მიღებას

#ჩართეთ "SPI.h" // SPI OLED– თან ინტერფეისისათვის NodeMCu– სთან

#მოიცავს "Adafruit_GFX.h"

#მოიცავს "Adafruit_SSD1306.h"

#განსაზღვრეთ SCREEN_WIDTH 128 // OLED ჩვენების სიგანე, პიქსელებში

#განსაზღვრეთ SCREEN_HEIGHT 64 // OLED ჩვენების სიმაღლე, პიქსელებში

#განსაზღვრეთ OLED_RESET -1

Adafruit_SSD1306 ჩვენება (SCREEN_WIDTH, SCREEN_HEIGHT, & Wire, OLED_RESET);

constchar *ssid = "yourwifissid";

const char *პაროლი = "yourwifipass";

WiFiUDP ntpUDP;

NTP კლიენტის დრო კლიენტი (ntpUDP, "pool.ntp.org", 19800, 60000);

სიმებიანი arr_days = {"კვირა", "ორშაბათი", "სამშაბათი", "ოთხშაბათი", "ხუთშაბათი", "პარასკევი", "შაბათი"};

სიმებიანი თარიღი_დრო; // თქვენ შეგიძლიათ მიუთითოთ დროის სერვერის აუზი და ოფსეტური (წამებში, შეიძლება // შეიცვალოს მოგვიანებით setTimeOffset ()). დამატებით შეგიძლიათ მიუთითოთ // განახლების ინტერვალი (მილიწამებში, შეიძლება შეიცვალოს setUpdateInterval ()) გამოყენებით.

ბათილად დაყენება ()

{

Serial.begin (115200);

WiFi.begin (ssid, პაროლი);

ხოლო (WiFi.status ()! = WL_CONNECTED)

{

დაგვიანება (500);

Serial.print (".");

}

თუ (! display.begin (SSD1306_SWITCHCAPVCC, 0x3C))

{

Serial.println (F ("SSD1306 გამოყოფა ვერ მოხერხდა"));

for (;;); // ნუ გააგრძელებ, მარყუჟი სამუდამოდ

}

display.clearDisplay ();

display.setTextSize (2); // დახაზეთ 2X მასშტაბის ტექსტი

display.setTextColor (WHITE);

display.setCursor (5, 2);

display.println ("WELCOME TO");

display.println ("ინსტრუქციები");

display.println ("პროექტი");

ჩვენება. ჩვენება ();

დაგვიანება (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)

{

hh = hh-12;

ჩვენება. ბეჭდვა (სთ);

display.print (":");

ჩვენება. ბეჭდვა (მმ);

display.print (":");

ჩვენება. ბეჭდვა (ss);

display.println ("PM");

}

სხვა

{

ჩვენება. ბეჭდვა (სთ);

display.print (":");

ჩვენება. ბეჭდვა (მმ);

display.print (":");

ჩვენება. ბეჭდვა (ss);

display.println ("AM");

}

int დღე = timeClient.getDay ();

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

date_time = timeClient.getFormattedDate ();

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

სიმებიანი თარიღი = date_time.substring (0, index_date);

Serial.println (თარიღი);

ჩვენება. ბეჭდვა (თარიღი);

ჩვენება. ჩვენება ();

// საწყისი ტექსტის ჩვენება}

ნაბიჯი 6: მიიღეთ თარიღი და დრო

მიღების თარიღი და დრო
მიღების თარიღი და დრო

თუ ყველაფერი სწორად დააკავშირე და კოდიც სწორად ატვირთე, მაშინ შეგიძლია ნახო შენი ntp საათი გაშვებული oled ეკრანზე, როგორც ჩემი oled ეკრანზე. გთხოვთ მიმართოთ სურათს გამომავალი.

გირჩევთ: