اتصال ماژول RTC DS1307 به رزبری پای
محتویات
Raspberry Pi ماژول داخلی برای دریافت تاریخ و زمان دقیق ندارد. این بدان معناست که Raspberry Pi با خاموش شدن تاریخ و زمان را از دست می دهد. با این حال، راههای جایگزینی برای ارائه زمان دقیق به رزبری پای وجود دارد. برخی از روش ها عبارتند از: سیستم موقعیت یابی جهانی (GPS)، سرور زمان (NTP) و ساعت های زمان واقعی (RTC)
در این آموزش، ما بر روی ساعت های زمان واقعی تمرکز خواهیم کرد. نحوه کار ساعتهای RTC، نحوه اتصال آنها به رزبری پای، و در نهایت، تمام مراحل مورد نیاز برای راه اندازی ساعت RTC DS1307 با رزبری پای را توضیح خواهیم داد.
ساعت RTC چیست؟
ساعت RTC یک مدار مجتمع الکترونیکی (IC) برای پیگیری دقیق تاریخ و زمان است. NXP و Microchip بزرگترین فروشندگان در این بازار هستند. یک ماژول RTC از تراشه ساعت واقعی، یک نگهدارنده باتری سکه ای، یک نوسان ساز کریستالی و یک رابط I2C تشکیل شده است.
همانطور که در تصویر بالا می بینیم، RTC ها با یک باتری سکه ای (معمولا یک باتری 3 ولتی CR1220) کار می کنند، بنابراین به سیستم برق کامپیوتر متصل نیستند. استفاده از باتری به این دلیل است که اطمینان داشته باشیم زمانی که برق رزبری پای قطع شد، ماژول همچنان روشن بماند و تاریخ و ساعت را حفظ کند.
نحوه کار ماژول RTC
آی سی DS1307 از رابط سریال I2C برای ارتباط با CPU میزبان استفاده می کند.
توضیحات پین های آی سی DS1307:
- X1 و X2: اتصالات برای نوسان ساز کریستالی استاندارد 32.768 کیلوهرتز
- VBAT: اتصال ورودی برای یک باتری سکه ای استاندارد 3 ولت. به طور معمول، ولتاژ باتری برای عملکرد مناسب باید بین 2 ولت و 3.5 ولت باشد.
- GND: اتصال GND
- SDA: رابط داده سریال I2C
- SCL: رابط ساعت سریال I2C
- SQW/OUT: درایور موج مربعی/خروجی
- VCC: منبع تغذیه اولیه
DS1307 به عنوان یک دستگاه Slave عمل می کند. ماژول DS1307 دارای یک پورت برق ورودی و یک درگاه باتری است. هنگامی که ورودی برق خارجی (Vcc) کمتر از ولتاژ باتری می شود، آی سی منبع تغذیه را به باتری تغییر میدهد.
اتصال ساعت DS1307 به رزبری پای
پیگیری تاریخ و زمان در Raspberry Pi یا هر سیستم دیگر یک وظیفه مهم است. ارائه زمان واقعی در پروژه هایی که به ثبت داده ها میپردازند بسیار مهم است. علاوه بر ارائه تاریخ و زمان دقیق، از ماژول RTC برای کاربرد های زیر هم میتوان استفاده کرد:
- همگام سازی: فرض کنید سنسورهای زیادی داریم که داده ها را به یک دستگاه ذخیره سازی داده مرکزی ارسال می کنند. هر حسگر قرار است قرائت های خود را در فواصل زمانی مشخصی که توسط سیستم از پیش تعیین شده است ارسال کند. بنابراین ما باید زمان تمام حسگر ها را به گونه ای همگام کنیم که داده ها را در زمان های صحیح ارسال کنند. با این کار از دست دادن داده جلوگیری می شود.
- کنترل قدرت: یکی از کارآمدترین راهها برای بهبود زمان کارکرد Raspberry Pi با باتری، استفاده از RTC است.این کار با گنجاندن حالتهای خواب در یک برنامه کاربردی برای صرفهجویی در مصرف باتری و افزایش عمر باتری انجام میشود. بنابراین، در برنامههایی که حالتهای خواب وجود دارد، میزبان باید بداند که چه زمانی دستگاه را بیدار کند یا آن را به خواب بفرستد. برای انجام این کار، میزبان به زمان دقیق نیاز دارد و RTC یکی از بهترین گزینه ها برای پیگیری زمان است.
اینها قطعاتی هستند که شما نیاز خواهید داشت:
- رزبری پای
- ماژول RTC DS1307
- برد بورد
- سیم های جامپر
برای اتصال ماژول DS1307 RTC به Raspberry Pi، این شماتیک سیم کشی را دنبال کنید:
اولین کاری که باید در Raspberry Pi انجام دهیم این است که رابط I2C را با استفاده از دستور sudo rasp-config فعال کنیم. همچنین میتوانید به تنظیمات قسمت Interfaces بروید و I2C را Enable کنید.
برای فعال کردن رابط I2C روی yes کلیک کنید. نسخه های اخیر Raspbian دارای ماژولهای RTC و DS1307 هستند که در هسته آن بارگذاری شدهاند، بنابراین نیازی به نصب چیزی نداریم. با این حال، اگر از نسخههای اولیه Raspbian استفاده میکنید، باید بستههایی را نصب کنید که Raspberry Pi را قادر میسازد تا با ماژول RTC تعامل داشته باشد. بنابراین قبل از استفاده از ماژول، باید درایورهای I2C را نصب کنیم. از دستور زیر استفاده کنید:
sudo apt-get install python-smbus i2c-tools
ماژول RTC را با اجرای دستور زیر نصب کنید:
sudo modprobe rtc-ds1307
سپس با تایپ sudo bash دستور را به عنوان super user اجرا کنید و سپس از دستور زیر استفاده کنید:
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
سپس با تایپ exit در ترمینال از کاربر root خارج شوید. پس از آن، باید با متن زیر دستگاه را اضافه کنیم:
dtoverlay=i2c-rtc,ds1307
سپس، ما باید ماژول I2C را در زمان بوت بارگذاری کنیم تا خطوط متن زیر را به فایل ماژول ها اضافه کنیم:
i2c-dev
i2c-bcm2708
rtc-ds1307
در نهایت، ما باید اسکریپتی ایجاد کنیم که زمان رزبری پای را از ساعت سخت افزاری در هنگام بوت به روز کند. خطوط کد زیر را به فایل /etc/rc.local اضافه می کنیم.
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
sudo hwclock -s
date
Raspberry Pi را مجدد راه اندازی کنید و بررسی کنید که آیا ماژول DS1307 RTC شناسایی شده است یا خیر. دستور زیر را اجرا کنید:
sudo i2cdetect -y 1
نحوه بررسی تاریخ و زمان خروجی توسط RTC
ما اکنون یک پیوند ارتباطی بین Raspberry Pi و ماژول RTC داریم. اکنون باید زمان درستی را در RTC تنظیم کنیم تا هر بار که Raspberry Pi بوت می شود از آن استفاده کنیم. برای این کار در ابتدا از زمان سیستم Raspberry Pi برای به روز رسانی زمان RTC استفاده می کنیم. ما از دستور زیر استفاده می کنیم:
sudo hwclock -w
در مرحله بعد، باید بررسی کنیم که آیا زمان RTC به روز شده است یا خیر. برای بررسی زمان RTC فعلی، ما دستور زیر را اجرا می کنیم:
sudo hwclock -r
و خروجی زیر را دریافت می کنیم:
فرمت تاریخ و زمان RTC
تصویر بالا نمونه خروجی RTC را نشان می دهد. جزئیات تاریخ و زمان به صورت زیر نمایش داده می شود:
- 2020-10-29: سال، ماه و روز
- 22:25:15 ساعت، دقیقه و ثانیه
- +02:00: دو ساعت جلوتر
نحوه تنظیم تاریخ و زمان در RTC
در نهایت، ما باید اطمینان حاصل کنیم که Raspberry Pi از اطلاعات تاریخ و زمان RTC به عنوان تاریخ و زمان سیستم استفاده میکند. بنابراین دستور زیر را اجرا می کنیم:
sudo hwclock -s
برای بررسی اینکه تاریخ/زمان سیستم Raspberry Pi از RTC تنظیم شده است، ما اطلاعات تاریخ و زمان راسیستم Raspberry Pi با اجرای “Date” در ترمینال دریافت می کنیم.
date
sudo hwclock -r
با این روش ما زمان رزبری پای و زمان RTC را بدست می آوریم.
در اینجا، می بینیم که جزئیات سال، ماه، تاریخ، ساعت و دقیقه سیستم رزبری پای و RTC هماهنگ شده است. با این حال، تنها ثانیه ها با اختلاف 3 ثانیه هماهنگ نیستند که ممکن است در اکثر برنامه ها ناچیز باشد. امیدواریم در تحقیقات آتی به بررسی علل این تفاوت بپردازیم.
بروزرسانی ساعت رزبری پای در زمان بوت
این آخرین مرحله بسیار مهم است. در اینجا، ما می خواهیم که Raspberry Pi زمان را از RTC به طور خودکار دریافت و استفاده کند. ممکن است بخواهیم برنامه از راه دور و بدون استفاده از دستورات دستی برای به روز رسانی زمان سیستم Raspberry Pi اجرا شود. در اینجا مراحلی وجود دارد که باید دنبال کنید.
ساعت سخت افزاری اشتباه را حذف کنید
برای غیرفعال کردن ساعت سخت افزاری اشتباه، دستورات زیر را پشت سر هم اجرا می کنیم:
sudo apt-get -y remove fake-hwclock
sudo update-rc.d -f fake-hwclock remove
sudo systemctl disable fake-hwclock
sudo nano /lib/udev/hwclock-set را اجرا کنید و خطوط کد زیر در حالت کامنت قرار دهید (با قرار دادن # در ابتدای هر خط)
#if [ -e /run/systemd/system ] ; then
# exit 0
#fi
/sbin/hwclock --rtc=$dev --systz --badyear
/sbin/hwclock --rtc=$dev --systz
همگام سازی زمان RTC و Raspberry PI
یک راه حل ساده برای این کار ایجاد یک کار cron است که دستور به روز رسانی زمان در هنگام بوت را اجرا می کند. crontab را با اجرای sudo crontab -e
باز کنید و سپس @reboot sudo hwclock -s
را در انتهای فایل اضافه کنید.
تبریک می گویم! ما راه اندازی RTC را در Raspberry Pi خود به پایان رساندیم. دفعه بعد که Raspberry Pi را بوت می کنیم، زمان رزبری پای به طور خودکار با زمان ماژول RTC همگام می شود. اگر در مورد هر چیزی سوالی دارید حتما در زیر کامنت بگذارید!