تحلیل کتابخانه

تحلیل و بررسی کتابخانه ESPTime.h

esptime-h-arduino-library-digispark
نوشته شده توسط معین صابری

زمانبندی یکی از مهم ترین و پرکابردترین فعالیت ها در پروژه های مختلف به شمار می رود. اهمیت زمان به قدری حساس و مهم است که بسیاری از پروژه ها وابسته به این پارامتر هستند. همانطور که زمان و تاریخ برای ما اهمیت کلیدی دارد؛ بسیاری از برنامه ها و پروژه ها جهت اجرای وظایف خود باید از زمان و تاریخ به طور دقیق، آگاه باشند. خوشبختانه در طیف وسیع توسعه پردازنده ها، بسیاری از شرکت های تولید کننده به این امر مهم اهمیت داده و از تراشه های ساعت درون ساختار چیپ های خود استفاده می کنند. به عنوان مثال ماژول های مخابراتی سیم کارتی SIM800، دارای تراشه ساعت RTC هستند. در همین رابطه، تراشه های ESP32 از ساعت داخلی بهره‌مند هستند. به کمک این تراشه و کتابخانه ESPTime با یکبار تنظیم زمان، به طور همیشگی زمان را در اختیار خواهیم داشت.

جهت راه اندازی و کار با تراشه ساعت داخلی ESP32، کتابخانه ای توسعه یافته است. به لطف توسعه این کتابخانه به سادگی و در کمترین زمان ممکن می توان به اطلاعات زمانی نظیر روز، ماه، سال، ساعت، دقیقه و ثانیه دسترسی داشت. در این آموزش به تحلیل و بررسی این کتابخانه کلیدی خواهیم پرداخت. مطابق روال معمول آموزش های کتابخانه ای، ابتدا به نصب کتابخانه و سپس الزامات فنی آن خواهیم پرداخت. در ادامه، با توابع کلیدی و کاربردی کتابخانه آشنا خواهیم شد. در نهایت با ارایه مثال، نحوه استفاده از توابع را مشاهده خواهیم نمود. در ادامه تحلیل کتابخانه ESPTime با  تحلیل کتابخانه با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.

 


RTC در تراشه ESP32


همانطور که پیشتر گفته شد، تراشه ESP32 از ساعت داخلی بهره می برد. به کمک این ساعت می توان اطلاعاتی نظیر روز، ماه، سال، دقیقه، ثانیه و ساعت را در اختیار داشت. آنطور که اطلاع دارید، تراشه های ساعت جهت کار نیازمند یک منبع کلاک هستند. تراشه ساعت ESP32 نیز از این قائده خارج نبوده و می بایست از یک منبع کلاک بهره ببرد. این منبع کلاک طبق توضیحات زیر تامین می گردد.

۱-منبع کلاک خارجی با فرکانس ۳۲ کیلوهرتز

۲-منبع کلاک خارجی با تقسیم فرکانسی ۴

۳-اسیلاتور داخلی با فرکانس ۱۵۰ کیلوهرتز و قابل تنظیم

۴-اسیلاتور داخلی ۸ مگاهرتزی

۵-اسیلاتور داخلی ۳۱٫۲۵ کیلوهرتزی با تقسیم فرکانسی ۲۵۶ از اسیلاتور داخلی ۸ مگاهرتزی

در این شرایط به کمک یکی از منابع فرکانسی بالا، می توان ساعت داخلی تراشه ESP32 را که به نام RTC معروف است، راه اندازی نمود.  توجه داشته باشید که کتابخانه ESP32Time.h از منبع کلاک خارجی و یا سرویس NTP جهت دریافت زمان استفاده نکرده  و از منبع داخلی کلاک بهره می برد. در قسمت بعد با نحوه نصب کتابخانه ESPTime آشنا خواهیم شد.

 


نصب کتابخانه ESP32Time.h


