سلام به همه مایکروالکامی ها. در مطالب قبلی نحوه تنظیم ساعت ماژول های GSM با استفاده از سرور NTP بررسی شد. در این مطلب قراره با استفاده از ماژول ESP8266 از سرور NTP ساعت و زمان رو دریافت کنیم. پس با من تا انتهای مطلب همراه باشید. همچنین شما میتونید سایر مطالب من رو از این قسمت مطالعه کنید.
NTP چیست؟
NTP مخفف عبارت Network Time Protocol میباشد. در واقع این پروتکل یکی از قدیمی ترین پروتکل های مورد استفاده در شبکه های مبتنی بر IP هست. این پروتکل اولین بار در سال 1985 در دانشگاه Delaware معرفی شد.
در حال حاضر از نسخه NTPv4 استفاده میشود. با استفاده از پروتکل NTP امکان بهره مندی و استفاده از ساعت دقیق در حد ساعت اتمی در شبکه های کامپیوتری فراهم میشه.
NTP از ساعت هماهنگ جهانی یا UTC برای هماهنگی ساعت کامپیوتر در حد میلی ثانیه استفاده میکنه.
قطعات مورد نیاز
کتابخانه NTP
برای استفاده از سرور NTP و ارتباط با آن به کتابخانه آن نیاز میباشد. ابتدا از صفحه گیت هاب مربوطه کتابخانه را دانلود کنید. پس از دانلود و استخراج فایل های داخل آن، از مسیر زیر کتابخانه را نصب کنید.
Sketch > Include Library > Add .ZIP Library
برنامه نویسی
کد های زیر را در محیط برنامه نویسی آردوینو وارد کنید. با استفاده از مطلب پروگرام کردن ماژول ESP8266 آن را برروی ماژول پروگرام نمایید.
#include <NTPClient.h> #include <ESP8266WiFi.h> #include <WiFiUdp.h> const char *ssid = "نام مودم"; const char *password = "رمز مودم"; const long utcOffsetInSeconds = 3600 * 4.5; String days[7]={"یکشنبه", "دوشنبه", "سه شنبه", "چهارشنبه", "پنجشنبه", "جمعه", "شنبه"}; WiFiUDP ntpUDP; NTPClient timeClient(ntpUDP, "pool.ntp.org", utcOffsetInSeconds); void setup() { Serial.begin(9600); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.print("Connected to "); Serial.println(ssid); timeClient.begin(); } void loop() { timeClient.update(); Serial.print(days[timeClient.getDay()]); Serial.print(" ,"); Serial.println(timeClient.getFormattedTime()); delay(1000); }
تحلیل کد ها
در مرحله اول کتابخانه های مورد نیاز را معرفی کردیم.
#include <NTPClient.h> #include <ESP8266WiFi.h> #include <WiFiUdp.h>
با استفاده از دو متغییر زیر، نام و پسورد مودم وایفای را معرفی میکنیم.
const char *ssid= "نام مودم"; const char *password = "پسورد مودم";
تفاوت ساعت ایران با گرینویچ 3.5+ ساعت است. این تفاوت در تابستان 4.5+ ساعت خواهد شد. لذا با استفاده از متغیر زیر این مورد را به برنامه را اضافه میکنیم.
const long utcOffsetInSeconds = 3600 * 4.5;
برای نمایش روز های هفته نیز، روز ها را داخل آرایه days[7] تعریف کردیم.
با استفاده از دو خط زیر تابع و سرور NTP معرفی شده است.
WiFiUDP ntpUDP; NTPClient timeClient(ntpUDP, "pool.ntp.org", utcOffsetInSeconds);
با استفاده از تکه کد زیر، به مودم مورد نظر متصل خواهیم شد.
WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.print("Connected to "); Serial.println(ssid);
با استفاده از کد زیر، دریافت ساعت را استارت میزنیم.
timeClient.begin();
با استفاده از کد زیر، از سرور NTP ساعت را خوانده و آن را هر 1 ثانیه روی سریال ماینتور نمایش خواهیم داد.
timeClient.update(); Serial.print(days[timeClient.getDay()]); Serial.print(" ,"); Serial.println(timeClient.getFormattedTime()); delay(1000);
مشاهده نتیجه
نتیجه گیری
در این مطلب روش دریافت زمان و ساعت از سرور NTP با استفاده از ماژول ESP8266 مورد بررسی قرار گرفت. در اکثر پروژه های مبتنی بر اینترنت اشیا دریافت ساعت و استفاده از آن از واجبات میباشد. با استفاده از این مطلب و کانکت شدن به اینترنت میتوانید این عملیات را براحتی انجام دهید.
امیدوارم از این آموزش کمال بهره را برده باشید. در صورتی که هرگونه نظر یا سوال داشتید درباره این آموزش لطفا اون رو در انتهای همین صفحه در قسمت دیدگاه ها قرار بدید. در کوتاه ترین زمان ممکن به اون ها پاسخ خواهم داد. اگر این مطلب براتون مفید بود، اون رو حتما به اشتراک بگذارید. همینطور میتونید این آموزش را پس از اجرای عملی توی اینستاگرام با هشتگ microelecom# به اشتراک بگذارید و پیج مایکروالکام (microelecom@) رو هم منشن کنید.