في هذا الدليل، سنقوم ببناء ساعة LCD متصلة بالإنترنت باستخدام المتحكم الدقيق ESP32 من شركة SunFounder. ستقوم هذه الساعة بمزامنة الوقت الحالي تلقائيًا عبر الإنترنت، مع عرض الوقت بتنسيق 12 ساعة أو 24 ساعة، بالإضافة إلى اليوم من الأسبوع، والتاريخ، والشهر. يضمن استخدام بروتوكول الوقت الشبكي (NTP) أن تبقى الساعة دقيقة دون الحاجة إلى تعديلات يدوية.
ساعة الإنترنت esp32-53-الرئيسية
يستفيد هذا المشروع من قدرات Wi-Fi المدمجة في ESP32 لاسترجاع الوقت الحالي من خادم NTP. سنقوم باستخدام شاشة الكريستال السائل (LCD) لعرض الوقت، والذي يمكن تنسيقه وفقًا لتفضيلات المستخدم. لمزيد من التوضيح حول أي خطوات، يرجى الرجوع إلى الفيديو في (في الفيديو عند 00:30).
شرح الأجهزة
المكونات الأساسية لهذا المشروع تشمل المتحكم الدقيق ESP32، وشاشة LCD بحجم 20x4، ومصدر طاقة. يعتبر ESP32 متحكمًا دقيقًا قويًا مزودًا بوظائف واي فاي وبلوتوث مدمجة، مما يجعله مناسبًا لمشاريع الإنترنت الأشياء. تُستخدم شاشة LCD لعرض الوقت والتاريخ، ويمكن ضبطها لأحجام عرض مختلفة.
تعمل شاشة LCD عبر بروتوكول I2C، مما يسمح بالتواصل عبر سلكين (SDA و SCL). وهذا يُبسط الأسلاك ويقلل من عدد الدبابيس المطلوبة على ESP32. يتم الاتصال بخادم NTP باستخدام إمكانيات الواي فاي في ESP32، مما يتيح التحديثات في الوقت الحقيقي.
تأكد من صحة جهد إمداد الطاقة (5 فولت).
استخدم مكثفات الفصل بالقرب من دبابيس الطاقة لتحقيق الاستقرار.
كن حذراً مع اتصالات I2C لتجنب صراعات الحافلة.
تحقق من عنوان I2C لعرض LCD (0x27 أو 0x3F).
تحقق من بيانات اعتماد الواي فاي لتوصيل دقيق.
قم بمعالجة تعديلات التوقيت الصيفي في تعليماتك البرمجية.
استخدم خادم NTP الصحيح لموقعك الجغرافي.
قم دائمًا بتصفية الشاشة قبل تحديث العرض.
تعليمات التوصيل
ESP32-11_LCD-wiring
لوصل ESP32 مع شاشة LCD، ابدأ بتوصيل دبابيس الطاقة. قم بتوصيل VCC لشاشة LCD بدبوس 5V على ESP32 ودبوس GND لشاشة LCD بدبوس GND على ESP32. بالنسبة للتواصل عبر I2C، قم بتوصيل دبوس SDA لشاشة LCD بدبوس GPIO 21 على ESP32 ودبوس SCL بدبوس GPIO 22. تأكد من أن التوصيلات آمنة لتجنب أي مشاكل في الاتصال.
عند إعداد الأسلاك، استخدم أسلاك توصيل من ذكر إلى أنثى لتسهيل الاتصالات. إذا كانت شاشة LCD الخاصة بك تحتوي على عنوان I2C أو تكوين دبابيس مختلف، قم بتعديل الكود وفقًا لذلك. راجع الفيديو (في الفيديو عند 05:30) للحصول على خيارات توصيل بديلة إذا لزم الأمر.
أمثلة الشفرة وإرشادات الاستخدام
يقوم الكود بتهيئة شاشة العرض LCD ويعد اتصال الواي فاي لجلب بيانات الوقت من خادم NTP. المعرفات الرئيسية مثلssidوpasswordتُستخدم للاتصال بشبكة الواي فاي، بينماntpServer1وntpServer2حدد خوادم NTP للاستخدام.
تظهر هذه المقتطفات بيانات الاعتماد الشبكية وعناوين الخادم. تأكد من إدخال SSID وكلمة مرور الواي فاي بدقة، حيث أن أي خطأ سيمنع ESP32 من الاتصال بالإنترنت.
في الprintLocalTime()وظيفة، يتم تنسيق الوقت الحالي للعرض. الهيكلtmيستخدم لتخزين معلومات الوقت، بينماstrftimeيساعد في تنسيق الوقت إلى سلسلة قابلة للقراءة.
void printLocalTime() {
struct tm timeinfo;
if(!getLocalTime(&timeinfo)) {
Serial.println("No time available (yet)");
return;
}
char timeHour[5];
strftime(timeHour, 5, "%H", &timeinfo);
يتحقق هذا الرمز مما إذا كان الوقت المحلي متاحًا ويسترجع الساعة. ثم يتم استخدام الساعة المنسقة لعرض الوقت الحالي على شاشة LCD. إذا لم يكن الوقت متاحًا بعد، فإنه يطبع رسالة إلى الشاشة التسلسلية.
أخيرًا، الـsetup()تقوم الدالة بتهيئة شاشة LCD وتوصيلها بشبكة Wi-Fi. كما تقوم بتكوين إعدادات خادم NTP وتحديد وظيفة رد للاتصال بمزامنة الوقت.
void setup() {
Serial.begin(115200);
lcd.init(); // initialize the lcd
lcd.backlight(); // Turns on the LCD backlight.
Serial.printf("Connecting to %s ", ssid);
WiFi.begin(ssid, password);
يبدأ هذا المقطع بمراقب السيريال لتصحيح الأخطاء، ويقوم بإعداد شاشة LCD، ويحاول الاتصال بشبكة الواي فاي المحددة. سيتم طباعة حالة الاتصال على مراقب السيريال، مما يتيح لك التحقق من الاتصال.
عرض / ماذا تتوقع
عند الإعداد الناجح، سيعرض الشاشة LCD الساعة الحالية، ويوم الأسبوع، والتاريخ. يمكن أن تتوقع تحديث الوقت كل 5 ثوانٍ، بفضل الـloop()في حال فشل الاتصال بخادم NTP، ستظهر رسالة على شاشة التسلسل تشير إلى أن الوقت غير متاح بعد (في الفيديو عند 12:00).
تشمل الفخاخ الشائعة التوصيلات غير الصحيحة، والعناوين الخاطئة لـ I2C، وبيانات اعتماد Wi-Fi غير الصحيحة. تأكد من أن جميع التوصيلات آمنة وأن خادم NTP يمكن الوصول إليه من شبكتك.
طوابع الفيديو الزمنية
:00 ابدأ
:10 مقدمة
5:15 شرح الأسلاك
7:32 شرح كود Arduino
اختيار لوحة ESP32 ومنفذ COM في برنامج Arduino IDE الساعة 18:43