ዝርዝር ሁኔታ:

የበይነመረብ ሰዓት - ESP8266 NodeMCU ን ከ NTP ፕሮቶኮል ጋር በመጠቀም - 6 ደረጃዎች ከ OLED ጋር ቀን እና ሰዓት ያሳዩ።
የበይነመረብ ሰዓት - ESP8266 NodeMCU ን ከ NTP ፕሮቶኮል ጋር በመጠቀም - 6 ደረጃዎች ከ OLED ጋር ቀን እና ሰዓት ያሳዩ።

ቪዲዮ: የበይነመረብ ሰዓት - ESP8266 NodeMCU ን ከ NTP ፕሮቶኮል ጋር በመጠቀም - 6 ደረጃዎች ከ OLED ጋር ቀን እና ሰዓት ያሳዩ።

ቪዲዮ: የበይነመረብ ሰዓት - ESP8266 NodeMCU ን ከ NTP ፕሮቶኮል ጋር በመጠቀም - 6 ደረጃዎች ከ OLED ጋር ቀን እና ሰዓት ያሳዩ።
ቪዲዮ: እንቅልፍ እንቢ ካላችሁ እነዚህን 3 ነገሮች አድርጉ በዶክተር ኃይለልዑል 2024, ሀምሌ
Anonim
የበይነመረብ ሰዓት - ESP8266 NodeMCU ን ከ NTP ፕሮቶኮል ጋር በመጠቀም ቀን እና ሰዓት ከ OLED ጋር ያሳዩ።
የበይነመረብ ሰዓት - ESP8266 NodeMCU ን ከ NTP ፕሮቶኮል ጋር በመጠቀም ቀን እና ሰዓት ከ OLED ጋር ያሳዩ።

ሠላም በዚህ ትምህርት ሰጪዎች ውስጥ እኛ ከበይነመረቡ ጊዜን የሚያገኝ የበይነመረብ ሰዓት እንሠራለን ስለዚህ ይህ ፕሮጀክት ለማሄድ ምንም RTC አያስፈልገውም ፣ የሚሰራ የበይነመረብ ግንኙነት ብቻ ይፈልጋል።

እና ለዚህ ፕሮጀክት የበይነመረብ መዳረሻን ለማግኘት wifi ያለው እና ሰዓቱን ለማሳየት ማሳያ ያለው እና esp8266 የኤንቲፒ ፕሮቶኮልን በመጠቀም ከበይነመረቡ ጊዜን ይወስዳል ፣ ntp ለኔትወርክ ጊዜ ፕሮቶኮል ይቆማል ፣ ስለሆነም በመሠረቱ ntp አገልጋዮች አሉ። በድር ላይ የኮምፒተር ሰዓቶችን ለማመሳሰል በሚጠቀሙበት ድር ላይ እኛ በፕሮጀክታችን ውስጥ ጊዜ ለማግኘት እኛ ሁለቱን አገልጋዮች እንጠቀማለን።

ደረጃ 1: የሚያስፈልጉዎት ነገሮች

የሚያስፈልጉዎት ነገሮች
የሚያስፈልጉዎት ነገሮች
የሚያስፈልጉዎት ነገሮች
የሚያስፈልጉዎት ነገሮች
የሚያስፈልጉዎት ነገሮች
የሚያስፈልጉዎት ነገሮች

ለዚህ ፕሮጀክት የሚከተሉትን ነገሮች ያስፈልግዎታል

Esp8266/nodemcu

Oled ssd1306 0.96"

ዝላይ ሽቦዎች

የዳቦ ሰሌዳ

የዩኤስቢ ገመድ

ደረጃ 2 - ግንኙነቶች

ግንኙነቶች
ግንኙነቶች

ይህ ባለ 4-ፒን OLED ማሳያ የ I2C ፕሮቶኮልን በመጠቀም ከ ESP8266 ሞጁል ጋር ይገናኛል ፣ ከዚህ በታች የበይነመረብ ጊዜን ለማሳየት የ OLED I2C ፒኖችን ከኖድኤምሲዩ ጋር ለማገናኘት የወረዳ ዲያግራም እና የግንኙነት ሰንጠረዥ ናቸው።

ደረጃ 3 ቤተ -ፍርግሞችን ያውርዱ

ቤተ -ፍርግሞችን ያውርዱ
ቤተ -ፍርግሞችን ያውርዱ
ቤተ -ፍርግሞችን ያውርዱ
ቤተ -ፍርግሞችን ያውርዱ

በምስሉ ላይ እንደሚታየው የ SD1306 ቤተ -ፍርግሞችን በእርስዎ አርዱዲኖ ሀሳብ ውስጥ ማውረዱዎን ያረጋግጡ እና ከዚያ እነዚህን ሁለት ቤተ -መጻህፍት ካልጫኑ Adafruit GFX ቤተ -መጽሐፍትዎን እንዲሁ ያረጋግጡ።

በእርስዎ Arduino IDE ውስጥ ወደ የቤተመጽሐፍት ሥራ አስኪያጅ ይሂዱ እና NTP ን ይፈልጉ እና እኔ እንዳወረድኩ የ NTP ደንበኛ ቤተ -መጽሐፍትን ያውርዱ ፣ ለተጨማሪ እገዛ ምስልን ይመልከቱ።

ደረጃ 4 NTP ምንድን ነው?

NTP ምንድን ነው
NTP ምንድን ነው

