في البرنامج التعليمي السابق ، صنعنا ساعة RTC باستخدام DS3231 و ESP32. لتقليل متطلبات الأجهزة ، سنصنع ساعة إنترنت بدون استخدام وحدة RTC. هذا أكثر دقة مقارنة بساعة RTC. ESP32 عبارة عن وحدة Wi-Fi ويمكن توصيلها بسهولة بالإنترنت ، لذا سنستخدم NTP (بروتوكول وقت الشبكة) و UDP (بروتوكول مخطط بيانات المستخدم) لجلب الوقت من الإنترنت باستخدام Wi-Fi. يمكن أن تكون ساعة الإنترنت هذه مفيدة جدًا أثناء إنشاء مشاريع إنترنت الأشياء.
ما هو NTP ؟؟
بروتوكول وقت الشبكة (NTP) هو بروتوكول شبكة يستخدم لمزامنة الوقت بين الأنظمة وشبكات البيانات. يعتمد إطار عمل NTP على خوادم وقت الإنترنت. يحتوي NTP على خوارزميات لضبط الوقت من اليوم بدقة. تحتوي خوادم NTP على برنامج يرسل وقت الساعة من اليوم إلى أجهزة الكمبيوتر العميلة باستخدام UDPport 123. لذا هنا في هذا المشروع ، نحصل على وقت من خادم NTP باستخدام ESP32 ونعرضه على شاشة OLED.
المواد المطلوبة:
- ESP32
- شاشة OLED 128 * 64
- اللوح
- الأسلاك الذكور والإناث
مخطط الرسم البياني:
هنا ، نحن نستخدم وضع 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.
سوف نستخدم Arduino IDE لكتابة برنامجنا كما هو موضح في المقالة أعلاه.
شرح الكود:
يوجد الرمز الكامل لساعة الإنترنت ESP32 في نهاية المقالة. نحن هنا نوضح بعض الأجزاء المهمة من الكود.
نحتاج إلى العديد من المكتبات لاستخدامها في التعليمات البرمجية الخاصة بنا والتي يمكن تنزيلها من الروابط أدناه:
1. Adafruit_SSD1306:
2. SPI:
3. Adafruit_GFX:
4. NTPClient:
5.WiFiUdp:
لذلك قمنا بتضمين جميع المكتبات والمتغير المحدد لإدخال اسم Wi-Fi وكلمة المرور.
#تضمن
هنا يتم استخدام مكتبة NTPClient.h للاتصال بخادم الوقت. يستغرق الأمر وقتًا من خادم NTP والحفاظ عليه متزامنًا. وتستخدم مكتبة Hhre WiFiUdp.h لإرسال واستقبال رسائل UDP. UDP هو بروتوكول يرسل ويستقبل رسائل قصيرة من نظامنا إلى خادم NTP.
لذا للحصول على الوقت من الإنترنت ، علينا تحديد ثلاثة متغيرات في برنامجنا لـ NTP.
NTP_OFFSET وهي المنطقة الزمنية لبلدك ، أي للهند +5: 30 ساعة. إذن فهو 19800 في ثوان.
NTP_INTERVAL وهو الفاصل الزمني الذي يستغرقه NTP لتحديث الوقت. إنها 60-64 ثانية.
NTP_ADDRESS هو خادم NTP لبلدك. بالنسبة للهند ، يمكنك استخدام " in.pool.ntp.org ".
#define NTP_OFFSET 19800 // In seconds #define NTP_INTERVAL 60 * 1000 // In miliseconds #define NTP_ADDRESS "1.asia.pool.ntp.org" WiFiUDP ntpUDP؛ NTPClient timeClient (ntpUDP ، NTP_ADDRESS ، NTP_OFFSET ، NTP_INTERVAL) ؛
في وظيفة الإعداد ، قم بتهيئة إعدادات Wi-Fi للاتصال بالإنترنت.
إعداد باطل () { display.begin () ، Serial.begin (9600) ؛ Serial.println () ، Serial.println () ، Serial.print ("الاتصال بـ") ؛ Serial.println (ssid) ؛ WiFi.begin (SSID ، كلمة المرور) ؛ while (WiFi.status ()! = WL_CONNECTED) { delay (500) ؛ Serial.print (".") ؛ } Serial.println ("") ؛ Serial.println ("WiFi متصل.") ؛ Serial.println ("عنوان IP:") ؛ Serial.println (WiFi.localIP ()) ؛ timeClient.begin () ،
ثم قم بتهيئة وظائف العرض لإظهار الوقت على OLED.
display.begin (SSD1306_SWITCHCAPVCC) ،
في وظيفة الحلقة ، استخدمنا timeClient.update () ، تستغرق هذه الوظيفة وقتًا محدثًا من NTP في شكل سلسلة وتخزنها في متغير formattedTime . ثم قم بعرضه على OLED باستخدام وظيفة display.println () .
حلقة باطلة () { timeClient.update () ، String formattedTime = timeClient.getFormattedTime () ، display.clearDisplay () ، display.setTextSize (2) ، // اضبط هذه المعلمات وفقًا لحاجتك .. display.setCursor (0، 0)؛ display.println (formattedTime) ؛
البرنامج الكامل معطى أدناه. الآن أخيرًا قم ببرمجة ESP32 مع Arduino IDE وستكون ساعة الإنترنت لديك جاهزة لإظهار الوقت.