پس از آشنایی با کتابخانه ESP32Time جهت راه اندازی RTC داخلی تراشه ESP32، نوبت به نصب کتابخانه می رسد. همانطور که اطلاع دارید، کتابخانه ها یکی از ابزارهای کلیدی و کاربردی در برنامه نویسی به شمار می روند. به کمک این ابزار، می توانیم توابع نوشته شده در فایلهایی به نام کتابخانه ذخیره کرده و سپس در پروژه های متعدد از آن استفاده کنیم.  همانطور که پیشتر گفته شد، برای راه اندازی و کار با ماژول کتابخانه توسعه داده شده است. برای استفاده از این کتابخانه، ابتدا باید آن را نصب کنیم. برای نصب کتابخانه در محیط آردویینو، ابتدا مطابق تصویر زیر بر روی گزینه Tools و سپس Manage Libraries کلیک کنید.

اصول نصب کتابخانه در آردوینو - دیجی اسپارک

 

پس از کلیک بر روی گزینه Manage Libraries، در صفحه ظاهر شده، در قسمت کادر جستجو، عبارت ESP32Time.h را جستجو نموده و کتابخانه مشخص شده در تصویر زیر را نصب نمایید.

نصب و دانلود کتابخانه ESPTime در آردوینو - دیجی اسپارک

 


توابع کلیدی و کاربردی کتابخانه


پس از نصب کتابخانه ESPTime، نوبت به تحلیل و بررسی توابع کلیدی و کاربردی کتابخانه ESPTime می رسد. جدول زیر شرح توابع را به همراه توضیحات آن نمایش می دهد.

شرح ورودی ها تابع
به کمک این تابع می توان زمان فعلی را برای RTC تعریف کرد تا شمارش از زمان فعلی آغاز شود. مقدار پیشفرض برای شروع شماره برای تاریخ ۲۱ ژانویه ۲۰۲۱ در ورودی نخست تعیین شده است.

ورودی دوم هم برای وجود یا عدم وجود شمارش میلی ثانیه است. در صورتیکه مطابق مقدار پیشفرض صفر باشد، واحد میلی ثانیه نخواهیم داشت.

ورودی اول از نوع long جهت تنظیم پایه زمانی شمارش

ورودی دوم جهت فعال/غیر فعال سازی میلی ثانیه

 

void setTime(long epoch = 1609459200, int ms = 0)
این تابع فرم دیگری از فراخوانی تابع فوق است. در این تابع ورودی ها به ترتیب زیر برای شمارش آغاز می شوند:

sc=ثانیه

mn=دقیقه

hr=ساعت

dy=روز

mt=ماه

yr=سال

ms=میلی ثانیه(اختیاری)

 

ورودی ها جهت تنظیم پارامترهای زمانی void setTime(int sc, int mn, int hr, int dy, int mt, int yr, int ms = 0)
دریافت زمان در خروجی به صورت ساختار(struct) بدون ورودی tm getTimeStruct()
دریافت زمان در خروجی به صورت رشته بدون ورودی String getTime()
دریافت تاریخ و سپس زمان در خروجی

در صورتیکه ورودی true شود، تاریخ به طور کامل دریافت می گردد.

ورودی از نوع بولین String getDateTime(bool mode = false)
دریافت زمان و سپس تاریخ در خروجی

در صورتیکه ورودی true شود، تاریخ به طور کامل دریافت می گردد.

ورودی از نوع بولین String getTimeDate(bool mode = false)
نمایش تاریخ در خروجی

در صورتیکه ورودی true شود، تاریخ به طور کامل دریافت می گردد.

ورودی از نوع بولین String getDate(bool mode = false)
دریافت زمان به صورت AM یا PM

در صورتیکه ورودی true شود، خروجی با حروف بزرگ و در صوت false بودن خروجی با حروف کوچک  خواهد بود.

ورودی از نوع بولین String getAmPm(bool lowercase = false)
دریافت ثانیه بدون ورودی int getSecond()
دریافت دقیقه بدون ورودی int getMinute()
دریافت ساعت

