ESP32 کے ساتھ DS3231 ریئل ٹائم کلاک (RTC) ماڈیول کا استعمال کیسے کریں

Esp32 K Sat Ds3231 Ryyl Aym Klak Rtc Ma Ywl Ka Ast Mal Kys Kry



ESP32 بلٹ ان وائی فائی اور بلوٹوتھ صلاحیتوں کے ساتھ ایک سمارٹ مائیکرو کنٹرولر بورڈ ہے۔ ESP32 ایک اندرونی RTC کے ساتھ آتا ہے، لیکن اس کا کام طاقت پر منحصر ہے۔ لہذا اگر آپ ایسے پروجیکٹس یا سرکٹس کو ڈیزائن کرنا چاہتے ہیں جنہیں آپ پاور نہ ہونے پر بھی چلانا چاہتے ہیں، تو آپ کو DS1307 یا DS3231 جیسے بیرونی RTC ماڈیول کا استعمال کرنا چاہیے۔

ہم نے پہلے ہی ایک ٹیوٹوریل کیا ہے۔ DS1307 ESP32 ماڈیول کے ساتھ انٹرفیس کر رہا ہے۔ . آج ہم DS3231 RTC سینسر کی بنیادی باتوں پر بات کریں گے اور چیک کریں گے کہ کوئی اسے ESP32 بورڈ کے ساتھ کیسے انٹرفیس کر سکتا ہے۔

فہرست کا خانہ:







1. DS3231 RTC ماڈیول کیا ہے؟



2. ESP32 کے ساتھ DS3231 کو کیسے انٹرفیس کریں۔



3. ہارڈ ویئر





4. کوڈ

5. آؤٹ پٹ



6. ESP32 کا استعمال کرتے ہوئے OLED اسکرین پر RTC DS3231 ٹائم کیسے ڈسپلے کریں

نتیجہ

1. DS3231 RTC ماڈیول کیا ہے؟

DS3231 ماڈیول انتہائی درست ٹائم کیپنگ فراہم کرتا ہے۔ اس میں ایک مربوط درجہ حرارت معاوضہ کرسٹل آسکیلیٹر (TCXO) شامل ہے جو ہمیں بڑی درستگی کے ساتھ وقت فراہم کرتا ہے۔ ماڈیول Master-Slave کنفیگریشن کا استعمال کرتے ہوئے I2C پروٹوکول پر کام کرتا ہے۔ یہ بیک اپ بیٹری کے ساتھ وقت اور تاریخ رکھ سکتا ہے یہاں تک کہ جب کوئی مین ان پٹ پاور نہ ہو۔ یہ عام طور پر ان آلات میں استعمال ہوتا ہے جو وقت اور تاریخ پر منحصر ہوتے ہیں۔

DS3231 سیکنڈوں، منٹوں اور گھنٹوں پر نظر رکھتا ہے۔ یہ تاریخوں اور ہفتے کے دنوں کا ریکارڈ بھی رکھ سکتا ہے۔ لیپ سالوں سے نمٹنے کے وقت، یہ خود بخود وقت کے مطابق ایڈجسٹ کرتا ہے۔ نیز، یہ 12-hour یا 24-hour دونوں فارمیٹ میں وقت دکھا سکتا ہے، AM/PM اشارے کے ساتھ مکمل۔

1.1 DS3231 بمقابلہ DS1307

DS3231 اور DS1307 دونوں بیٹری بیک اپ سپورٹ کے ساتھ ٹائم کیپنگ ماڈیول ہیں۔ تاہم، DS3231 DS1307 سے زیادہ درست ہے۔ بنیادی وجہ یہ ہے کہ DS1307 ٹائم کیپنگ کے لیے بیرونی 32kHz کرسٹل پر منحصر ہے۔

تاہم، RTC DS3231 میں اندرونی درجہ حرارت معاوضہ کرسٹل آسیلیٹر (TCXO) شامل ہے۔ اس سے یہ بیرونی درجہ حرارت سے کم متاثر ہوتا ہے اور اس کے نتیجے میں، اسے DS1307 کے مقابلے میں ہر سال چند منٹ کی درستگی کا فائدہ ہوتا ہے۔

1.2 DS3231 پن آؤٹ

DS3231 I2C پروٹوکول کا استعمال کرتے ہوئے کام کرتا ہے۔ اس RTC ماڈیول کے مرکز میں، ہمارے پاس میکسم کی طرف سے ڈیزائن کردہ درست RTC چپ ہے۔ یہ چپ ہر وقت کام کرتا ہے اور ESP32 یا Arduino بورڈ کے ساتھ I2C کا استعمال کرتے ہوئے بات چیت کرتا ہے۔

RTC DS3231 ماڈیولز کے اہم پن یہ ہیں:

  • VCC: اس پن کو اپنے پاور سورس کے مثبت ٹرمینل سے جوڑیں۔
  • GND: زمینی رابطہ۔
  • SDA: سیریل ڈیٹا پن (I2C کمیونیکیشن کے لیے استعمال کیا جاتا ہے)۔
  • SCL: سیریل کلاک پن (I2C انٹرفیس کا بھی حصہ)۔
  • QW: اسکوائر ویو آؤٹ پٹ پن (ایک متواتر سگنل پیدا کر سکتا ہے، جیسے کہ الارم یا وقت کے دیگر مقاصد کے لیے)۔
  • 32K: 32KHz آسکیلیٹر آؤٹ پٹ (وقت کے عین مطابق ایپلی کیشنز کے لیے مفید)۔

RTC DS3231 ماڈیول کے مرکزی آن بورڈ اجزاء درج ذیل ہیں:

  • بیٹری ہولڈر: یہ ماڈیول کو چلانے کی اجازت دیتا ہے جب بیرونی طاقت غائب ہو۔
  • آر ٹی سی چپ: یہ چپ وقت اور تاریخ کو برقرار رکھتی ہے۔
  • AT24C32 EEPROM: یہ 1,000,000 رائٹ سائیکل کے ساتھ ڈیٹا لاگنگ اور دیگر مقاصد کے لیے غیر مستحکم اسٹوریج فراہم کرتا ہے۔
  • TCXO: درجہ حرارت کی مختلف رینج کے لیے صحیح وقت فراہم کرنے کے لیے درجہ حرارت سے معاوضہ والا آسکیلیٹر۔
  • درجہ حرارت کا محرک: یہ درجہ حرارت کی ریڈنگ لیتا ہے اور انہیں ماڈیول کی خصوصیت کے حصے کے طور پر فراہم کرتا ہے۔

2. DS3231 کو ESP32 کے ساتھ کیسے انٹرفیس کریں۔

DS3231 کو ESP32 کے ساتھ انٹرفیس کرنے کے لیے، آپ کو انسٹال کرنے کی ضرورت ہے۔ RTClib لائبریری پہلا. اس Adafruit RTC لائبریری کو انسٹال کرنے کے بعد، آپ I2C پروٹوکول کا استعمال کرتے ہوئے اپنے ESP32 بورڈ کو DS3231 کے ساتھ جوڑ سکتے ہیں۔ ESP32 I2C کو RTC DS3231 ماڈیول کے ساتھ مربوط کرنے کے لیے، آپ ESP32 D21 اور D22 پن استعمال کر سکتے ہیں۔

2.1 RTC DS3231 کے ساتھ ESP32 کا وائرنگ ڈایاگرام

سب سے پہلے، آپ کو اپنے I2C RTC DS3231 ماڈیول کے ساتھ ESP32 کو وائر کرنا ہوگا۔ وائرنگ کے لیے ذیل میں دی گئی پن کنفیگریشن پر عمل کریں:

ESP32 کو RTC DS3231 کے ساتھ جوڑنے کے بعد، آپ کی وائرنگ کا خاکہ اس طرح نظر آنا چاہیے۔ آپ DS3231 کو ESP32 کے VIN پن سے بھی پاور کر سکتے ہیں۔ DS3231 کے آپریٹنگ وولٹیجز 3.3 سے 5.5 VDC ہیں۔

2.2 مطلوبہ لائبریریوں کو انسٹال کرنا

سرکٹ تیار ہونے کے بعد، اگلا مرحلہ ہے۔ اپنے ESP32 بورڈ کو Arduino IDE کے ساتھ ترتیب دیں۔ . DS3231 کو انٹرفیس کرنے کے لیے، آپ کو انسٹال کرنے کی ضرورت ہوگی۔ RTClib لائبریری . آپ اسے Arduino IDE لائبریری مینیجر کا استعمال کرکے انسٹال کر سکتے ہیں۔

3. ہارڈ ویئر

DS3231 پر مبنی RTC گھڑی ESP32 کے ساتھ ڈیزائن کرنے کے لیے آپ کو درج ذیل ہارڈویئر کی ضرورت ہوگی۔

  • ESP32 ترقیاتی بورڈ
  • RTC DS3231 ماڈیول
  • CR2032 بیٹری
  • جمپر تاریں۔
  • بریڈ بورڈ

4. کوڈ

RTC لائبریری کو انسٹال کرنے کے بعد، اگلا حصہ DS3231 کے لیے کوڈ لکھنا اور اسے ESP32 بورڈ پر اپ لوڈ کرنا ہے۔ سب سے پہلے، آپ کو اپنا موجودہ وقت مقرر کرنے کے لیے کوڈ لکھنا ہوگا۔ DS3231 میں وقت مقرر کرنے کے بعد، یہ وقت کو یاد رکھے گا اور چلتا رہے گا چاہے آپ کا ESP32 بورڈ آف ہو جائے۔

اب Arduino IDE کھولیں، مرتب کریں، اور کوڈ کو ESP32 بورڈ میں جلا دیں۔

#include
#include

RTC_DS3231 rtc ; // RTC_DS3231 کلاس کی ایک مثال شروع کریں۔

باطل سیٹ اپ ( ) {
سیریل شروع ( 115200 ) ;
تار۔ شروع ( ) ;

اگر ( ! آر ٹی سی شروع ( ) ) {
سیریل پرنٹ ایل این ( 'RTC کا پتہ نہیں چلا' ) ;
جبکہ ( 1 ) ; // RTC نہ ملنے پر غیر معینہ مدت تک لٹکا دیں۔
}

//ابتدائی تاریخ اور وقت متعین کرنے کے لیے نیچے دی گئی لائن کو غیر تبصرہ کریں۔
//rtc.adjust(DateTime(__DATE__, __TIME__));
}

باطل لوپ ( ) {
// سینسر سے موجودہ وقت پڑھیں (DS3231)
ابھی تاریخ کا وقت = آر ٹی سی ابھی ( ) ;

// گھنٹے، منٹ اور سیکنڈ کے لیے دو ہندسوں کے ساتھ ایک ہی لائن پر تاریخ اور وقت پرنٹ کریں۔
سیریل پرنٹ کریں ( 'موجودہ تاریخ: ' ) ;
سیریل پرنٹ کریں ( ابھی. سال ( ) ، ڈی ای سی ) ;
سیریل پرنٹ کریں ( '/' ) ;
پرنٹ ٹو ڈیجیٹ ( ابھی. مہینہ ( ) ) ;
سیریل پرنٹ کریں ( '/' ) ;
پرنٹ ٹو ڈیجیٹ ( ابھی. دن ( ) ) ;
سیریل پرنٹ کریں ( ' موجودہ وقت: ' ) ;
پرنٹ ٹو ڈیجیٹ ( ابھی. گھنٹہ ( ) ) ;
سیریل پرنٹ کریں ( ' :' ) ;
پرنٹ ٹو ڈیجٹ ( ابھی. منٹ ( ) ) ;
سیریل پرنٹ کریں ( ' :' ) ;
پرنٹ ٹو ڈیجیٹ ( ابھی. دوسرا ( ) ) ;
سیریل پرنٹ ایل این ( ) ;

تاخیر ( 1000 ) ; // ہر 1 سیکنڈ میں اپ ڈیٹ کریں۔
}

باطل پرنٹ ٹو ڈیجیٹ ( int نمبر ) {
اگر ( نمبر < 10 ) {
سیریل پرنٹ کریں ( '0' ) ; // سنگل ہندسوں کے نمبروں کے لیے آگے کا صفر شامل کریں۔
}
سیریل پرنٹ کریں ( نمبر ) ;
}

4.1 کوڈ کی وضاحت

کوڈ ایک تار لائبریری کی مدد سے سیریل I2C کمیونیکیشن کو شروع کرنے سے شروع ہوتا ہے۔ اس کے بعد، ہم نے DS3231 ماڈیول کے ساتھ انٹرفیس کرنے کے لیے Adafruit کے ذریعے RTC لائبریری کو شامل کیا۔ یہ لائبریری RTC DS3231 ماڈیول کے ساتھ تعامل کے لیے ایک فنکشن فراہم کرتی ہے۔

میں سیٹ اپ حصہ، I2C بس شروع ہو گئی ہے اور دستیاب I2C آلات کے لیے چیک کیا جاتا ہے۔ اگر نہیں ملا تو، پروگرام غیر معینہ مدت کے لیے لٹک جائے گا۔ بوڈ کی شرح بھی بیان کی گئی ہے لہذا آپ Arduino IDE سیریل مانیٹر پر آؤٹ پٹ چیک کر سکتے ہیں۔

پہلی بار گھڑی کی ترتیب

DS3231 پروگرامنگ کرتے وقت، آپ کو کرنا ہوگا۔ اس لائن کو غیر تبصرہ کریں۔ . یہ آپ کے سسٹم کا وقت حاصل کرے گا اور اسے RTC میموری میں محفوظ کر لے گا۔ ایسا کرنے سے، RTC ماڈیول گھڑی آپ کے سسٹم کلاک کے ساتھ ہم آہنگ ہو جاتی ہے۔

//rtc.adjust(DateTime(__DATE__, __TIME__));

وقت مقرر ہونے کے بعد آپ کو مذکورہ کوڈ کو دوبارہ اپ لوڈ کرنا ہوگا لیکن اس بار آپ کو کرنا ہوگا۔ rtc.adjust() فنکشن لائن پر تبصرہ کریں۔ . بصورت دیگر، یہ آپ کے سابقہ ​​مقررہ وقت کو اوور رائٹ کر دے گا اور جب آپ کا ESP32 بند ہو جائے گا، RTC آپ کے کوڈ کو اپ لوڈ کرنے کے وقت سے دوبارہ شروع ہو جائے گا۔

ایسا کرنے سے، آپ کا وقت RTC ماڈیول کے پس منظر میں اس وقت تک موجود رہے گا جب تک کہ RTC ماڈیول کو اپنے CR2032 سیل میں طاقت حاصل ہے۔

میں لوپ حصہ، موجودہ تاریخ اور وقت کو rtc.now() فنکشن کا استعمال کرتے ہوئے DS3231 ماڈیول سے پڑھا جاتا ہے۔ تاریخ اور وقت کے اجزاء نکالے جاتے ہیں اور فارمیٹ شدہ تاریخ Arduino IDE سیریل مانیٹر پر ہر ایک سیکنڈ میں پرنٹ کی جاتی ہے۔

5. آؤٹ پٹ

ESP32 بورڈ پر کوڈ اپ لوڈ کرنے کے بعد، آپ دیکھیں گے کہ Arduino IDE سیریل مانیٹر پر پرنٹنگ کا وقت شروع ہو جائے گا۔

6. ESP32 کا استعمال کرتے ہوئے OLED اسکرین پر RTC DS3231 ٹائم کیسے ڈسپلے کریں

آپ ایک قدم آگے بھی جا سکتے ہیں اور DS3231 سے پڑھنے کے بعد اپنی OLED اسکرین پر وقت ڈسپلے کر سکتے ہیں۔ اس کے لیے آپ کو انسٹال کرنے کی ضرورت ہے۔ Adafruit GFX SSD1306 لائبریری Arduino IDE میں.

انسٹال ہونے کے بعد، ESP32 کو درج ذیل کنفیگریشن میں OLED اور RTC ماڈیول کے ساتھ جوڑیں۔

اپنے سینسر کو جوڑنے کے بعد، آپ کو سرکٹ نیچے کی اسکیمیٹک ڈایاگرام کی طرح نظر آئے گا۔

اب درج ذیل DS3231 کوڈ کو ESP32 بورڈ پر اپ لوڈ کریں۔

#include
#include
#include
# 'RTClib.h' شامل کریں

RTC_DS3231 rtc ;

چار دن [ 7 ] [ 12 ] = { 'اتوار' ، 'پیر' ، 'منگل' ، 'بدھ' ، 'جمعرات' ، 'جمعہ' ، 'ہفتہ' } ;

Adafruit_SSD1306 ڈسپلے = Adafruit_SSD1306 ( 128 ، 64 ، اور تار ، - 1 ) ;

باطل سیٹ اپ ( ) {
سیریل شروع ( 115200 ) ;

ڈسپلے شروع ( SSD1306_SWITCHCAPVCC ، 0x3C ) ;

اگر ( ! آر ٹی سی شروع ( ) ) {
سیریل پرنٹ ایل این ( 'آر ٹی سی نہیں مل سکا! سرکٹ چیک کریں۔' ) ;
جبکہ ( 1 ) ;
}
//پہلی بار وقت مقرر کرتے ہوئے نیچے کی سطر کو غیر تبصرہ کریں۔
//rtc.adjust(DateTime(__DATE__, __TIME__));
ڈسپلے صاف ڈسپلے ( ) ;
ڈسپلے setTextColor ( سفید ) ;
ڈسپلے سیٹ ٹیکسٹ سائز ( 2 ) ;
ڈسپلے سیٹ کرسر ( 0 ، بیس ) ;
ڈسپلے پرنٹ کریں ( 'RTC گھڑی' ) ;
ڈسپلے ڈسپلے ( ) ;
تاخیر ( 5000 ) ;
}

باطل لوپ ( ) {
ابھی تاریخ کا وقت = آر ٹی سی ابھی ( ) ;

ڈسپلے صاف ڈسپلے ( ) ;
ڈسپلے سیٹ ٹیکسٹ سائز ( 2 ) ;
ڈسپلے سیٹ کرسر ( 75 ، 0 ) ;
ڈسپلے پرنٹ ایل این ( ابھی. دوسرا ( ) ، ڈی ای سی ) ;
ڈسپلے سیٹ ٹیکسٹ سائز ( 2 ) ;
ڈسپلے سیٹ کرسر ( 25 ، 0 ) ;
ڈسپلے پرنٹ ایل این ( ' :' ) ;
ڈسپلے سیٹ ٹیکسٹ سائز ( 2 ) ;
ڈسپلے سیٹ کرسر ( 65 ، 0 ) ;
ڈسپلے پرنٹ ایل این ( ' :' ) ;
ڈسپلے سیٹ ٹیکسٹ سائز ( 2 ) ;
ڈسپلے سیٹ کرسر ( 40 ، 0 ) ;
ڈسپلے پرنٹ ایل این ( ابھی. منٹ ( ) ، ڈی ای سی ) ;
ڈسپلے سیٹ ٹیکسٹ سائز ( 2 ) ;
ڈسپلے سیٹ کرسر ( 0 ، 0 ) ;
ڈسپلے پرنٹ ایل این ( ابھی. گھنٹہ ( ) ، ڈی ای سی ) ;
ڈسپلے سیٹ ٹیکسٹ سائز ( 2 ) ;
ڈسپلے سیٹ کرسر ( 0 ، 25 ) ;
ڈسپلے پرنٹ ایل این ( ابھی. دن ( ) ، ڈی ای سی ) ;
ڈسپلے پرنٹ کریں ( دن [ ابھی. ہفتے کے دن ( ) ] ) ;
ڈسپلے سیٹ ٹیکسٹ سائز ( 2 ) ;
ڈسپلے سیٹ کرسر ( بیس ، 25 ) ;
ڈسپلے پرنٹ ایل این ( '-' ) ;
ڈسپلے سیٹ ٹیکسٹ سائز ( 2 ) ;
ڈسپلے سیٹ کرسر ( 35 ، 25 ) ;
ڈسپلے پرنٹ ایل این ( ابھی. مہینہ ( ) ، ڈی ای سی ) ;
ڈسپلے سیٹ ٹیکسٹ سائز ( 2 ) ;
ڈسپلے سیٹ کرسر ( 60 ، 25 ) ;
ڈسپلے پرنٹ ایل این ( '-' ) ;
ڈسپلے سیٹ ٹیکسٹ سائز ( 2 ) ;
ڈسپلے سیٹ کرسر ( 75 ، 25 ) ;
ڈسپلے پرنٹ ایل این ( ابھی. سال ( ) ، ڈی ای سی ) ;
ڈسپلے ڈسپلے ( ) ;
}

کوڈ کی وضاحت

کوڈ کا آغاز کچھ اہم لائبریریوں سے ہوا جو RTC اور OLED اسکرینوں کے لیے درکار ہیں۔ OLED ڈسپلے Adafruit SSD1306 لائبریری کا استعمال کرتے ہوئے ترتیب دیا گیا ہے۔

لوپ حصے میں، موجودہ تاریخ اور وقت rtc.now() کا استعمال کرتے ہوئے حاصل کیے جاتے ہیں۔ اس کے بعد، OLED اسکرین صاف ہو جاتی ہے اور وقت کے اجزاء ڈیجیٹل گھڑی کی شکل میں ظاہر ہوتے ہیں۔ آپ تاریخ اور وقت کی شکل کو ایڈجسٹ کرنے کے لیے کوڈ میں ترمیم بھی کر سکتے ہیں۔

آپ کے بورڈ پر کوڈ اپ لوڈ ہونے کے بعد، آپ کو OLED اسکرین پر موجودہ وقت مل جائے گا۔

نوٹ: مذکورہ کوڈ استعمال کرتا ہے۔ 0x3C OLED کے لیے I2C پتہ۔ یہ سب سے عام I2C پتہ ہے جو SSD1306 OLED ڈسپلے پر دستیاب ہے۔ اگر آپ اپنی OLED اسکرین کے لیے I2C پتہ تلاش کرنا چاہتے ہیں، تو آپ اسے چلا سکتے ہیں۔ I2C سکینر کوڈ .

نتیجہ

DS3231 ایک RTC سینسر ہے جسے ٹائم کیپنگ کے لیے استعمال کیا جا سکتا ہے۔ اس میں بیٹری کا بیک اپ ہے جو آپ کا مائیکرو کنٹرولر بورڈ آف ہونے پر بھی وقت کو درست رکھ سکتا ہے۔ ESP2 کو DS3231 کے ساتھ انٹرفیس کرنے کے لیے، آپ کو اپنے Arduino IDE میں RTClib لائبریری کو انسٹال کرنا ہوگا۔ اس کے بعد، آپ کو ESP32 کے ڈیجیٹل پن کا استعمال کرتے ہوئے RTC ماڈیول کو I2C پروٹوکول پر جوڑنا ہوگا۔ ایک بار منسلک ہونے کے بعد، بس کوڈ اپ لوڈ کریں اور وقت کو ایڈجسٹ کریں۔ اب RTC سینسر وقت کو برقرار رکھے گا، اور آپ اسے ڈیزائن ٹائم پر مبنی پروجیکٹس پر اپنے سیریل مانیٹر پر پڑھ سکتے ہیں۔