مقدمة

هذه المقالة دليلٌ مختصر للوحة ESP32-CAM، حيث نوضّح فيها كيفيّة إعداد خادم ويب لبثّ الفيديو بميزة التعرّف على الوجوه، والكشف عنها باستخدام Arduino IDE في أقلّ من 5 دقائق.
لوحة ESP32-CAM.
لوحة ESP32-CAM. (مصدر الصورة: randomnerdtutorials)

ملاحظة:

استخدمنا في هذا المشروع مثالاً من مكتبة arduino-esp32، وهو لا يشمل كيفيّة تعديل هذا المثال.

يمكن مشاهدة الفيديو التعليميّ أدناه، أو متابعة قراءة هذه المقالة.

نحتاج إلى العناصر التالية:

  • لوحة ESP32-CAM مزوَّدة بكاميرا OV2640.
  • مبرمج FTDI.
  • أسلاك توصيل.

مقدّمة إلى لوحة ESP32-CAM

لوحةESP32-CAM، والكاميرا
لوحة ESP32-CAM، والكاميرا. (مصدر الصورة: randomnerdtutorials)

تُعرف ESP32-CAM بأنّها وحدة كاميرا صغيرة جدّاً، بشريحة ESP32-S يُقدَّر ثمنها بحوالي 10 دولارات. تتميّز إلى جانب كاميرا OV2640، وأطراف الدخل والخرج العامّة لتوصيل الأجهزة الطرفيّة، بفتحة لبطاقة ذاكرة microSD يمكن أن تكون مفيدة لتخزين الصور الملتَقَطة بالكاميرا، أو لتخزين الملفات لتقديمها إلى العملاء

أهمّ مكوّنات لوحةESP32-CAM
أهمّ مكوّنات لوحةESP32-CAM. (مصدر الصورة: randomnerdtutorials)

نحتاج إلى مبرمجة FTDI لتحميل الكود عبر أطراف U0R وU0T (أطراف تسلسليّة)؛ لأنّ لوحة ESP32-CAM لا تتضمّن منفذ USB.

أطراف لوحة ESP32-CAM
أطراف لوحة ESP32-CAM. (مصدر الصورة:  randomnerdtutorials)

الميّزات:

فيما يلي قائمة بميّزات 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).

أطراف خرج لوحة ESP32-CAM
أطراف خرج لوحة ESP32-CAM. (مصدر الصورة: randomnerdtutorials)

توجد ثلاثة أطراف أرضيّة 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.

فتح مثال  CameraWebServerفي Arduino IDE
فتح مثال  CameraWebServerفي Arduino IDE. (مصدر الصورة: randomnerdtutorials)

تظهر الشيفرة التالية:

الشيفرة البرمجيّة الواجب رفعها على اللوحة
الشيفرة البرمجيّة الواجب رفعها على اللوحة. (مصدر الصورة: randomnerdtutorials)

نحتاج إلى تعديل بيانات الشبكة المستخدمة في المتغيّرات التالية قبل رفع البرنامج:

const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

بعد ذلك، تأكَّد من تحديد وحدة الكاميرا الصحيحة. وفي هذه الحالة، نستخدم نموذج AI-THINKER.

شريحة AI-THINKER.
شريحة AI-THINKER. (مصدر الصورة:  randomnerdtutorials)

ونضع جميع النماذج الأخرى ضمن تعليق، باستثناء النموذج المستخدم:

// 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 وفقاً للمخطّط التالي:

مخطّط توصيل لوحة ESP32-CAM
مخطّط توصيل لوحة ESP32-CAM. (مصدر الصورة: randomnerdtutorials)

تمتلك العديد من مبرمجات 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.
النقاط في نافذة التنقيح
النقاط في نافذة التنقيح. (مصدر الصورة:  randomnerdtutorials)

بذلك يجب أن ينتهي التحميل على اللوحة بعد بضع ثوان.

الحصول على عنوان IP

أولاً افصل الطرف GPIO 0 عن GND بعد رفع البرنامج.

