في هذا البرنامج التعليمي ، سنتعرف على Real Time Clock (RTC) وتفاعلها مع شاشة ESP32 و OLED.
سوف نستخدم وحدة DS3231 RTC لتتبع الوقت الصحيح وعرضه على SPI OLED باستخدام ESP32 كما متحكم لدينا. ESP32 هو أكثر من مجرد متحكم. يحتوي على شريحة Wi-Fi و Bluetooth بداخله و 39 دبابيس GPIO. وهو يدعم جميع بروتوكولات الاتصال مثل SPI و I2C و UART وما إلى ذلك. إذا كنت مستخدمًا جديدًا لـ ESP32 ، فانتقل أولاً إلى البرنامج التعليمي Getting started with ESP32.
ما هو RTC ؟؟
DS3231 هو وحدة نمطية RTC (ساعة الوقت الحقيقي). يتم استخدامه للحفاظ على التاريخ والوقت لمعظم مشاريع الإلكترونيات. تحتوي هذه الوحدة على مصدر طاقة خلية العملة المعدنية الخاص بها والتي تحافظ باستخدامه على التاريخ والوقت حتى عند إزالة الطاقة الرئيسية أو إعادة تعيين وحدة MCU. لذلك بمجرد أن نحدد التاريخ والوقت في هذه الوحدة ، سوف نتابعها دائمًا. هناك عدة أنواع من RTC ICs المتاحة مثل DS1307 و DS3231 وما إلى ذلك.
استخدمنا DS3231 RTC سابقًا مع Arduino في المشاريع التالية:
- تغذية تلقائية للحيوانات الأليفة باستخدام الأردوينو
- مسجل بيانات اردوينو
ملاحظة: عند استخدام هذه الوحدة لأول مرة ، عليك ضبط التاريخ والوقت. يمكنك أيضًا استخدام RTC IC DS1307 ، وقد استخدمنا سابقًا DS1307 مع Arduino.
التعرف على شاشات OLED:
يرمز المصطلح OLED إلى " الصمام الثنائي الباعث للضوء العضوي" ، وهو يستخدم نفس التقنية المستخدمة في معظم أجهزة التلفزيون لدينا ولكن بها عدد أقل من وحدات البكسل مقارنة بها. إنه لأمر ممتع حقًا أن يكون لديك وحدات العرض ذات المظهر الرائع لأنها ستجعل مشاريعنا تبدو رائعة. لقد قمنا بتغطية مقال كامل حول شاشات OLED وأنواعها هنا.
نحن نستخدم شاشة OLED أحادية اللون ذات 7 أسنان SSD1306 0.96 بوصة. سبب اختيار هذا العرض هو أنه يمكن أن يعمل على ثلاثة بروتوكولات اتصالات مختلفة مثل وضع SPI 3 Wire ووضع SPI بأربعة أسلاك ووضع IIC. سيغطي هذا البرنامج التعليمي كيفية استخدام الوحدة في وضع SPI 4-wire حيث إنه أسرع وضع للاتصال والوضع الافتراضي.
يتم شرح المسامير ووظائفها في الجدول أدناه.
الرقم السري |
اسم الدبوس |
اسماء اخرى |
إستعمال |
1 |
Gnd |
أرض |
الدبوس الأرضي للوحدة |
2 |
Vdd |
Vcc ، 5 فولت |
دبوس الطاقة (3-5V مقبول) |
3 |
SCK |
D0 ، SCL ، CLK |
بمثابة دبوس الساعة. تستخدم لكل من I2C و SPI |
4 |
SDA |
D1 ، MOSI |
دبوس البيانات للوحدة. تستخدم لكل من IIC و SPI |
5 |
RES |
RST ، إعادة تعيين |
يعيد تعيين الوحدة (مفيد أثناء SPI) |
6 |
العاصمة |
أ 0 |
دبوس أمر البيانات. يستخدم لبروتوكول SPI |
7 |
CS |
اختيار رقاقة |
يكون مفيدًا عند استخدام أكثر من وحدة واحدة بموجب بروتوكول SPI |
في هذا البرنامج التعليمي ، سنقوم ببساطة بتشغيل الوحدة في وضع 4-Wire SPI ، وسنترك الباقي لبعض البرامج التعليمية الأخرى.
لقد قدم لنا مجتمع Arduino بالفعل الكثير من المكتبات التي يمكن استخدامها مباشرة لجعل هذا الأمر أكثر بساطة. لقد جربت بعض المكتبات ووجدت أن مكتبة Adafruit_SSD1306 كانت سهلة الاستخدام للغاية ولديها عدد قليل من الخيارات الرسومية ومن ثم سنستخدمها في هذا البرنامج التعليمي. ولكن ، إذا كان مشروعك به قيود على الذاكرة / السرعة ، فحاول استخدام مكتبة U8g لأنها تعمل بشكل أسرع وتشغل ذاكرة أقل للبرنامج.
لقد قمنا أيضًا بتوصيل OLED مع Raspberry pi ومع Arduino.
المواد المطلوبة:
- ESP32
- وحدة DS3231 RTC
- 7 دبوس 128 × 64 وحدة عرض OLED (SSD1306)
- الأسلاك الذكور والإناث
- اللوح
مخطط الرسم البياني:
يوجد أدناه مخطط الدائرة لتوصيل RTC3231 بلوحة ESP:
يستخدم RTC DS3231 IC وضع الاتصال I2C. لديها دبابيس SCL و SDA و Vcc و GND تخرج منه. فيما يلي توصيل وحدة RTC مع ESP32:
- SCL لـ RTC -> SCL لـ ESP32 ie Pin D22
- SDA لـ RTC -> SDA لـ ESP32 أي Pin D21
- GND لـ RTC -> GND لـ ESP32
- Vcc لـ RTC -> Vcc لـ ESP32
هنا ، نحن نستخدم وضع SPI لتوصيل وحدة عرض OLED 128 × 64 (SSD1306) بـ ESP32. لذلك ، سوف تستخدم 7 دبابيس. يتم تقديم الاتصالات بـ ESP32 على النحو التالي:
- CS (تحديد رقاقة) دبوس OLED -> PIN D5 لـ ESP32
- دبوس DC الخاص بـ OLED -> PIN D4 لـ ESP32
- RES دبوس OLED -> PIN D2 لـ ESP32
- SDA pin لـ OLED -> PIN D23 أي MOSI لـ ESP32
- دبوس SCK من OLED -> PIN D18 أي SCK لـ ESP32
- Vdd لـ OLED -> Vcc لـ ESP32
- GND لـ OLED -> GND لـ ESP32
أنت بحاجة إلى ملفات لوحة لـ ESP32. تحقق من القائمة المنسدلة لمدير اللوحة من Arduino IDE لمجموعة أدوات ESP32. إذا لم يكن موجودًا ، فاتبع الخطوات الموضحة في الرابط أدناه:
circuitdigest.com/microcontroller-projects/getting-started-with-esp32-with-arduino-ide
يمكنك أيضًا استخدام ESP12 لهذا المشروع ، وتعلم هنا كيفية استخدام ESP12.
شرح الكود:
يتم تقديم الرمز الكامل لـ ESP32 في نهاية المقالة. نحن هنا نوضح بعض الأجزاء المهمة من الكود.
نحتاج إلى العديد من المكتبات لاستخدامها في التعليمات البرمجية الخاصة بنا والتي يمكن تنزيلها من الروابط أدناه:
1. Adafruit_SSD1306:
2. SPI:
3. Adafruit_GFX:
4. RTClib:
لذلك قمنا بتضمين جميع المكتبات
#تضمن
ثم حدد جميع دبابيس OLED. لا تحتاج إلى تحديد دبابيس لوحدة RTC لأن هذه المسامير محددة بالفعل في مكتبة WIRE.
# تعريف OLED_MOSI 23 # تعريف OLED_CLK 18 # تعريف OLED_DC 4 # تعريف OLED_CS 5 # تعريف OLED_RESET 2 Adafruit_SSD1306 عرض (OLED_MOSI ، OLED_CLK ، OLED_DC ، OLED_RESET ، OLED_CS) ؛
في وظيفة الإعداد ، سنقوم باستدعاء الوظيفة rtc.adjust (DateTime (__ DATE__، __TIME__)) والتي ستحدد الوقت وفقًا لوقت جهاز الكمبيوتر لدينا.
إعداد باطل () { Serial.begin (9600) ؛ if (! rtc.begin ()) { Serial.println ("تعذر العثور على RTC")؛ بينما (1) ؛ } rtc.adjust (DateTime (__ DATE__، __TIME__)) ؛
بعد ذلك نسمي وظائف العرض لتظهر على OLED.
display.begin (SSD1306_SWITCHCAPVCC) ، display.clearDisplay () ، display.setTextColor (WHITE) ، //display.startscrollright(0x00، 0x0F) ؛ // يمكنك uncomment هذا السطر لتمرير النص الخاص بك على شاشة oled.setTextSize (2) ؛ display.setCursor (0،5) ؛ display.print ("الساعة") ؛ // سيعرض هذا الساعة على OLED لمدة 3 ثوانٍ . تأخير (3000) ؛ }
ثم أخيرًا في وظيفة الحلقة ، سنخزن وقتنا في متغير محدد مسبقًا DateTime الآن ونعرض الوقت باستخدام وظائف العرض مثل setTextSize و setCursor وما إلى ذلك. اضبط هذه وفقًا لحاجتك واستخدم وظيفة display.println لتظهر على OLED.
حلقة باطلة () { DateTime now = rtc.now () ؛ display.clearDisplay () ، display.setTextSize (2) ، display.setCursor (75،0) ؛ display.println (now.second () ، DEC) ؛
هذه هي الطريقة التي يمكنك من خلالها عرض الوقت على OLED باستخدام ESP32 وكما تعلم ، فإن ESP معروف بقدراته الخاصة بإنترنت الأشياء ، لذا يمكنك استخدام هذا لنشر الوقت على الإنترنت. في المقالة التالية سنعرض لك وقت الإنترنت على ESP دون استخدام أي وحدة RTC.