مقدمة
ملاحظة:
استخدمنا في هذا المشروع مثالاً من مكتبة arduino-esp32، وهو لا يشمل كيفيّة تعديل هذا المثال.
يمكن مشاهدة الفيديو التعليميّ أدناه، أو متابعة قراءة هذه المقالة.
نحتاج إلى العناصر التالية:
- لوحة ESP32-CAM مزوَّدة بكاميرا OV2640.
- مبرمج FTDI.
- أسلاك توصيل.
مقدّمة إلى لوحة ESP32-CAM
تُعرف ESP32-CAM بأنّها وحدة كاميرا صغيرة جدّاً، بشريحة ESP32-S يُقدَّر ثمنها بحوالي 10 دولارات. تتميّز إلى جانب كاميرا OV2640، وأطراف الدخل والخرج العامّة لتوصيل الأجهزة الطرفيّة، بفتحة لبطاقة ذاكرة microSD يمكن أن تكون مفيدة لتخزين الصور الملتَقَطة بالكاميرا، أو لتخزين الملفات لتقديمها إلى العملاء
نحتاج إلى مبرمجة FTDI لتحميل الكود عبر أطراف U0R وU0T (أطراف تسلسليّة)؛ لأنّ لوحة ESP32-CAM لا تتضمّن منفذ USB.
الميّزات:
فيما يلي قائمة بميّزات ESP32-CAM:
- أصغر وحدة 11b / g / n Wi-Fi BT SoC.
- وحدة معالجة مركزيّة منخفضة الطاقة 32 بت.
- يصل تردّد نبضات الساعة إلى 160 ميجاهرتز، بالإضافة إلى قوّة حوسبة إجماليّة تصل إلى 600 DMIPS.
- SRAM مدمج 520 كيلوبايت، بالإضافة إلى 4 ميغابايت SRAM خارجيّ.
- دعم.UART / SPI / I2C / PWM / ADC / DAC
- دعم الكاميرات OV2640وOV7670، وتحوي ضوء مدمج.
- دعم تحميل صورة Wi-Fi.
- دعم بطاقة TF.
- دعم أوضاع سكون متعدّدة.
- تتضمّن تقنيّتي LwipوFreeRTOS.
- دعم أوضاع تشغيل .STA / AP / STA + AP
- دعم عمليّة تحديث البرمجيّات المضمّنة (firmware)محليّاً وعن بعد.
أطراف خرج لوحة ESP32-CAM
يوضّح الشكل التالي أطراف خرج لوحة ESP32-CAM (وحدة AI-Thinker).
توجد ثلاثة أطراف أرضيّة GND، وطرفان للطاقة: إمّا 3.3 فولت، أو 5 فولت. ويعدّ الطرفان GPIO 1 وGPIO 3 أطراف لنقل البيانات التسلسليّة، حيث تستعمل لتحميل البرنامج إلى اللوحة. إضافة إلى ذلك، يلعب GPIO 0 دوراً مهمّاً في تحديد فيما إذا كان ESP32 في وضع الوميض، أم لا، وحيث يكون ESP32 في وضع الوميض عند توصيل GPIO 0 بـ GND.
الأطراف التالية متّصلة داخليّاً بقارئ بطاقة الذاكرة microSD:
- GPIO 14 :CLK
- GPIO 15 :CMD
- GPIO 2 :Data 0
- GPIO 4 :Data 1 (متّصل أيضاً بمؤشّر LED الموجود على اللوحة)
- GPIO 12 :Data 2
- GPIO 13 :Data 3
خادم بثّ الفيديو
نتّبع الخطوات التالية لإنشاء خادم ويب لبثّ الفيديو باستخدام ESP32-CAM، حيث يمكنك الوصول إليه عبر شبكتك المحلّيّة.
ملاحظة مهمّة: تأكّد من تحديث نسخة Arduino IDE، وكذلك تحديث إضافات ESP32.
تثبيت إضافة ESP32
نستخدم Arduino IDE في هذا المثال لبرمجة لوحة ESP32-CAM، لذلك نحتاج إلى تثبيت Arduino IDE، بالإضافة إلى إضافة ESP32.
مثال برمجيّ:
في Arduino IDE، انتقل إلى ملف > أمثلة > ESP32> الكاميرا، وافتح مثال CameraWebServer.
تظهر الشيفرة التالية:
نحتاج إلى تعديل بيانات الشبكة المستخدمة في المتغيّرات التالية قبل رفع البرنامج:
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";
بعد ذلك، تأكَّد من تحديد وحدة الكاميرا الصحيحة. وفي هذه الحالة، نستخدم نموذج AI-THINKER.
ونضع جميع النماذج الأخرى ضمن تعليق، باستثناء النموذج المستخدم:
// Select camera model
//#define CAMERA_MODEL_WROVER_KIT
//#define CAMERA_MODEL_ESP_EYE
//#define CAMERA_MODEL_M5STACK_PSRAM
//#define CAMERA_MODEL_M5STACK_WIDE
#define CAMERA_MODEL_AI_THINKER
إن لم تكن وحدة الكاميرا المستخدمة من بين الواردة أعلاه، عليك أن تضبط الأطراف وفق لوحتك في الملف camera_pin.h.
الآن، البرنامج جاهز للتحميل على ESP32.
تحميل الكود على ESP32-CAM
نوصل لوحة ESP32-CAM بجهاز الحاسوب باستخدام مبرمجة FTDI وفقاً للمخطّط التالي:
تمتلك العديد من مبرمجات FTDI توصيلة تسمح بالتبديل بين جهدي 3.3 فولت أو 5 فولت، ويجب التأكّد من التوصيل بطرف 5 فولت.
ملاحظة مهمّة: يلزم توصيل طرف GPIO 0 بـ GND حتّى نتمكّن من رفع البرنامج.
ESP32-CAM | FTDI مبرمجة |
GND | GND |
5V | VCC (5V) |
U0R | TX |
U0T | RX |
GPIO 0 | GND |
لرفع البرنامج، نتّبع الخطوات التالية:
- انتقل إلى أدوات< لوحات، وحدِّد AI-Thinker ESP32-CAM.
- انتقل إلى أدوات < المنفذ، وحدّد منفذ COM الذي يتّصل به ESP32.
- ثمّ انقر فوق زرّ الرفع.
- عندما ترى هذه النقاط في نافذة التنقيح (debugging)، كما هو موضّح أدناه، اضغط على زرّ إعادة الضبط الموجود على اللوحة ESP32-CAM.
بذلك يجب أن ينتهي التحميل على اللوحة بعد بضع ثوان.
الحصول على عنوان IP
أولاً افصل الطرف GPIO 0 عن GND بعد رفع البرنامج.
افتح شاشة العرض التسلسليّ بمعدّل إرسال 115200، واضغط على زرّ إعادة الضبط الموجود على اللوحة ESP32-CAM، ويجب أن يكون عنوان IP الخاصّ بـ ESP32 ظاهراً على شاشة.
الوصول إلى خادم بثّ الفيديو
يمكنك الآن الوصول إلى خادم بثّ الكاميرا على شبكتك المحلّيّة من خلال فتح متصفّح الإنترنت، وكتابة عنوان IP لـ ESP32-CAM، ثمّ الضغط على زرّ بدء البثّ لبدء بثّ الفيديو.
ويمكن أيضاً التقاط الصور بالنقر فوق الزرّ .Get Still ولسوء الحظّ، لا يحفظ هذا المثال الصور، ولكن يمكنك تعديله لاستخدام بطاقة microSD الموجودة على اللوحة لتخزين الصور الملتقَطة، ويمكن تغيير العديد من إعدادات الكاميرا لضبط إعدادات الصورة، وهكذا يمكن التعرّف على الوجوه، والكشف عنها.
تحتاج في البداية إلى تسجيل وجه جديد، وسيُجري عدّة محاولات لحفظ الوجه. وبعد تسجيل مستخدم جديد، يصبح قادراً على التعرّف على وجهه.
أصبح لدينا الآن خادم ويب لبثّ الفيديو، يعمل بميزة اكتشاف الوجه والتعرّف عليه، مع مثال من المكتبة.
استكشاف الأخطاء وإصلاحها
إذا ظهر لك أيّ من الأخطاء التالية، اطّلع على الرابط هنا
- فشل الاتّصال بـ ESP32: انتهت مهلة انتظار ترويسة الحزمة.
- فشل بدء الكاميرا بسبب الخطأ 0x20001، أو ما شابه.
- كاشف التراجع القصير في مصدر الطاقة، أو خطأ Guru meditation.
- اللوحة في COMX غير متوفرة – لم يحدّد منفذ COM.
- خطأ Psram: خدمة GPIO isr غير مثبّتة.
- إشارة Wi-Fi ضعيفة.
- لا يوجد عنوان IP في شاشة العرض التسلسليّ للأردوينو.
- لا يمكن فتح خادم الويب.
- تتأخّر الصورة/تُظهر الكثير من الانقطاعات.
ملخّص:
توفّر ESP32-CAM طريقة غير مكلفة لإنشاء مشاريع أتمتة منزليّة أكثر تقدُّماً، وتتميّز بالفيديو، والتقاط الصور، والتعرّف على الوجوه. وبذلك قد اختبرنا في هذا المشروع مثال CameraWebServer لاختبار وظائف الكاميرا، ولكن، تكمن الفكرة الآن في تعديل المثال، أو كتابة برنامج جديد لبناء مشاريع أخرى. على سبيل المثال، التقاط صور وحفظها في بطاقة microSD عند اكتشاف الحركة، ودمج بثّ الفيديو في نظام التشغيل الآليّ للمنزل (مثل: Node-RED أو Home Assistant)، وغير ذلك الكثير.
المصدر: هنا
ترجمة: إيليا سليمان, مراجعة:يارا قاضون, تدقيق لغوي:سلام أحمد, تصميم:علي العلي, تحرير:فادي الشعار