افتح شاشة العرض التسلسليّ بمعدّل إرسال 115200، واضغط على زرّ إعادة الضبط الموجود على اللوحة ESP32-CAM، ويجب أن يكون عنوان IP الخاصّ بـ ESP32 ظاهراً على شاشة.

عنوان IP الخاصّ بـ ESP32.
عنوان IP الخاصّ بـ ESP32. P. (مصدر الصورة: randomnerdtutorials)

الوصول إلى خادم بثّ الفيديو

يمكنك الآن الوصول إلى خادم بثّ الكاميرا على شبكتك المحلّيّة من خلال فتح متصفّح الإنترنت، وكتابة عنوان IP لـ ESP32-CAM، ثمّ الضغط على زرّ بدء البثّ لبدء بثّ الفيديو.

واجهة خادم بثّ الفيديو.
واجهة خادم بثّ الفيديو. (مصدر الصورة: randomnerdtutorials)

ويمكن أيضاً التقاط الصور بالنقر فوق الزرّ .Get Still ولسوء الحظّ، لا يحفظ هذا المثال الصور، ولكن يمكنك تعديله لاستخدام بطاقة microSD الموجودة على اللوحة لتخزين الصور الملتقَطة، ويمكن تغيير العديد من إعدادات الكاميرا لضبط إعدادات الصورة، وهكذا يمكن التعرّف على الوجوه، والكشف عنها.

واجهة التعرّف على الوجوه.
واجهة التعرّف على الوجوه. (مصدر الصورة:  randomnerdtutorials)

تحتاج في البداية إلى تسجيل وجه جديد، وسيُجري عدّة محاولات لحفظ الوجه. وبعد تسجيل مستخدم جديد، يصبح قادراً على التعرّف على وجهه.

التعرّف على وجه محفوظ سابقاً
التعرّف على وجه محفوظ سابقاً. (مصدر الصورة: randomnerdtutorials)

أصبح لدينا الآن خادم ويب لبثّ الفيديو، يعمل بميزة اكتشاف الوجه والتعرّف عليه، مع مثال من المكتبة.

استكشاف الأخطاء وإصلاحها

إذا ظهر لك أيّ من الأخطاء التالية، اطّلع على الرابط هنا

  • فشل الاتّصال بـ ESP32: انتهت مهلة انتظار ترويسة الحزمة.
  • فشل بدء الكاميرا بسبب الخطأ 0x20001، أو ما شابه.
  • كاشف التراجع القصير في مصدر الطاقة، أو خطأ Guru meditation.
  • اللوحة في COMX غير متوفرة – لم يحدّد منفذ COM.
  • خطأ Psram: خدمة GPIO isr غير مثبّتة.
  • إشارة Wi-Fi ضعيفة.
  • لا يوجد عنوان IP في شاشة العرض التسلسليّ للأردوينو.
  • لا يمكن فتح خادم الويب.
  • تتأخّر الصورة/تُظهر الكثير من الانقطاعات.

ملخّص:

توفّر ESP32-CAM طريقة غير مكلفة لإنشاء مشاريع أتمتة منزليّة أكثر تقدُّماً، وتتميّز بالفيديو، والتقاط الصور، والتعرّف على الوجوه. وبذلك قد اختبرنا في هذا المشروع مثال CameraWebServer لاختبار وظائف الكاميرا، ولكن، تكمن الفكرة الآن في تعديل المثال، أو كتابة برنامج جديد لبناء مشاريع أخرى. على سبيل المثال، التقاط صور وحفظها في بطاقة microSD عند اكتشاف الحركة، ودمج بثّ الفيديو في نظام التشغيل الآليّ للمنزل (مثل: Node-RED أو Home Assistant)، وغير ذلك الكثير.


المصدر: هنا

ترجمة: إيليا سليمان, مراجعة:يارا قاضون, تدقيق لغوي:سلام أحمد, تصميم:علي العلي, تحرير:فادي الشعار