اگر ورودی true باشد مد ۲۴ ساعته و اگر ورودی false باشد مد ۱۲ ساعته در خروجی قرار می گیرد.

ورودی از نوع بولین int getHour(bool mode)
دریافت روز از ماه در خروجی بدون ورودی             int getDay();
دریافت روز از هفته در خروجی بدون ورودی int getDayofWeek()
دریافت روز از سال در خروجی بدون ورودی int getDayofYear()
دریافت ماه بدون ورودی int getMonth()
دریافت سال بدون ورودی int getYear()

پس از آشنایی با توابع کلیدی و کاربردی، نوبت به اجرای یک نمونه برنامه می رسد. قسمت بعد را به این موضوع اختصاص می دهیم.

 


اجرای یک نمونه برنامه


پس از آشنایی با توابع کلیدی، نوبت به اجرای نمونه برنامه می رسد. برنامه زیر اطلاعات زمان را از RTC را دریافت کرده و در خروجی قرار می دهد. البته پیش از آن زمان را بخوانیم، باید آن را یکبار تنظیم کنیم. جهت دانلود برنامه نمونه، می توانید روی این لینک کلیک کنید.

 


لوازم مورد نیاز


لینک خرید تراشه ESP32، کلیک کنید

 


جمع بندی


در مجموعه آموزش های تحلیل و بررسی کتابخانه های آردوینو، این قسمت را به یکی از مهم ترین و کاربردی ترین کتابخانه های آردوینو اختصاص دادیم. کتابخانه ESP32Time یک کتابخانه کاربردی جهت استفاده از تراشه RTC داخلی ESP32 است. به کمک این کتابخانه می توانیم در فرمی استاندارد و البته ساده، اقدام به راه اندازی و کار با RTC داخلی ESP32 نماییم. در این آموزش به تحلیل و بررسی این کتابخانه پرداختیم. مطابق رویه معمول، ابتدا مختصری به RTC داخلی ESP32 و روش کار با آن پرداخته شد. سپس در ادامه نصب کتابخانه را از نظر گذراندیم. پس از این مرحله، به بررسی توابع کلیدی و کاربردی پرداختیم. در نهایت با ارایه مثالی، شیوه استفاده از توابع در برنامه های عملی را مشاهده نمودیم.

 

چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریع‌ترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند می‌توانید از همین طریق اطلاع رسانی کنید.

 

درباره نویسنده

معین صابری

کارشناسی ارشد رشته معماری سیستم های کامپیوتری

مالي که ز تو کس نستاند، علم است
حرزي که تو را به حق رساند، علم است
جز علم طلب مکن تو اندر عالم
چيزي که تو را ز غم رهاند، علم است
(شیخ بهایی)

تبادل نظر و رفع عیب با ثبت دیدگاه

۳ دیدگاه

  • با سلام. سپاسگزارم از مطلب خوبتان. یک سوالی داشتم. در برنامه شما چگونه میلی ثانیه را بخوانیم؟به عبارتی چه قسمتی باید به کد اضافه کنیم تا این امر محقق شود؟
    #include //فراخوانی کتابخانه
    ESP32Time rtc; //ایجاد شی از کلاس کتابخانه
    void setup() {
    Serial.begin(115200); //راه اندازی پورت سریال
    rtc.setTime(30, 28, 23, 3, 4, 2022); // شروع شمارش از سوم آوریل ۲۰۲۲ ساعت ۲۳:۲۸:۳۰
    }

    void loop() {
    Serial.println(rtc.getSecond()); // دریافت ثانیه
    Serial.println(rtc.getMinute()); // دریافت دقیقه
    Serial.println(rtc.getHour(true)); // دریافت

    delay(1000);
    }

    • سلام و از اینکه دیر پاسخ می دهم من را ببخشید
      از تابع getMillis() می توانید استفاده کنید.