الیکٹرانکس اور ایمبیڈڈ ڈیوائسز کا وقت پر نظر رکھنے کے لئے آر ٹی سی یا ریئل ٹائم گھڑی سب سے عام استعمال شدہ ماڈیول ہے۔ لیکن آر ٹی سی کے ساتھ مسئلہ یہ ہے کہ کمپیوٹرز میں مائکروچپس اتنے درست نہیں ہیں اور وہ صرف مقامی ڈیوائس کا وقت فراہم کرسکتے ہیں۔ دوسری طرف ، این ٹی پی سرورز سے وقت نکالنے کے ل using انٹرنیٹ کا استعمال وقت کے ل for بہتر حل ہے کیونکہ یہ زیادہ درست ہے اور یہ دنیا کے کسی بھی جغرافیائی علاقے کا وقت مہیا کرسکتا ہے۔ ہمیں صرف ایک Wi-Fi ماڈیول کی ضرورت ہے اور این ٹی پی سرورز کے ذریعہ دنیا میں کسی بھی مقام کا وقت حاصل کرنے کے لئے انٹرنیٹ تک رسائی حاصل کرنا ہے۔ اس ٹیوٹوریل میں ، ہم NTP سرورز سے موجودہ وقت اور تاریخ حاصل کرنے اور اسے OLED ڈسپلے پر ظاہر کرنے کے لئے ESP8266 NodeMCU استعمال کریں گے ۔
نیٹ ورک ٹائم پروٹوکول (این ٹی پی)
کمپیوٹر نیٹ ورکس کے مابین گھڑیاں مطابقت پذیر بنانے کے لئے این ٹی پی ایک قدیم ترین نیٹ ورکنگ انٹرنیٹ پروٹوکول (IP) ہے۔ اسے 1981 میں ڈیلاوورسٹی یونیورسٹی کے ڈیوڈ ایل ملز نے ڈیزائن کیا تھا۔ اس پروٹوکول کا استعمال بہت سے نیٹ ورک کو مربوط یونیورسل ٹائم (UTC) کے ساتھ کچھ ملی سیکنڈ کے اندر ہم آہنگ کرنے کے لئے کیا جاسکتا ہے ۔ UTC بنیادی وقت کا معیار ہے جس کے ذریعہ دنیا گھڑی اور وقت کو منظم کرتی ہے۔ مختلف جغرافیائی مقامات کے لئے یو ٹی سی تبدیل نہیں ہوتا ہے اور مختلف ہوتا ہے۔ این ٹی پی یو ٹی سی کو ٹائم ریفرنس کے بطور استعمال کرتی ہے اور پورے انٹرنیٹ پر درست اور ہم وقت سازی کا وقت مہیا کرتی ہے۔
این ٹی پی ایک اعلی درجہ کے کلائنٹ سرور ماڈل پر کام کرتا ہے۔ ٹاپ ماڈل میں حوالہ گھڑیاں ہیں جو "اسٹریٹم0" کے نام سے جانا جاتا ہے جیسے ایٹمی گھڑیاں ، ریڈیو لہریں ، جی پی ایس ، جی ایس ایم جو سیٹلائٹ سے وقت حاصل کرتی ہیں۔ سرورز جو stratum0 سے وقت وصول کرتے ہیں انہیں "stratum1" کہا جاتا ہے اور سرورز جو stratum1 سے وقت وصول کرتے ہیں انہیں "stratum2" کہتے ہیں ۔ یہ جاری ہے اور ہر مرحلے کے بعد وقت کی درستگی کم ہوتی جارہی ہے۔ مطابقت پذیر ہونے کے لئے این ٹی پی نے خود بخود کئی دستیاب وقت کے ذرائع کا انتخاب کیا ہے جس کی وجہ سے یہ غلطی برداشت کرنے کے قابل پروٹوکول بنتا ہے۔
تو یہاں اس پروجیکٹ میں ، ہم NSP سرور سے ESP8266 نوڈیم سی یو کا استعمال کرتے ہوئے اور OLED ڈسپلے پر دکھا رہے ہیں ۔ اس طرح کی انٹرنیٹ گھڑی کو گذشتہ سبق میں ESP32 استعمال کرکے بنایا گیا ہے۔
درست وقت حاصل کرنے کے لئے ESP8266 انٹرنیٹ کا استعمال کرتے ہوئے NTP سرورز تک رسائی حاصل کرسکتا ہے۔ یہاں این ٹی پی کلائنٹ سرور موڈ میں کام کرتا ہے ، ای ایس پی 8266 کلائنٹ ڈیوائس کے طور پر کام کرتا ہے اور یو ڈی پی (یوزر ڈیٹاگرام پروٹوکول) کا استعمال کرتے ہوئے این ٹی پی سرورز کے ساتھ رابطہ کرتا ہے ۔ موکل ایک درخواست کا پیکٹ این ٹی پی سرورز کو منتقل کرتا ہے اور اس کے بدلے میں این ٹی پی ایک ٹائم اسٹیمپ پیکٹ بھیجتا ہے جس میں درستگی ، ٹائم زون ، یونکس ٹائم اسٹیمپ وغیرہ جیسی معلومات پر مشتمل ہوتا ہے۔ پھر مؤکل تاریخ اور وقت کی تفصیلات کو الگ کرتا ہے جسے ضرورت کے مطابق درخواستوں میں مزید استعمال کیا جاسکتا ہے۔
ضروری اجزاء
- مونوکروم 7 پن SSD1306 0.96 "OLED ڈسپلے
- ESP8266 نوڈیم سی یو
- مائیکرو USB کیبل
- بریڈ بورڈ
- مرد سے مرد جمپر تاروں
سرکٹ ڈایاگرام اور رابطے
یہ 7 پن OLED ڈسپلے ایس پی آئی پروٹوکول کا استعمال کرتے ہوئے ESP8266 ماڈیول کے ساتھ بات چیت کرتا ہے ، ذیل میں سرکٹ ڈایاگرام اور OLED SPI پنوں کو NodeMCU کے ساتھ انٹرنیٹ ٹائم ظاہر کرنے کے لئے مربوط کرنے کے لئے کنکشن ٹیبل ہیں ۔
نہیں. |
OLED ڈسپلے |
نوڈیم سی یو |
1 |
GND |
GND |
2 |
وی ڈی ڈی |
3.3V |
3 |
ایس سی کے |
ڈی 5 |
4 |
موسی (ایس پی آئی) یا ایس ڈی اے (I2C) |
ڈی 7 |
5 |
دوبارہ تلاش کریں |
ڈی 3 |
6 |
ڈی سی |
ڈی 2 |
7 |
CS |
ڈی 8 |
اس مونوکروم 7-پن OLED ڈسپلے اور ESP8266 نوڈیم سی یو کے ساتھ اس میں مداخلت کے بارے میں مزید معلومات کے ل To ، لنک پر عمل کریں۔
کوڈ کی وضاحت
پہلے ہمیں NSP لائبریری کو ESP8266 میں ڈاؤن لوڈ اور انسٹال کرنا ہے۔ این ٹی پی کلائنٹ کے لئے بہت ساری لائبریریاں دستیاب ہیں۔ آپ ان میں سے کوئی بھی آرڈینوو IDE سے انسٹال کرسکتے ہیں۔ اس ٹیوٹوریل میں میں نے تراناائس کے ذریعہ این ٹی پی کلینٹ لائبریری انسٹال کی ہے کیونکہ این ٹی پی سرورز سے تاریخ اور وقت حاصل کرنے کے ل use یہ استعمال کرنا آسان ہے اور اس میں افعال ہیں۔ ESP8266 نوڈیم سی یو کو ارڈینو آئی ڈی ای کا استعمال کرتے ہوئے آسانی سے پروگرام کیا جاسکتا ہے۔
این ٹی پی لائبریری کو انسٹال کرنے کے لئے ، پہلے مندرجہ بالا لنک استعمال کرکے لائبریری ڈاؤن لوڈ کریں اور پھر ارڈینو آئ ڈی ای کا استعمال کرکے اسے انسٹال کریں۔ اس کو انسٹال کرنے کے لئے اسکیچ پر جائیں > لائبریری شامل کریں> زپ لائبریری شامل کریں ، پھر زپ فولڈر کو اس جگہ پر جاکر کھولیں جہاں آپ نے زپ فولڈر ڈاؤن لوڈ کیا ہے اور ارڈینو آئ ڈی ای کو دوبارہ اسٹارٹ کریں۔
NTPClient لائبریری مثالوں کے ساتھ آتی ہے۔ آرڈینوو IDE اور گوٹو کی مثالیں کھولیں > NTPClient> اعلی درجے کی ۔ اس خاکہ میں دیا گیا کوڈ این ٹی پی سرور سے سیریل مانیٹر پر دکھاتا ہے۔ ہم اس خاکہ کو OLED ڈسپلے پر موجودہ وقت اور تاریخ کو ظاہر کرنے کے لئے استعمال کریں گے۔
اس ٹیوٹوریل کے آخر میں مکمل کوڈ دستیاب ہے ، یہاں میں نے کوڈ کے کچھ اہم حصے کی وضاحت کی ہے۔
ESP8266WiFi لائبریری ESP8266 مخصوص Wi-Fi روٹین کو نیٹ ورک سے مربوط کرنے کے ل provides فراہم کرتی ہے۔ WiFiUDP.h UDP پیکیج بھیجنے اور وصول کرنے کو سنبھالتا ہے۔ چونکہ ہم نوڈیمکیو کے ساتھ OLED کو انٹرفیس کرنے کے لئے SPI پروٹوکول استعمال کررہے ہیں لہذا ہم "SPI.h" لائبریری درآمد کریں گے۔ اور "Adaf فرو_GFX.h" اور "Adafruit_SSD1306.h" OLED ڈسپلے کیلئے استعمال ہوتے ہیں۔
# شامل کریں
ہمارا OLED سائز 128x64 ہے لہذا ہم اسکرین کی چوڑائی اور اونچائی کو بالترتیب 128 اور 64 سیٹ کر رہے ہیں۔ لہذا ایس پی آئی مواصلات کے ل N نوڈیم سی یو سے منسلک OLED پنوں کے متغیر کی وضاحت کریں۔
# تعی SCن SCREEN_WIDTH 128 // OLED ڈسپلے کی چوڑائی ، پکسلز میں # وضاحتی SCREEN_HEIGHT 64 // OLED ڈسپلے اونچائی ، // ایس ایس ڈی1306 ڈسپلے سافٹ ویئر SPI کا استعمال کرتے ہوئے منسلک کرنے کا اعلامیہ (ڈیفالٹ کیس): # OLED_MOSI D7 # Define OLED_CLK DD #Dff D2 # تعریف OLED_CS D8 # وضاحت OLED_RESET D3
اڈفروٹ_ ایس ایس ڈی1306 ڈسپلے (SCREEN_WIDTH ، SCREEN_HEIGHT ، OLED_MOSI ، OLED_CLK ، OLED_DC ، OLED_RESET ، OLED_CS)؛
ذیل میں کوڈ کی لائنوں میں اپنے Wi-Fi SSID اور پاس ورڈ سے "your_ssid" اور "your_password" کو تبدیل کریں۔
const char * ssid = "your_ssid"؛ const چار * پاس ورڈ = "آپ_ پاس ورڈ"؛
WiFi.begin فنکشن کو SSID اور پاس ورڈ دے کر WI-Fi کنکشن مرتب کریں ۔ ESP8266 کا رابطہ NodeMCU سے منسلک ہونے میں کچھ وقت لگتا ہے لہذا ہمیں اس کے متصل ہونے تک انتظار کرنا ہوگا۔
WiFi.begin (ssid، پاس ورڈ)؛ جبکہ (WiFi.status ()! = WL_CONNECTED) { تاخیر (500)؛ سیریل.پرنٹ (".")؛ }
تاریخ اور وقت کی درخواست کرنے کے لئے ، NTP سرورز کے پتے کے ساتھ ٹائم کلائنٹ کی ابتدا کریں ۔ بہتر درستگی کے ل N این ٹی پی سرورز کا پتہ منتخب کریں جو آپ کے جغرافیائی علاقے کے قریب ہیں۔ یہاں ہم " پول.ntp.org " استعمال کرتے ہیں جو دنیا بھر سے سرور دیتا ہے۔ اگر آپ ایشیاء سے سرور کا انتخاب کرنا چاہتے ہیں تو آپ " asia.pool.ntp.org " استعمال کرسکتے ہیں ۔ ٹائم کلائنٹ آپ کے ٹائم زون کے ملی سیکنڈ میں آفسیٹ UTC بھی لیتا ہے۔ مثال کے طور پر ، بھارت کے لئے یو ٹی سی آفسیٹ +5: 30 ہے لہذا ہم اس آفسیٹ کو ملی سیکنڈ میں تبدیل کرتے ہیں جو 5 * 60 * 60 + 30 * 60 = 19800 کے برابر ہے۔
رقبہ |
UTC ٹائم آفسیٹ (گھنٹے اور منٹ) |
UTC ٹائم آفسیٹ (سیکنڈ) |
بھارت |
+5: 30 |
19800 |
لندن |
0:00 |
0 |
نیویارک |
-5: 00 |
-18000 |
WiFiUDP ntpUDP؛ این ٹی پی کلائنٹ ٹائم کلینٹ (ntpUDP، "पूल.ntp.org"، 19800،60000)؛
SSD1306_SWITCHCAPVCC ڈسپلے کو شروع کرنے کے لئے اندرونی طور پر 3.3V پیدا کرنے کے لئے دیا گیا ہے۔ جب OLED شروع ہوتا ہے تو یہ متن کے سائز 2 اور 3 سیکنڈ کے لئے BLUE رنگ کے ساتھ " DIEST CIRCUIT DIEST " میں دکھاتا ہے ۔
اگر (display.begin (SSD1306_SWITCHCAPVCC)!) { Serial.println (F ("SSD1306 مختص ناکام رہے"))؛ کے لئے (؛؛)؛ // کرو نہیں کارروائی، لوپ ہمیشہ کے لئے } display.clearDisplay ()؛ display.setTextSize (2)؛ // 2 ایکس اسکیل ٹیکسٹ ڈسپلے ڈرا کریں۔ سیٹ ٹیکسٹ کلر (BLUE)؛ ڈسپلے.سیٹ کرسر (5 ، 2)؛ display.println ("خوش آمدید")؛ display.println ("سرکٹ")؛ display.println ("DIGEST")؛ display.display ()؛ تاخیر (3000)؛
این ٹی پی سرور کی طرف سے تاریخ اور وقت مقرر کرنے کے لئے این ٹی پی کلائنٹ شروع () فنکشن کا استعمال کرتے ہوئے شروع کیا جاتا ہے۔
timeClient.begin ()؛
جب بھی ہم این ٹی پی سرورز سے درخواست کرتے ہیں تو تاریخ اور وقت حاصل کرنے کے لئے اپ ڈیٹ () فنکشن کا استعمال کیا جاتا ہے۔
timeClient.update ()؛
115200 کی Baud کی شرح سیریل مانیٹر پر وقت پرنٹ کرنے کے لئے مقرر کی گئی ہے۔
سیریل.بیگین (115200)؛ سیریل.پرنٹ لین (ٹائم کلائنٹ. گیٹ فارمیٹڈ ٹائم ())؛
getHours ()، getMinutes ()، getSeconds ()، getDay لائبریری کا فنکشن ہیں اور موجودہ وقت ، منٹ ، سیکنڈ اور دن NTP سرور سے دیتا ہے۔ ذیل میں کوڈ AM اور PM کے مابین وقت کو فرق کرنے کے لئے استعمال ہوتا ہے۔ اگر ہم گیٹ ہورز () کا استعمال کرنے کا وقت 12 سے زیادہ ہے تو ہم نے اس وقت کو بطور وزیر اعظم بطور اس کا صبح طے کیا۔
int hh = timeClient.getHours ()؛ انٹ ملی میٹر = ٹائم کلائنٹ.بیٹ منٹ ()؛ int ss = timeClient.getSeconds ()؛ int day = timeClient.getDay ()؛ if (hh> 12) { hh = hh-12؛ display.print (hh)؛ display.print (":")؛ ڈسپلے.پرنٹ (ملی میٹر)؛ display.print (":")؛ display.print (ss)؛ display.println ("PM")؛ } else { display.print (hh)؛ display.print (":")؛ ڈسپلے.پرنٹ (ملی میٹر)؛ display.print (":")؛ display.print (ss)؛ display.println ("AM")؛ } INT دن timeClient.getDay (=)؛ display.println ("'" + arr_days + "" ")؛
getFormattedDate () کو NTP سرور سے "yyyy-mm-dd" فارمیٹ میں ڈیٹ حاصل کرنے کے لئے استعمال کیا جاتا ہے ۔ یہ فنکشن "yyyy-mm-dd T hh: mm: ss format میں تاریخ اور وقت دیتا ہے ۔ لیکن ہمیں صرف تاریخ کی ضرورت ہے لہذا ہمیں اس تار کو تقسیم کرنا ہے جو تاریخ کے وقت کی شکل میں "T" تک اسٹور کیا جاتا ہے جو اسٹریننگ () فنکشن کے ذریعہ کیا جاتا ہے اور پھر اس تاریخ کو "تاریخ" متغیر میں اسٹور کرتے ہیں۔
ڈیٹ ٹائم = ٹائم کلائنٹ۔ گیٹ فارمیٹڈ ڈیٹ ()؛ int انڈیکس_ڈیٹ = ڈیٹ_ٹائم. انڈیکس آف ("T")؛ سٹرنگ کی تاریخ = تاریخ_ٹائم ۔سوسٹرینگ (0 ، انڈیکس_ڈیٹ)؛ سیریل.پرنٹلن (تاریخ)؛ display.println (تاریخ)؛ display.display ()؛
یہ کس طرح ہے OLED انٹرنیٹ وقت کی گھڑی آخر میں نظر آئے گا: