Բովանդակություն:

Ինտերնետային ժամացույց. Dateուցադրել ամսաթիվը և ժամը OLED- ով ՝ օգտագործելով ESP8266 NodeMCU ՝ NTP արձանագրությամբ ՝ 6 քայլ
Ինտերնետային ժամացույց. Dateուցադրել ամսաթիվը և ժամը OLED- ով ՝ օգտագործելով ESP8266 NodeMCU ՝ NTP արձանագրությամբ ՝ 6 քայլ

Video: Ինտերնետային ժամացույց. Dateուցադրել ամսաթիվը և ժամը OLED- ով ՝ օգտագործելով ESP8266 NodeMCU ՝ NTP արձանագրությամբ ՝ 6 քայլ

Video: Ինտերնետային ժամացույց. Dateուցադրել ամսաթիվը և ժամը OLED- ով ՝ օգտագործելով ESP8266 NodeMCU ՝ NTP արձանագրությամբ ՝ 6 քայլ
Video: ինչպես միացնել խելացի ժամացույցը հեռախոսին #кодрегистрации #սմարթժամ #խելացիժամացույց #կոդ 2024, Նոյեմբեր
Anonim
Ինտերնետային ժամացույց. Dateուցադրել ամսաթիվը և ժամը OLED- ով ՝ օգտագործելով ESP8266 NodeMCU ՝ NTP արձանագրությամբ
Ինտերնետային ժամացույց. Dateուցադրել ամսաթիվը և ժամը OLED- ով ՝ օգտագործելով ESP8266 NodeMCU ՝ NTP արձանագրությամբ

Ողջույն տղերք, այս դասագրքերում մենք կկառուցենք ինտերնետային ժամացույց, որը ժամանակ կստանա ինտերնետից, այնպես որ այս նախագծին աշխատելու համար ոչ մի RTC կարիք չի ունենա, այն կպահանջի միայն աշխատող ինտերնետ կապ

Եվ այս նախագծի համար ձեզ հարկավոր է esp8266, որը կունենա wifi ինտերնետ հասանելիություն ստանալու համար և էկրան ՝ դրա վրա ժամանակը ցուցադրելու համար, իսկ esp8266- ը ինտերնետից ժամանակ կբերի ՝ օգտագործելով NTP արձանագրություն, ntp նշանակում է ցանցի ժամանակի արձանագրություն, ուստի հիմնականում կան ntp սերվերներ համացանցում, որոնք օգտագործվում են համակարգչային ժամացույցները համաժամացնելու համար, և մենք կօգտագործենք այդ սերվերները ՝ մեր նախագծում ժամանակ գտնելու համար:

Քայլ 1: Ձեզ անհրաժեշտ բաներ

Ձեզ անհրաժեշտ բաներ
Ձեզ անհրաժեշտ բաներ
Ձեզ անհրաժեշտ բաներ
Ձեզ անհրաժեշտ բաներ
Ձեզ անհրաժեշտ բաներ
Ձեզ անհրաժեշտ բաներ

Այս նախագծի համար ձեզ հարկավոր են հետևյալ իրերը.

Esp8266/nodemcu

Օլեդ ssd1306 0.96"

Jumper լարերը

Breadboard

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- ն չի փոխվում և տարբերվում է տարբեր աշխարհագրական վայրերի համար: NTP- ն օգտագործում է UTC- ն որպես ժամանակի տեղեկանք և ապահովում է ճշգրիտ և համաժամեցված ժամանակ ամբողջ ինտերնետում:

NTP- ն աշխատում է հիերարխիկ հաճախորդ-սերվեր մոդելի վրա: Թոփ մոդելը ունի տեղեկատու ժամացույցներ, որոնք հայտնի են որպես «շերտ 0» ՝ ատոմային ժամացույցներ, ռադիոալիքներ, GPS, GSM, որոնք ժամանակ են ստանում արբանյակից: Այն սերվերները, որոնք ժամանակ են ստանում շերտ 0 -ից, կոչվում են «շերտ 1», իսկ սերվերները, որոնք ժամանակ են ստանում շերտ 1 -ից, կոչվում են «շերտ 2» և այլն: Սա շարունակվում է, և ժամանակի ճշգրտությունը նվազում է յուրաքանչյուր փուլից հետո: 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

ՆՅՈ Y ՅՈՐՔ -5: 00 -18000

Խնդրում ենք պատճենել հետևյալ ծածկագիրը և ծածկագրում մուտքագրել ձեր WiFi- ն և գաղտնաբառը և մուտքագրել ծածկագրում ժամանակի անջատումը, այնուհետև վերբեռնել այն ձեր esp8266 տախտակներին::

#ներառել «NTPClient.h» #ներառել «ESP8266WiFi.h» // ապահովում է ESP8266 հատուկ Wi-Fi ռեժիմներ, որոնք մենք կոչ ենք անում միանալ ցանցին #ներառել «WiFiUdp.h» // կարգավորում է UDP փաթեթների ուղարկումը և ստացումը

#ներառել «SPI.h» // SPI ՝ NodeMCu- ի հետ OLED- ին միանալու համար

#ներառել «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;

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

String 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 հատկացումը ձախողվեց»));

համար (;;); // Մի՛ շարունակիր, ընդմիշտ շրջանցիր

}

display.clearDisplay ();

display.setTextSize (2); // Նկարեք 2X մասշտաբի տեքստ

display.setTextColor (ՍՊԻՏԱԿ);

display.setCursor (5, 2);

display.println ("Բարի գալուստ");

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)

{

hh = hh-12;

ցուցադրում: տպել (ժ);

display.print (":");

ցուցադրում: տպել (մմ);

display.print (":");

display.print (ss);

display.println («PM»);

}

ուրիշ

{

ցուցադրում: տպել (ժ);

display.print (":");

ցուցադրում: տպել (մմ);

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 (ամսաթիվ);

display.println (ամսաթիվ);

display.display ();

// Showուցադրել սկզբնական տեքստը}

Քայլ 6: Ստանալ ամսաթիվ և ժամ

Ստանալու ամսաթիվ և ժամ
Ստանալու ամսաթիվ և ժամ

եթե ամեն ինչ ճիշտ եք միացրել և ծածկագիրը նույնպես ճիշտ եք վերբեռնել, ապա կկարողանաք տեսնել ձեր ntp ժամացույցը, որն աշխատում է յուղոտ էկրանով, ինչպես իմը ՝ յուղացված էկրանով աշխատող: Խնդրում ենք ուղարկել պատկերը ելքի համար:

Խորհուրդ ենք տալիս: