ESP32 ساعة الوقت الحقيقي (RTC) باستخدام DS1307 وشاشة OLED

Esp32 Sa T Alwqt Alhqyqy Rtc Bastkhdam Ds1307 Wshasht Oled



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

لتوضيح الأمور، يمكن لساعة الوقت الفعلي الداخلية (RTC) الخاصة بـ ESP32 تتبع الوقت حتى عندما يكون المعالج الرئيسي متوقفًا عن التشغيل أو في حالة نوم عميق. يمكنك استخدام ESP32 RTC لتتبع الوقت دون استخدام الكثير من الطاقة أو التأثير على المعالج الرئيسي. لكن لا يزال يتطلب طاقة للتشغيل، ليس كثيرًا ولكن يلزم الحد الأدنى من الطاقة لتشغيل RTC الداخلي.

وبهذا، لم يتبق لنا سوى الحل المتمثل في استخدام وحدة RTC الخارجية. دعونا نتحقق من خطوات ربط لوحة ESP32 بوحدة DS1307 RTC.







محتويات:

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

DS1307 هو جهاز منخفض الطاقة يمكنه تتبع الوقت والتاريخ بدقة. يستخدم التنسيق العشري المرمز ثنائيًا (BCD). يمكنه إخبارك بالوقت بتنسيق مفصل مثل الثواني والدقائق وحتى الساعات والأيام. يمكنك أيضًا طباعة التاريخ بالتنسيق الكامل مثل الشهر والسنة. ويعرف أيضًا متى تكون السنة الكبيسة، حتى 2100. للتواصل مع DS1307، يمكنك استخدام بروتوكول I2C.





يحتوي DS1307 على بطارية مدمجة يمكنها تشغيله لمدة عام تقريبًا بدون مصدر خارجي بجهد 5 فولت. باستخدام هذه البطارية الاحتياطية، يمكنها الاحتفاظ بالوقت حتى عندما تكون الطاقة الرئيسية متوقفة. كما أن لديها 56 بايت من SRAM لتخزين بعض البيانات. يعد DS1307 جهازًا مفيدًا يحتوي على العديد من التطبيقات عند دمجه مع لوحة Arduino أو ESP32. على سبيل المثال، يمكن أن تكون هذه البيانات مفيدة في تسجيل البيانات أو أنظمة الإنذار أو التحكم الصناعي. إذا كنت بحاجة إلى ضبط وقت موثوق به، فإن DS1307 يعد خيارًا رائعًا.





مواصفات وحدة RTC DS1307

تتكون وحدة RTC DS1307 من RTC IC وEEPROM ومذبذب بلوري وحامل بطارية للنسخ الاحتياطي.



وفيما يلي تفاصيل هذه الأجزاء:

DS1307 آر تي سي إيك : DS1307 RTC IC عبارة عن شريحة ذات 8 سنون تقوم بتتبع الوقت والتاريخ باستخدام بروتوكول I2C. يستخدم طاقة قليلة جدًا، أقل من 500nA. يمكنه عرض الوقت بالثواني والدقائق والساعات والتاريخ بالأيام والأشهر والسنوات. ويمكنه أيضًا التبديل بين تنسيقات 24 ساعة و12 ساعة.

24C32 إيبروم إيك : 24C32 EEPROM IC عبارة عن شريحة 32 بايت من Atmel تقوم بتخزين الإعدادات والوقت والتاريخ. كما يستخدم بروتوكول I2C.

32.768 كيلو هرتز كريستال : يوفر المذبذب البلوري 32.768 كيلو هرتز تردد الساعة لـ DS1307 RTC IC.

حامل البطارية : حامل البطارية يحمل بطارية CR2032. إنها خلية عملة الليثيوم 3V. يوفر طاقة مستمرة لـ DS1307 RTC IC.

توفير جهاز الاستشعار DS18B20 : يتيح لك توفير مستشعر DS18B20 لحام واستخدام مستشعر درجة الحرارة DS18B20. لم يتم لحامه مسبقًا. يمكنك لحام الحزمة من خلال الفتحة والحصول على درجة الحرارة من دبوس DS الخاص بالوحدة.