NTP በኮምፒተር አውታረ መረቦች መካከል ሰዓቶችን ለማመሳሰል በጣም ጥንታዊ ከሆኑት የበይነመረብ ፕሮቶኮል (አይፒ) አንዱ ነው። በ 1981 በዴላዌር ዩኒቨርሲቲ በዴቪድ ኤል ሚልስ የተነደፈ ነው። ይህ ፕሮቶኮል በጥቂት ሚሊሰከንዶች ውስጥ ብዙ አውታረ መረቦችን ወደ የተቀናጀ ዩኒቨርሳል ሰዓት (UTC) ለማመሳሰል ሊያገለግል ይችላል። UTC ዓለም ሰዓትን እና ጊዜን የሚቆጣጠርበት የመጀመሪያ የጊዜ መስፈርት ነው። UTC አይለወጥም እና ለተለያዩ ጂኦግራፊያዊ አካባቢዎች አይለያይም። NTP UTC ን እንደ የጊዜ ማጣቀሻ ይጠቀማል እና በበይነመረብ ላይ ትክክለኛ እና የተመሳሰለ ጊዜን ይሰጣል።

NTP የሚሠራው በተራ በተራ ደንበኛ-አገልጋይ ሞዴል ላይ ነው። ከፍተኛው ሞዴል እንደ ሳተላይት ጊዜን የሚቀበል የአቶሚክ ሰዓቶች ፣ የሬዲዮ ሞገዶች ፣ ጂፒኤስ ፣ ጂ.ኤስ.ኤም እንደ “stratum0” በመባል የሚታወቁ የማጣቀሻ ሰዓቶች አሉት። ከ stratum0 ጊዜን የሚቀበሉ አገልጋዮች እንደ “stratum1” ይባላሉ እና ከ stratum1 ጊዜን የሚቀበሉ አገልጋዮች “stratum2” እና የመሳሰሉት ይባላሉ። ይህ ይቀጥላል እና ከእያንዳንዱ ደረጃ በኋላ የጊዜ ትክክለኛነት እየቀነሰ ይሄዳል። ኤንቲፒ ለማመሳሰል ከብዙ የሚገኙ የጊዜ ምንጮች ምርጡን በራስ-ሰር ይመርጣል ይህም ጥፋትን መቋቋም የሚችል ፕሮቶኮል ያደርገዋል። ስለዚህ እዚህ ፕሮጀክት ውስጥ ESP8266 NodeMCU ን በመጠቀም በ OLED ማሳያ ላይ ከ NTP አገልጋይ ጊዜ እያገኘን ነው። ይህ ዓይነቱ የበይነመረብ ሰዓት በቀድሞው ትምህርት ውስጥ 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 አሰራሮችን ያቀርባል #የ "UDP ጥቅሎችን" መላክ እና መቀበልን ያጠቃልላል።

#OLED ን ከ NodeMCu ጋር ለማጣመር “SPI.h” // SPI ን ያካትቱ

#"አዳፍሩት_GFX.h" ን ያካትቱ

#"አዳፍ ፍሬ_SSD1306.h" ን ያካትቱ።

#ጥራት SCREEN_WIDTH 128 // OLED ማሳያ ስፋት ፣ በፒክሰሎች

#ጥራት SCREEN_HEIGHT 64 // OLED ማሳያ ቁመት ፣ በፒክሰሎች

#OLED_RESET -1 ን ይግለጹ

Adafruit_SSD1306 ማሳያ (SCREEN_WIDTH ፣ SCREEN_HEIGHT ፣ እና ሽቦ ፣ OLED_RESET);

constchar *ssid = "yourwifissid";

const char *password = "yourwifipass";

WiFiUDP ntpUDP;

NTPClient timeClient (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 (ኤፍ ("SSD1306 ምደባ አልተሳካም"));

ለ (;;;); // አይቀጥሉ ፣ ለዘላለም loop

}

display.clearDisplay ();

display.setTextSize (2); // ባለ 2 ኤክስ ልኬት ጽሑፍ ይሳሉ

display.setTextColor (ነጭ);

display.setCursor (5, 2);

display.println ("እንኳን ደህና መጡ");

display.println ("አስተማሪዎች");

display.println ("ፕሮጀክት");

display.display ();

መዘግየት (3000);

timeClient.begin ();

}

ባዶነት loop ()

{

timeClient.update ();

display.clearDisplay ();

Serial.println (timeClient.getFormattedTime ());

display.setTextSize (2); // ባለ 2 ኤክስ ልኬት ጽሑፍ ይሳሉ

display.setTextColor (BLUE);

display.setCursor (0, 2);

int hh = timeClient.getHours ();

int mm = timeClient.getMinutes ();

int ss = timeClient.getSeconds ();

ከሆነ (hh> 12)

{

hh = hh-12;

display.print (hh);

display.print (":");

ማሳያ.ሕትመት (ሚሜ);

display.print (":");

display.print (ss);

display.println ("PM");

}

ሌላ

{

display.print (hh);

display.print (":");

ማሳያ.ሕትመት (ሚሜ);

display.print (":");

display.print (ss);

display.println ("AM");

}

int ቀን = timeClient.getDay ();

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

date_time = timeClient.getFormattedDate ();

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

ሕብረቁምፊ ቀን = date_time.substring (0 ፣ index_date);

Serial.println (ቀን);

display.println (ቀን);

display.display ();

// የመጀመሪያ ጽሑፍን አሳይ}

ደረጃ 6 - ቀን እና ሰዓት ማግኘት

ቀን እና ሰዓት ማግኘት
ቀን እና ሰዓት ማግኘት

ሁሉንም ነገር በትክክል ካገናኙ እና ኮዱን በትክክል ከሰቀሉ ከዚያ የ ntp ሰዓትዎ በተቀባው ማሳያ ውስጥ በሚሮጥበት ጊዜ እንደ እኔ በተቀባ ማሳያ ላይ ሲሠራ ማየት ይችላሉ። ለውጤት እባክዎን ምስሉን ይመልከቱ።

የሚመከር: