كيفية استخدام وحدة ساعة الوقت الحقيقي (RTC) DS3231 مع ESP32

Kyfyt Astkhdam Whdt Sa T Alwqt Alhqyqy Rtc Ds3231 M Esp32



ESP32 عبارة عن لوحة تحكم دقيقة ذكية مزودة بإمكانيات Wi-Fi وBluetooth مدمجة. يأتي ESP32 مزودًا بـ RTC داخلي، لكن عمله يعتمد على الطاقة. لذلك، إذا كنت تريد تصميم مشاريع أو دوائر تريد تشغيلها حتى في حالة انقطاع الطاقة، فيجب عليك استخدام أي وحدة RTC خارجية مثل DS1307 أو DS3231.

لقد قمنا بالفعل بعمل برنامج تعليمي حول واجهة DS1307 مع وحدة ESP32 . سنناقش اليوم أساسيات مستشعر DS3231 RTC ونتحقق من كيفية ربطه بلوحة ESP32.

جدول المحتويات:







1. ما هي وحدة DS3231 RTC



2. كيفية التعامل مع DS3231 مع ESP32



3. الأجهزة





4. الكود

5. الإخراج



6. كيفية عرض وقت RTC DS3231 على شاشة OLED باستخدام ESP32

خاتمة

1. ما هي وحدة DS3231 RTC

توفر وحدة DS3231 ضبطًا دقيقًا للوقت. يتضمن مذبذبًا بلوريًا مدمجًا معوضًا لدرجة الحرارة (TCXO) لمنحنا الوقت بدقة كبيرة. تعمل الوحدة على بروتوكول I2C باستخدام تكوين Master-Slave. يمكنه الاحتفاظ بالوقت والتاريخ باستخدام بطارية احتياطية حتى في حالة عدم وجود طاقة إدخال رئيسية. يتم استخدامه بشكل شائع في الأجهزة التي تعتمد على الوقت والتاريخ.

يحتفظ DS3231 بعلامات التبويب للثواني والدقائق والساعات. يمكنه أيضًا الاحتفاظ بسجل للتواريخ وأيام الأسبوع. عند التعامل مع السنوات الكبيسة، فإنه يقوم تلقائيًا بضبط الوقت وفقًا لذلك. كما يمكنها عرض الوقت بتنسيق 12 ساعة أو 24 ساعة، مع مؤشر AM/PM.

1.1. DS3231 مقابل DS1307

تعد كل من DS3231 وDS1307 وحدات لحفظ الوقت مع دعم النسخ الاحتياطي للبطارية. ومع ذلك، فإن DS3231 أكثر دقة من DS1307. السبب الرئيسي هو أن DS1307 يعتمد على كريستال خارجي 32 كيلو هرتز لحفظ الوقت.

ومع ذلك، يتميز RTC DS3231 بمذبذب كريستالي داخلي معوض لدرجة الحرارة (TCXO). وهذا يجعله أقل تأثراً بدرجة الحرارة الخارجية ونتيجة لذلك، فهو يتميز بميزة الدقة التي تبلغ بضع دقائق سنويًا مقارنة بـ DS1307.

1.2. DS3231 بينوت

يعمل DS3231 باستخدام بروتوكول I2C. في قلب وحدة RTC هذه، لدينا شريحة RTC الدقيقة التي صممها مكسيم. تتعامل هذه الشريحة مع جميع وظائف الوقت وتتواصل باستخدام I2C مع ESP32 أو لوحة Arduino.

المسامير الرئيسية لوحدات RTC DS3231 هي:

  • بطاقة الائتمان الافتراضية: قم بتوصيل هذا الدبوس بالطرف الموجب لمصدر الطاقة الخاص بك.
  • أرض الواقع: اتصال الأرض.
  • سدا: دبوس البيانات التسلسلية (يستخدم للاتصال I2C).
  • SCL: دبوس الساعة التسلسلي (أيضًا جزء من واجهة I2C).
  • سؤال وجواب: دبوس إخراج الموجة المربعة (يمكن أن يولد إشارة دورية، على سبيل المثال، للإنذارات أو لأغراض التوقيت الأخرى).
  • 32K: خرج مذبذب 32 كيلو هرتز (مفيد لتطبيقات التوقيت الدقيقة).

فيما يلي المكونات الرئيسية الموجودة على متن وحدة RTC DS3231:

  • حامل البطارية: يسمح للوحدة بالاستمرار في العمل عند غياب الطاقة الخارجية.
  • شريحة آر تي سي: تحافظ هذه الشريحة على الوقت والتاريخ.
  • AT24C32 إيبروم: يوفر تخزينًا غير متطاير لتسجيل البيانات وأغراض أخرى مع 1,000,000 دورة كتابة.
  • تكسو: مذبذب يعوض درجة الحرارة لتوفير الوقت الصحيح لمجموعة مختلفة من درجات الحرارة.
  • جهاز استشعار درجة الحرارة: يأخذ قراءات درجة الحرارة ويوفرها كجزء من ميزة الوحدة.

2. كيفية ربط DS3231 مع ESP32

لربط DS3231 مع ESP32، تحتاج إلى تثبيت مكتبة رتكليب أولاً. بعد تثبيت مكتبة Adafruit RTC، يمكنك توصيل لوحة ESP32 الخاصة بك مع DS3231 باستخدام بروتوكول I2C. لتوصيل ESP32 I2C بوحدة RTC DS3231، يمكنك استخدام دبابيس ESP32 D21 وD22.

2.1. مخطط الأسلاك ESP32 مع RTC DS3231

أولاً، عليك توصيل ESP32 بوحدة I2C RTC DS3231. اتبع تكوين الدبوس الموضح أدناه لتوصيل الأسلاك:

بعد توصيل ESP32 بـ RTC DS3231، يجب أن يبدو مخطط الأسلاك الخاص بك بهذا الشكل. يمكنك أيضًا تشغيل DS3231 من دبوس VIN الخاص بـ ESP32. تتراوح جهود التشغيل لـ DS3231 من 3.3 إلى 5.5 فولت تيار مستمر.

2.2. تثبيت المكتبات المطلوبة

بمجرد أن تصبح الدائرة جاهزة، فإن الخطوة التالية هي قم بتكوين لوحة ESP32 الخاصة بك باستخدام Arduino IDE . لربط DS3231، سوف تحتاج إلى تثبيت مكتبة رتكليب . يمكنك تثبيته باستخدام مدير مكتبة Arduino IDE.

3. الأجهزة

ستحتاج إلى الأجهزة التالية لتصميم ساعة RTC المستندة إلى DS3231 مع ESP32:

  • مجلس تطوير ESP32
  • وحدة RTC DS3231
  • بطارية CR2032
  • أسلاك العبور
  • اللوح

4. الكود

بعد تثبيت مكتبة RTC، الجزء التالي هو كتابة الكود الخاص بـ DS3231 وتحميله على لوحة ESP32. أولاً، عليك كتابة الرمز لضبط الوقت الحالي. بعد ضبط الوقت في DS3231، سوف يتذكر الوقت ويستمر في العمل حتى لو تم إيقاف تشغيل لوحة ESP32.

الآن افتح Arduino IDE، وقم بتجميع الكود ونسخه على لوحة ESP32.

#تشمل
#تشمل

RTC_DS3231 رتك ; // تهيئة مثيل لفئة RTC_DS3231

فارغ يثبت ( ) {
مسلسل. يبدأ ( 115200 ) ;
الأسلاك. يبدأ ( ) ;

لو ( ! rtc. يبدأ ( ) ) {
مسلسل. println ( 'لم يتم الكشف عن RTC' ) ;
بينما ( 1 ) ; // قم بالتعليق لأجل غير مسمى إذا لم يتم العثور على RTC
}

// قم بإلغاء التعليق على السطر أدناه لتعيين التاريخ والوقت الأولي
//rtc.adjust(DateTime(__DATE__, __TIME__));
}

فارغ حلقة ( ) {
// قراءة الوقت الحالي من المستشعر (DS3231)
التاريخ والوقت الآن = rtc. الآن ( ) ;

// اطبع التاريخ والوقت على نفس السطر برقمين للساعات والدقائق والثواني
مسلسل. مطبعة ( 'التاريخ الحالي: ' ) ;
مسلسل. مطبعة ( الآن. سنة ( ) , ديسمبر ) ;
مسلسل. مطبعة ( '/' ) ;
printTwoDigits ( الآن. شهر ( ) ) ;
مسلسل. مطبعة ( '/' ) ;
printTwoDigits ( الآن. يوم ( ) ) ;
مسلسل. مطبعة ( ' الوقت الحالي: ' ) ;
printTwoDigits ( الآن. ساعة ( ) ) ;
مسلسل. مطبعة ( ':':' ) ;
printTwoDigits ( الآن. دقيقة ( ) ) ;
مسلسل. مطبعة ( ':':' ) ;
printTwoDigits ( الآن. ثانية ( ) ) ;
مسلسل. println ( ) ;

تأخير ( 1000 ) ; // تحديث كل ثانية واحدة
}

فارغ printTwoDigits ( كثافة العمليات رقم ) {
لو ( رقم < 10 ) {
مسلسل. مطبعة ( '0' ) ; // أضف صفرًا بادئًا للأرقام المكونة من رقم واحد
}
مسلسل. مطبعة ( رقم ) ;
}

4.1. شرح الكود

يبدأ الكود بتهيئة اتصال I2C التسلسلي بمساعدة مكتبة سلكية. بعد ذلك، قمنا بتضمين مكتبة RTC من Adafruit للتواصل مع وحدة DS3231. توفر هذه المكتبة وظيفة للتفاعل مع وحدة RTC DS3231.

في ال يثبت الجزء، يتم تشغيل ناقل I2C والتحقق من وجود أجهزة I2C المتاحة. إذا لم يتم العثور عليه، يتوقف البرنامج إلى أجل غير مسمى. يتم تعريف معدل الباود أيضًا حتى تتمكن من التحقق من الإخراج على شاشة Arduino IDE التسلسلية.

ضبط الساعة لأول مرة

عند برمجة DS3231، عليك أن تفعل ذلك قم بإلغاء التعليق على هذا السطر . سيؤدي هذا إلى الحصول على وقت النظام الخاص بك وتخزينه داخل ذاكرة RTC. من خلال القيام بذلك، تتم مزامنة ساعة وحدة RTC مع ساعة النظام لديك.

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

بعد ضبط الوقت عليك إعادة تحميل الكود أعلاه ولكن هذه المرة عليك القيام بذلك قم بالتعليق على سطر الدالة rtc.adjust() . بخلاف ذلك، سيؤدي هذا إلى استبدال الوقت المحدد السابق وعندما يتم إيقاف تشغيل ESP32، سيبدأ RTC مرة أخرى من وقت تحميل الكود.

من خلال القيام بذلك، سيظل وقتك موجودًا في خلفية وحدة RTC طالما أن وحدة RTC لديها طاقة في خلية CR2032 الخاصة بها.

في ال حلقة الجزء، تتم قراءة التاريخ والوقت الحاليين من وحدة DS3231 باستخدام الدالة rtc.now(). يتم استخراج مكونات التاريخ والوقت ويتم طباعة التاريخ المنسق على شاشة Arduino IDE التسلسلية كل ثانية.

5. الإخراج

بعد تحميل الكود على لوحة ESP32، سترى الوقت الذي سيبدأ فيه الطباعة على شاشة Arduino IDE التسلسلية.

6. كيفية عرض وقت RTC DS3231 على شاشة OLED باستخدام ESP32

يمكنك أيضًا المضي قدمًا وعرض الوقت على شاشة OLED الخاصة بك بعد قراءته من DS3231. لهذا تحتاج إلى تثبيت مكتبة Adafruit GFX SSD1306 في اردوينو IDE.

بمجرد التثبيت، قم بتوصيل ESP32 بوحدة OLED وRTC في التكوين التالي.

بعد توصيل المستشعر الخاص بك، سترى الدائرة تبدو مثل الرسم التخطيطي أدناه.

الآن قم بتحميل كود DS3231 التالي إلى لوحة ESP32.

#تشمل
#تتضمن
#تشمل
#تتضمن 'RTClib.h'

RTC_DS3231 رتك ;

شار أيام [ 7 ] [ 12 ] = { 'الأحد' , 'الاثنين' , 'يوم الثلاثاء' , 'الأربعاء' , 'يوم الخميس' , 'جمعة' , 'السبت' } ;

عرض Adafruit_SSD1306 = Adafruit_SSD1306 ( 128 , 64 , & الأسلاك , - 1 ) ;

فارغ يثبت ( ) {
مسلسل. يبدأ ( 115200 ) ;

عرض. يبدأ ( SSD1306_SWITCHCAPVCC , 0x3C ) ;

لو ( ! rtc. يبدأ ( ) ) {
مسلسل. println ( 'تعذر العثور على RTC! تحقق من الدائرة.' ) ;
بينما ( 1 ) ;
}
// قم بإلغاء التعليق على السطر أدناه أثناء ضبط الوقت لأول مرة
//rtc.adjust(DateTime(__DATE__, __TIME__));
عرض. ClearDisplay ( ) ;
عرض. setTextColor ( أبيض ) ;
عرض. setTextSize ( 2 ) ;
عرض. setCursor ( 0 , عشرين ) ;
عرض. مطبعة ( 'ساعة آر تي سي' ) ;
عرض. عرض ( ) ;
تأخير ( 5000 ) ;
}

فارغ حلقة ( ) {
التاريخ والوقت الآن = rtc. الآن ( ) ;

عرض. ClearDisplay ( ) ;
عرض. setTextSize ( 2 ) ;
عرض. setCursor ( 75 , 0 ) ;
عرض. println ( الآن. ثانية ( ) , ديسمبر ) ;
عرض. setTextSize ( 2 ) ;
عرض. setCursor ( 25 , 0 ) ;
عرض. println ( ':':' ) ;
عرض. setTextSize ( 2 ) ;
عرض. setCursor ( 65 , 0 ) ;
عرض. println ( ':':' ) ;
عرض. setTextSize ( 2 ) ;
عرض. setCursor ( 40 , 0 ) ;
عرض. println ( الآن. دقيقة ( ) , ديسمبر ) ;
عرض. setTextSize ( 2 ) ;
عرض. setCursor ( 0 , 0 ) ;
عرض. println ( الآن. ساعة ( ) , ديسمبر ) ;
عرض. setTextSize ( 2 ) ;
عرض. setCursor ( 0 , 25 ) ;
عرض. println ( الآن. يوم ( ) , ديسمبر ) ;
عرض. مطبعة ( أيام [ الآن. dayOfTheWeek ( ) ] ) ;
عرض. setTextSize ( 2 ) ;
عرض. setCursor ( عشرين , 25 ) ;
عرض. println ( '-' ) ;
عرض. setTextSize ( 2 ) ;
عرض. setCursor ( 35 , 25 ) ;
عرض. println ( الآن. شهر ( ) , ديسمبر ) ;
عرض. setTextSize ( 2 ) ;
عرض. setCursor ( 60 , 25 ) ;
عرض. println ( '-' ) ;
عرض. setTextSize ( 2 ) ;
عرض. setCursor ( 75 , 25 ) ;
عرض. println ( الآن. سنة ( ) , ديسمبر ) ;
عرض. عرض ( ) ;
}

شرح الكود

بدأ الكود ببعض المكتبات المهمة المطلوبة لشاشات RTC وOLED. تم إعداد شاشة OLED باستخدام مكتبة Adafruit SSD1306.

في جزء الحلقة، يتم الحصول على التاريخ والوقت الحاليين باستخدام rtc.now(). بعد ذلك، يتم مسح شاشة OLED وعرض مكونات الوقت بتنسيق الساعة الرقمية. يمكنك أيضًا تعديل الكود لضبط تنسيق التاريخ والوقت.

بمجرد تحميل الكود على اللوحة الخاصة بك، سوف تحصل على الوقت الحالي على شاشة OLED.

ملحوظة: يستخدم الكود أعلاه 0x3C عنوان I2C لـ OLED. هذا هو عنوان I2C الأكثر شيوعًا والمتوفر على شاشات SSD1306 OLED. إذا كنت تريد العثور على عنوان I2C لشاشة OLED الخاصة بك، فيمكنك تشغيل الملف كود الماسح الضوئي I2C .

خاتمة

DS3231 هو مستشعر RTC يمكن استخدامه لحفظ الوقت. تحتوي على بطارية احتياطية يمكنها الحفاظ على دقة الوقت حتى إذا تم إيقاف تشغيل لوحة التحكم الدقيقة. لربط ESP2 مع DS3231، يجب عليك تثبيت مكتبة RTClib في Arduino IDE الخاص بك. بعد ذلك، يجب عليك توصيل وحدة RTC عبر بروتوكول I2C باستخدام الدبوس الرقمي لـ ESP32. بمجرد الاتصال، ما عليك سوى تحميل الرمز وضبط الوقت. الآن سيحتفظ مستشعر RTC بالوقت، ويمكنك قراءته على شاشتك التسلسلية في مشاريع التصميم المستندة إلى الوقت.