توفر القائمة أدناه بعض المواصفات السريعة لمستشعر DS1307 RTC:

  • جهد التشغيل: 4.5-5.5 فولت، عادةً 5 فولت
  • الاستهلاك الحالي : أقل من 1.5 مللي أمبير
  • دقة : 0-40 درجة مئوية، يعتمد على البلورة
  • بطارية : CR2032 (عملة 3 فولت)
  • ذاكرة : 56 بايت من ذاكرة الوصول العشوائي غير المتطايرة
  • واجهه المستخدم : واجهة تسلسلية بسلكين (I2C).
  • انتاج | : 1 هرتز دبوس الإخراج
  • إخراج موجة مربعة قابلة للبرمجة : يستهلك أقل من 500 nA في وضع البطارية الاحتياطية
  • كشف انقطاع التيار الكهربائي : الكشف التلقائي عن انقطاع التيار الكهربائي وتبديل الدوائر
  • دائرة استشعار الطاقة : يمكنه التبديل تلقائيًا إلى النسخ الاحتياطي للإمداد عند نقص الطاقة
  • تعويض السنة الكبيسة : صالحة حتى عام 2100

RTC DS1307 وحدة Pinout

تحتوي الوحدة على عدة دبابيس ذات وظائف مختلفة.

  • VCC هو الدبوس الذي يحتاج إلى جهد تيار مستمر بين 3.3 فولت و5.5 فولت لتشغيل الوحدة.
  • أرض هو دبوس للجهد المنخفض أو الأرض.
  • SDA و SCL هي الدبابيس التي تقوم بتوصيل البيانات وإشارات الساعة من خلال ناقل I2C.
  • س هو الدبوس الذي يقيس درجة الحرارة باستخدام مستشعر DS1307 إذا كان لديك مستشعرًا على وحدة RTC.
  • ميدان هو الدبوس الذي يولد إشارة موجة مربعة بتردد 1 هرتز، أو 4 كيلو هرتز، أو 8 كيلو هرتز، أو 32 كيلو هرتز، اعتمادًا على كيفية برمجتها.
  • واحد هو الدبوس الذي يستخدم بطارية 3 فولت للحفاظ على دقة الوقت عند انقطاع التيار الكهربائي الرئيسي.

2. كيفية ربط شاشة RTC DS1307 وشاشة OLED مع ESP32

لربط ESP32 مع DS1307 وشاشة OLED، يمكنك استخدام دبابيس I2C المدمجة في لوحة ESP32. كل من شاشة DS1307 وشاشة OLED عبارة عن أجهزة تعتمد على I2C. ثم يمكن التواصل باستخدام بروتوكول الرقيق الرئيسي I2C عبر ناقل I2C.

قبل أن ننتقل نحو ربط ESP32 مع DS1307 وشاشة OLED، عليك أولاً تثبيت بعض المكتبات المطلوبة.

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

ستحتاج إلى مكتبتين، واحدة لوحدة RTC والأخرى لشاشة OLED. باستخدام OLED مع وحدة RTC، يمكنك إنشاء معاينات مذهلة وتفاعلية للساعة. إذا لم تكن لديك خطة لعرض الوقت على الشاشة، فيمكنك تخطي تثبيت المكتبة هذا.

فيما يلي المكتبتان اللتان ستحتاج إليهما:

  • رتكليف (بواسطة Adafruit) هي مكتبة Arduino IDE لتعيين الوقت والحصول عليه من RTC. كما يوفر أيضًا دروسًا لمعالجة التواريخ والأوقات والمدد. باستخدام هذه المكتبة، يمكنك واجهة وبرمجة وحدات ساعة الوقت الحقيقي (RTC)، مثل DS1307 وDS3231.
  • س SD1306 (بواسطة Adafruit) هي مكتبة لـ Arduino، والتي يمكنك من خلالها ربط وبرمجة شاشات OLED مع Arduino أو أي لوحة تحكم دقيقة أخرى.

لتنزيل هاتين المكتبتين وتثبيتهما في Arduino IDE، افتح أولاً ملف مدير المكتبة ابحث عن مكتبة RTClib، ثم انقر فوق ثَبَّتَ :

سوف تحصل على خيار تثبيت المكتبة أو تبعياتها فقط. انقر على تثبيت الكل زر لتثبيت المكتبة بالكامل. بهذه الطريقة لن تحصل على أي خطأ إذا قمت بتعديل الكود الذي يعتمد على تبعيات هذه المكتبة.

وبالمثل، ابحث عن مكتبة SSD1306. هذه المكتبة مطلوبة لشاشة OLED. انقر ثَبَّتَ المضي قدما.

هذه المرة سوف تحصل أيضًا على نفس رسالة التأكيد. اضغط على تثبيت الكل خيار.

تم الآن تثبيت مكتبات OLED وDS1307 وجاهزة للاستخدام. ولكن قبل ذلك، تعرف أولاً على عنوان I2C لشاشة OLED.

3. العثور على عنوان I2C لشاشة OLED

يعد عنوان I2C معرفًا فريدًا لكل جهاز على ناقل I2C. فهو يسمح للجهاز الرئيسي بالتواصل مع جهاز تابع محدد عن طريق إرسال البيانات إلى عنوانه. الغرض من عنوان I2C هو تجنب التعارضات والارتباك بين أجهزة متعددة على نفس الناقل.

للحصول على عنوان جهاز I2C، يمكنك استخدام ملف رسم بسيط يقوم بمسح الحافلة وطباعة العناوين من الأجهزة التي يجدها. وبدلاً من ذلك، يمكنك التحقق من ورقة بيانات الجهاز لمعرفة عنوانه الافتراضي أو القابل للتكوين.

هنا في حالتنا، بعد تشغيل رمز الماسح الضوئي I2C، يتم عرض عنوان I2C التالي لشاشة OLED على محطة Arduino IDE.

في أغلب الأحيان، هناك احتمال كبير أن تحصل أيضًا على نفس الشيء 0x3C عنوان لشاشة OLED الخاصة بك.

4. ربط وحدة OLED وRTC DS1307 مع ESP32

1. قم بتوصيل دبابيس SDA وSCL لكل من وحدة DS1307 و شاشة OLED إلى دبابيس I2C من ESP32. عادة، هذه هي GPIO 21 و GPIO 22 ، ولكن يمكنك تعيين أي دبابيس أخرى أيضًا في الكود إذا لزم الأمر.

2. قم بتوصيل كل من VCC وGND الخاصين بـ DS1307 وشاشة OLED إلى أطراف 3.3V وGND الخاصة بـ ESP32.

3. أدخل البطارية الخلوية المعدنية CR2032 في وحدة DS1307 لتوفير طاقة احتياطية لساعة الوقت الفعلي.

4. قم بتحميل رمز المثال من هذا البرنامج التعليمي إلى لوحة ESP32 الخاصة بك. تعديل التعليمات البرمجية للمخرجات المخصصة.

بعد التحميل، ستبدأ الساعة من الوقت المحدد وستعرض الوقت على شاشة OLED.

5. مخطط الدائرة

مخطط دائرة ESP32 مع DS1307 بسيط، حيث يجب توصيل أربعة أسلاك فقط. يمكنك تقصير أسلاك I2C SDA وSCL لكل من مستشعرات OLED وDS1307. وبالمثل، لتشغيل كلا المستشعرين، يمكن استخدام منفذ 3V3 وGND الخاص بلوحة ESP32. يمكنك أيضًا الطاقة من مصدر منفصل إذا لزم الأمر.

ملحوظة : من الآمن تشغيل RTC DS1307 من طرف 3.3V من ESP32 إذا لم يتم تجاوز الحد الحالي لـ ESP32. ولكن إذا كنت تريد أن تكون في موقع آمن، فيمكنك إما استخدام مصدر طاقة منفصل لوحدة RTC أو تجربة مستشعر DS3231 منخفض الطاقة الذي يتراوح نطاق تشغيله بين 3.3 إلى 5.5 فولت تيار مستمر.

الصورة أدناه توضح اتصال ESP32 مع حساس RTC DS1307.

وبالمثل، إذا كنت تريد توصيل شاشة OLED لعرض الوقت، فيمكنك استخدام نفس منافذ I2C ومنافذ الطاقة الخاصة بلوحة ESP32.

6. الكود

باستخدام الكود أدناه، سنقوم بتعيين التاريخ والوقت الحاليين على RTC. بعد ضبط الوقت، سيعرض الكود الوقت على محطة Arduino IDE. قبل تحميل الكود، يجب عليك تحديثه بالتاريخ والوقت الحاليين.

#تتضمن 'RTClib.h'
RTC_DS1307 DS1307_RTC;
شار Week_days [ 7 ] [ 12 ] = { 'الأحد' , 'الاثنين' , 'يوم الثلاثاء' , 'الأربعاء' , 'يوم الخميس' , 'جمعة' , 'السبت' } ;
الإعداد باطل ( ) {
المسلسل.ابدأ ( 115200 ) ;
#ifndef ESP8266
بينما ( ! مسلسل ) ;
#إنهاء إذا
لو ( ! DS1307_RTC.ابدأ ( ) ) {
Serial.println ( 'تعذر العثور على RTC' ) ;
بينما ( 1 ) ;
}
DS1307_RTC.ضبط ( التاريخ والوقت ( F ( __تاريخ__ ) ، F ( __وقت__ ) ) ) ;
}
حلقة فارغة ( ) {
التاريخ والوقت الآن = DS1307_RTC.now ( ) ;
طباعة ( now.year ( ) ، ديسمبر ) ;
طباعة ( '/' ) ;
طباعة ( now.month ( ) ، ديسمبر ) ;
طباعة ( '/' ) ;
طباعة ( اليوم ( ) ، ديسمبر ) ;
طباعة ( '(' ) ;
طباعة ( Week_days [ now.dayOfTheWeek ( ) ] ) ;
طباعة ( ')' ) ;
طباعة ( now.hour ( ) ، ديسمبر ) ;
طباعة ( ':' ) ;
طباعة ( دقيقة ( ) ، ديسمبر ) ;
طباعة ( ':' ) ;
طباعة ( الآن.ثانيا ( ) ، ديسمبر ) ;
Serial.println ( ) ;
تأخير ( 1000 ) ;
}

يستخدم هذا الرمز مكتبة رتكليب للتفاعل مع وحدة الساعة في الوقت الفعلي DS1307 التي تتتبع التاريخ والوقت.

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

يمكنك استخدام ال حلقة وظيفة للحصول على التاريخ والوقت من RTC. بعد ذلك، يمكنك عرضه على الشاشة التسلسلية مثل هذا: السنة/الشهر/اليوم (يوم الأسبوع) الساعة:الدقيقة:الثانية. تذكر إضافة تأخير لمدة ثانية واحدة بعد كل حلقة، حتى لا يعمل الكود بسرعة كبيرة.

عرض الوقت الحالي على شاشة OLED

لعرض نفس الوقت على شاشة OLED، علينا إضافة جزء كود إضافي لشاشة OLED. ما عليك سوى تحميل الكود المحدد. سيعرض هذا الرمز الوقت الحالي على شاشة OLED الخاصة بك.

تذكر أننا هنا نستخدم وحدة العرض OLED OLED مقاس 128 × 64 بوصة مقاس 0.96 بوصة I2C SSD. إذا كنت تستخدم أي حجم آخر، فقم بتعديل الكود وفقًا لذلك. تحقق أيضًا من عنوان I2C وقم بتعديله في الكود المحدد. في حالتنا، لدينا عنوان I2C 0x3C لشاشة OLED.

#تشمل
#تتضمن
#تشمل
#تتضمن 'RTClib.h'
#تعريف الشاشة_العرض128
#تعريف SCREEN_HEIGHT 64

عرض Adafruit_SSD1306 ( SCREEN_WIDTH، SCREEN_HEIGHT، & الأسلاك، - 1 ) ;
RTC_DS1307 رتك؛
أيام شار [ 7 ] [ 12 ] = { 'الأحد' , 'الاثنين' , 'يوم الثلاثاء' , 'الأربعاء' , 'يوم الخميس' , 'جمعة' , 'السبت' } ;
الإعداد باطل ( ) {
المسلسل.ابدأ ( 115200 ) ;
لو ( ! RTC.ابدأ ( ) ) {
Serial.println ( 'تعذر العثور على RTC' ) ;
بينما ( 1 ) ;
}
RTC.ضبط ( التاريخ والوقت ( F ( __تاريخ__ ) ، F ( __وقت__ ) ) ) ;
لو ( ! عرض.ابدأ ( SSD1306_SWITCHCAPVCC، 0x3C ) ) {
Serial.println ( F ( 'فشل تخصيص SSD1306' ) ) ;
ل ( ؛؛ ) ;
}
تأخير ( 1000 ) ;
Display.clearDisplay ( ) ;
Display.setTextSize ( 2 ) ;
Display.setTextColor ( أبيض ) ;
Display.setCursor ( 30 , عشرين ) ;
println ( 'لينكس' ) ;
عرض.عرض ( ) ;
تأخير ( 3000 ) ;
Display.clearDisplay ( ) ;
}
حلقة فارغة ( ) {
التاريخ والوقت الآن = RTC.now ( ) ;
Display.clearDisplay ( ) ;
Display.setTextSize ( 2 ) ;
Display.setCursor ( 0 , 0 ) ;
طباعة ( اليوم ( ) ) ;
طباعة ( '/' ) ;
طباعة ( now.month ( ) ) ;
طباعة ( '/' ) ;
طباعة ( now.year ( ) ) ;
println ( أيام [ now.dayOfTheWeek ( ) ] ) ;
println ( '' ) ;
Display.setCursor ( 0 , 40 ) ;
لو ( now.hour ( ) < 10 )
طباعة ( '0' ) ;
طباعة ( now.hour ( ) ) ;
طباعة ( ':' ) ;
لو ( دقيقة ( ) < 10 )
طباعة ( '0' ) ;
طباعة ( دقيقة ( ) ) ;
طباعة ( ':' ) ;
لو ( الآن.ثانيا ( ) < 10 )
طباعة ( '0' ) ;
println ( الآن.ثانيا ( ) ) ;
عرض.عرض ( ) ;
}

بدأ الكود بالمكتبات التي قمنا بتثبيتها لـ RTC والشاشة. وبعد ذلك، يتم تحديد حجم الشاشة وعنوان العرض. يقوم بتهيئة المصفوفة بأسماء أيام الأسبوع.

ال يثبت يبدأ الجزء بالاتصال التسلسلي. يتحقق مما إذا كان RTC والشاشة يعملان أم لا. بعد ذلك، قمنا بتحديد سلسلة نصية 'Linuxhint' سيتم عرضها لمدة 3 ثوانٍ. هذه رسالة افتتاحية أو رسالة بدء التشغيل فقط، ويمكنك تعديل هذه الرسالة بنصك المخصص أيضًا.

ال حلقة تحصل الوظيفة على تاريخ ووقت الوحدة DS1307. بعد ذلك، يقوم بمسح الشاشة وطباعة التاريخ والوقت بطريقة منسقة. يضيف الكود أيضًا أصفارًا بادئة إلى الساعات والدقائق والثواني، في حالة كانت قيمها أصغر من 10.

7. الأجهزة

بعد تحميل الكود على لوحة ESP32، سترى الإخراج التالي على شاشة OLED. بالنسبة للأجهزة، استخدمنا شاشة OLED ووحدة I2C RTC DS1307. يتم استخدام لوحة ESP32 مع 30 دبابيس. يمكنك تجربة أي لوحة ESP32 أخرى أيضًا، لكن تأكد من توصيل منافذ I2C بشكل صحيح.

خاتمة

يحتوي RTC DS1307 على ذاكرة SRAM سعة 56 بايت مع دعم النسخ الاحتياطي للبطارية. إنه جهاز ذو 8 سنون يستخدم بروتوكول اتصال I2C. لربط وحدة DS1307 RTC مع ESP32، يمكنك استخدام دبابيس I2C (GPIO 22 (SCL) وGPIO 21 (SDA)) للوحة ESP32. يمكنك طباعة الوقت على وحدة تحكم Arduino IDE أو استخدام أي شاشة مثل OLED أو I2C LCD لعرض الوقت. تعد وحدة DS1307 RTC جهازًا مفيدًا لتتبع الوقت والتاريخ في التطبيقات المختلفة. تشمل بعض التطبيقات الرئيسية أجهزة تسجيل البيانات، والساعات الرقمية، والساعات الذكية.