در این مطلب قصد داریم تا ماژول ساعتds1307 (این ماژول دارای ارتباط I2C می باشد)را مورد بررسی قرار داده و چگونگی راه اندازی این ماژول را به همراه esp32بصورت کامل اموزش دهیم
# | نوع | تعداد | خرید |
---|---|---|---|
1 | esp32 | 1 | |
2 | سیم جامپر | 2 | |
3 | برد بورد | 1 | |
4 | ماژول DS1307 | 1 |
برای برنامه نویسی این پروژه از نرم افزار اردوینو استفاده میکنیم.
https://dl.espressif.com/dl/package_esp32_index.json, http://arduino.esp8266.com/stable/package_esp8266com_index.json
tools-> manager Library
ماژول ساعت DS1307 ، برای نگهداری تاریخ و ساعت ،در پروژههای متفاوت مورد استفاده قرار میگیرد. با این ماژول میتوان اطلاعات ثانیه، دقیقه، ساعت، روز، روز هفته، ماه و سال را نگهداری کرد.و از اطلاعات این ماژول در هر بخش از پروژه که نیاز به زمان یا تاریخ داریم استفاده کرد.
این ماژول یک ورودی باطری دارد و زمانیکه تغذیه اصلی مدار قطع شود، همچنان نگهداری زمان را با دقت انجام میدهد.
همچنین بر روی این ماژول قسمتی برای سنسور دمای DS18B20 نیز تعبیه شده است، که در صورت نیاز در پروژه ها می توان از ان استفاده کرد
ماژول ساعت DS1307دارای ارتباط I2C ،دارای 12پایه میباشد.که به شرح زیر میباشد 5 پایه در یک سمت برای ارتباط با قطعه DS1307 :
7 پایه دیگر در سمت دیگر برای ارتباط با قطعه 24C32 EEPROM :
هر دو جفت پایه I2C و تغذیه و پایه DSدر دو طرف ماژول یکسان بوده و با اتصال یک سمت به برد اردوینو ،میتوان ارتباط را میان ماژول و برد اردوینو برقرار کرد.
اولین قدم افزودن کتابخانه به برنامه است
بعد از افزودن کتابخانه می بایست یک شی از ان کتابخانه بسازیم تا در برنامه بتوانیم از ان استفاده کنیم
در اینجا پورت سریال را راه اندازی می کنیم با 9600 بیت در ثانیه تا بتوان اطلاعات ساعت را در سریال ببینیم
با استفاده ازrtc.begin() می توانیم از ارتباط i2c را بسازیم و همچنین از اتصال دو طرفه اردوینو و ماژول ساعت مطلع بشویم
ارتباط دوطرفه شکل نگرفته بود میکرو ارتباط را قطع می کند و پیام بر روی سریال نمایش داده می شود زمانی که از این تابع استفاده کنیم،ابتدا اطلاعات بصورت کامل ارسال میشود سپس برنامه ادامه پیدا خواهد کرد.و تا زمانی که اطلاعات بصورت کامل ارسال نشده ،برنامه متوقف خواهد شد.
در این بخش ما پک می کنیم که ایا دستگاه در حال انجام تبادل ارتباط است و یا ارتباط ماژول شده است که در صورت قطعی یک پیام بر روی سریال می گزاریم
اگر ماژول ساعت را برای اولین بار راه اندازی کردید می بایست یک زمان اولیه برای ان تعریف کنید تا ماژول بتواند با این زمان شروع به کاکند ماتاریخ 2021/09/04ساعت 14:37:55را تنظیم کردیم
برنامههای آردوینو دو قسمت دارند.همانطور که پیش تر گفته شد،مقدار دهی اولیه در void setup انجام میشود.اما برنامه اصلی که همیشه هم در حال تکرار است در حلقه لوپ یا همان void loopانجام میشود
در اینجا ما میبایست زمان فعلی دستگاه را از او بگیریم چون تابع lpop یک تابعی است که همیشه تکرار می شود
این مرحله نهایی است که ما تاریخ زمان را در سه فرمت می توانیم بر روی سریال نمایش دهیم تاریخ زمان کامل ،تاریخ به تنهایی ،زمان به تنهایی که تمام این زمان ها در یک متغیر خاص به نام DateTime ریخته می شود
و در اخر نیز دستگاه به مدت 5 ثانیه استراحت می کند و دوباره تمام مراحل بالا تکرار می شود
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include "RTClib.h"
RTC_DS1307 rtc;
void setup () {
Serial.begin(9600);
#ifndef ESP8266
while (!Serial); // wait for serial port to connect. Needed for native USB
#endif
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
Serial.flush();
abort();
}
if (! rtc.isrunning()) {
Serial.println("RTC is NOT running, let's set the time!");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
rtc.adjust(DateTime(2021, 9, 04, 14, 37, 55));
}
void loop() {
DateTime time = rtc.now();
//Full Timestamp
Serial.println(String("DateTime::TIMESTAMP_FULL:\t") + time.timestamp(DateTime::TIMESTAMP_FULL));
//Date Only
Serial.println(String("DateTime::TIMESTAMP_DATE:\t") + time.timestamp(DateTime::TIMESTAMP_DATE));
//Full Timestamp
Serial.println(String("DateTime::TIMESTAMP_TIME:\t") + time.timestamp(DateTime::TIMESTAMP_TIME));
Serial.println("\n");
//Delay 5s
delay(5000);
}
پروژه مشابه
کامنت ها
هر هفته یک اموزش
هر هفته یک پروژه
هر هفته یک ویجت