جدول المحتويات:

تشغيل الفيديو باستخدام ESP32: 10 خطوات (بالصور)
تشغيل الفيديو باستخدام ESP32: 10 خطوات (بالصور)

فيديو: تشغيل الفيديو باستخدام ESP32: 10 خطوات (بالصور)

فيديو: تشغيل الفيديو باستخدام ESP32: 10 خطوات (بالصور)
فيديو: ESP32 Cam (01) | مقدمة و عمل مشروع كاميرا لاسلكية 2024, شهر نوفمبر
Anonim
تشغيل الفيديو مع ESP32
تشغيل الفيديو مع ESP32

تعرض Instructables شيئًا ما حول تشغيل الفيديو والصوت باستخدام ESP32.

الخطوة 1: ميزات وقيود ESP32

سمات

  • 4 ناقل SPI ، ناقل 2 SPI متاح لمساحة المستخدم ، هما SPI2 و SPI3 أو يطلق عليهما HSPI و VSPI. يمكن لكلا ناقلتي SPI العمل بسرعة 80 ميجاهرتز على الأكثر. من الناحية النظرية ، يمكنها دفع 320x240 بكسل ملون 16 بت إلى SPI LCD بسرعة 60 إطارًا في الثانية ، لكنها لم تحسب بعد الوقت الزائد المطلوب لقراءة بيانات الفيديو وفك تشفيرها.
  • يمكن لناقل SD 1 بت / 4 بت توصيل بطاقة SD بالبروتوكول الأصلي
  • خرج الصوت الداخلي I2S DAC
  • أكثر من 100 كيلوبايت من ذاكرة الوصول العشوائي المتاحة لمخزن الفيديو والصوت
  • قوة معالجة عادلة كافية لفك تشفير JPEG (تشغيل Motion JPEG) وضغط بيانات LZW (تشغيل-g.webp" />
  • يمكن للإصدار ثنائي النواة تقسيم البيانات المقروءة من بطاقة SD ، وفك التشفير والدفع إلى SPI LCD إلى مهام متعددة متوازية وتعزيز أداء التشغيل

محددات

  • لا توجد ذاكرة وصول عشوائي داخلية كافية للحصول على مخزن مؤقت للإطار المزدوج لـ 320 × 240 بلون 16 بت ، فقد حد من تصميم المهام المتعددة. يمكنه التغلب قليلاً مع PSRAM الخارجي على الرغم من أنه أبطأ من ذاكرة الوصول العشوائي الداخلية
  • لا توجد قوة معالجة كافية لفك تشفير فيديو mp4
  • لا تحتوي كل إصدارات ESP32 على نواة ثنائية ، فإن العينة متعددة المهام تستفيد فقط من الإصدار ثنائي النواة

المرجع:

الخطوة 2: تنسيق الفيديو

RGB565

أو يسمى لون 16 بت هو تنسيق بيانات خام يستخدم بشكل شائع في الاتصال بين MCU والشاشة الملونة. يتم تمثيل كل بكسل لوني بقيمة 16 بت ، ويكون أول 5 بت هو قيمة حمراء ، ويتبع 6 بت قيمة خضراء ثم قيمة زرقاء 5 بت. يمكن لقيمة 16 بت أن تجعل 65536 تباينًا في اللون لذلك تسمى أيضًا ألوان 64 كيلو. لذلك ، 1 دقيقة 320x240 @ 30 fps سيتم تغيير حجم الفيديو: 16 * 320 * 240 * 30 * 60 = 2211840000 بت = 276480000 بايت أو أكثر من 260 ميجا بايت

هذا تنسيق ملف شائع على الويب منذ التسعينيات. يحد من تباين اللون لكل شاشة حتى 256 لونًا ولا يكرر تخزين البكسل بنفس لون الإطار السابق. لذلك يمكن أن يقلل حجم الملف كثيرًا ، خاصةً عندما لا يغير كل إطار للرسوم المتحركة الكثير من التفاصيل. تم تصميم ضغط LZW بحيث يمكن فك تشفيره بواسطة كمبيوتر تسعينيات القرن الماضي ، لذا فإن ESP32 يتمتع أيضًا بقدرة معالجة كافية لفك تشفيره في الوقت الفعلي.

Motion JPEG

أو يسمى M-JPEG / MJPEG ، وهو تنسيق ضغط فيديو شائع لأجهزة التقاط الفيديو ذات قوة معالجة محدودة. إنها في الواقع مجرد سلسلة من إطارات JPEG الثابتة. مقارنة مع MPEG أو MP4 ، لا تحتاج Motion JPEG إلى تقنية حسابية مكثفة للتنبؤ بين الإطارات ، كل إطار مستقل. لذلك فهي تتطلب موارد أقل للتشفير وفك التشفير.

المرجع:

en.wikipedia.org/wiki/List_of_monochrome_a…

en.wikipedia.org/wiki/GIF

en.wikipedia.org/wiki/Motion_JPEG

الخطوة 3: تنسيق الصوت

PCM

تنسيق بيانات خام للصوت الرقمي. يستخدم ESP32 DAC عمق 16 بت ، وهذا يعني أن كل بيانات 16 بت تمثل إشارة رقمية تمثيلية من العينات التناظرية. تستخدم معظم مقاطع الفيديو وصوت الأغنيات معدل العينة عند 44100 ميجاهرتز ، وهذا يعني 44100 إشارة تناظرية مأخوذة من العينات لكل ثانية. لذلك ، سيتم تحديد حجم البيانات الأولية PCM الصوتية أحادية الدقيقة: 16 * 44100 * 60 = 42336000 بت = 5292000 بايت أو أكثر من 5 ميجابايت. سيتضاعف حجم صوت الاستريو ، أي أكثر من 10 ميغا بايت

MP3

MPEG Layer 3 هو تنسيق صوتي مضغوط يستخدم على نطاق واسع لضغط الأغاني منذ التسعينيات. يمكنه تقليل حجم الملف بشكل كبير إلى أقل من عُشر تنسيق PCM الخام

المرجع:

en.wikipedia.org/wiki/Pulse-code_modulatio…

en.wikipedia.org/wiki/MP3

الخطوة 4: تنسيق التحويل

يستخدم هذا المشروع FFmpeg لتحويل الفيديو إلى تنسيق ESP32 قابل للقراءة.

يرجى تنزيل FFmpeg وتثبيته على موقعهم الرسمي إن لم يكن بعد:

تحويل إلى صوت PCM

ffmpeg -i input.mp4 -f u16be -acodec pcm_u16le -ar 44100 -ac 1 44100_u16le.pcm

تحويل إلى صوت MP3

ffmpeg -i input.mp4 -ar 44100 -ac 1 -q: a 9 44100.mp3

قم بالتحويل إلى RGB565

ffmpeg -i input.mp4 -vf "fps = 9 ، scale = -1: 176: flags = lanczos ، المحاصيل = 220: in_h: (in_w-220) / 2: 0" -c: v rawvideo -pix_fmt rgb565be 220_9fps. RGB

قم بالتحويل إلى صورة-g.webp

ffmpeg -i input.mp4 -vf "fps = 15 ، scale = -1: 176: flags = lanczos ، المحاصيل = 220: in_h: (in_w-220) / 2: 0 ، الانقسام [s0] [s1] ؛ [s0] palettegen [p] ؛ [s1] [p] paletteuse "-loop -1 220_15fps.gif

قم بالتحويل إلى Motion JPEG

ffmpeg -i input.mp4 -vf "fps = 30 ، scale = -1: 176: flags = lanczos ، المحاصيل = 220: in_h: (in_w-220) / 2: 0" -q: v 9220_30fps.mjpeg

ملحوظة:

يمكن تحسين صور-g.webp" />

الخطوة 5: تجهيز الأجهزة

تحضير الأجهزة
تحضير الأجهزة

مجلس تطوير ESP32

يجب أن تكون أي لوحة تطوير ثنائية النواة ESP32 على ما يرام ، هذه المرة أستخدم TTGO ESP32-Micro.

شاشة ملونة

يجب أن تكون أي شاشة ملونة تدعم Arduino_GFX على ما يرام ، هذه المرة أستخدم لوحة اندلاع ILI9225 مع فتحة بطاقة SD.

يمكنك العثور على قائمة عرض الألوان المدعومة من Arduino_GFX في Github:

github.com/moononournation/Arduino_GFX

بطاقة الذاكرة

يجب أن تكون أي بطاقة SD على ما يرام ، هذه المرة أنا أستخدم SanDisk "السرعة العادية" 8 جيجا بايت micro SD مع محول SD.

صوتي

إذا كنت تريد استخدام سماعة الرأس فقط ، فما عليك سوى توصيل دبابيس سماعة الرأس بالدبوس 26 ويمكن لـ GND الاستماع إلى الصوت. أو يمكنك استخدام مضخم صوت صغير لتشغيل الصوت مع مكبر الصوت.

آحرون

بعض الألواح وأسلاك اللوح

الخطوة 6: واجهة SD

واجهة SD
واجهة SD
واجهة SD
واجهة SD

تضمنت لوحة الفصل ILI9225 LCD أيضًا دبابيس فتحة SD crd. يمكن استخدامه كناقل SPI أو ناقل SD 1 بت. كما هو مذكور في التعليمات السابقة الخاصة بي ، أفضل استخدام ناقل SD 1 بت ، لذلك سيعتمد هذا المشروع على ناقل SD 1 بت.

الخطوة 7: ضعها معًا

ضعها معًا
ضعها معًا
ضعها معًا
ضعها معًا
ضعها معًا
ضعها معًا

تُظهر الصور أعلاه منصة الاختبار التي أستخدمها في هذا المشروع. لوحة التجارب البيضاء مطبوعة ثلاثية الأبعاد ، يمكنك تنزيلها وطباعتها من موقع thingiverse:

يعتمد الاتصال الفعلي على الأجهزة الموجودة لديك.

فيما يلي ملخص الاتصال:

ESP32

Vcc -> LCD Vcc GND -> LCD GND GPIO 2 -> SD D0 / MISO -> 1k المقاوم -> Vcc GPIO 14 -> SD CLK GPIO 15 -> SD CMD / MOSI GPIO 18 -> LCD SCK GPIO 19 -> LCD MISO GPIO 22 -> LCD LED GPIO 23 -> LCD MOSI GPIO 27 -> LCD DC / RS GPIO 33 -> LCD RST

المرجع:

الخطوة 8: البرنامج

برنامج
برنامج

اردوينو IDE

قم بتنزيل وتثبيت Arduino IDE إذا لم تقم بذلك بعد:

www.arduino.cc/en/main/software

دعم ESP32

اتبع تعليمات التثبيت لإضافة دعم ESP32 إذا لم تقم بذلك بعد:

github.com/espressif/arduino-esp32

مكتبة Arduino_GFX

تنزيل أحدث مكتبات Arduino_GFX: (اضغط على "Clone or Download" -> "Download ZIP")

github.com/moononournation/Arduino_GFX

مكتبات الاستيراد في Arduino IDE. (قائمة Arduino IDE "Sketch" -> "Include Library" -> "Add. ZIP Library" -> حدد ملف ZIP الذي تم تنزيله)

صوت

تنزيل أحدث مكتبات ESP8266Audio: (اضغط على "Clone or Download" -> "Download ZIP")

github.com/earlephilhower/ESP8266

مكتبات الاستيراد في Arduino IDE. (قائمة Arduino IDE "Sketch" -> "Include Library" -> "Add. ZIP Library" -> حدد ملف ZIP الذي تم تنزيله)

نموذج رمز RGB565_video

قم بتنزيل أحدث نموذج كود RGB565_video: (اضغط على "Clone or Download" -> "Download ZIP")

github.com/moononournation/RGB565_video

بيانات بطاقة SD

انسخ الملفات المحولة إلى بطاقة SD وأدخلها في فتحة بطاقة LCD

ترجمة وتحميل

  1. افتح SDMMC_MJPEG_video_PCM_audio_dualSPI_multitask.ino في Arduino IDE
  2. إذا كنت لا تستخدم ILI9225 ، فقم بتغيير رمز الفئة الجديد (حول السطر 35) لتصحيح اسم الفئة
  3. اضغط على زر Arduino IDE "تحميل"
  4. إذا فشلت في تحميل البرنامج ، فحاول فصل الاتصال بين ESP32 GPIO 2 و SD D0 / MISO
  5. إذا وجدت أن الاتجاه غير صحيح ، فقم بتغيير قيمة "الدوران" (0-3) في كود الفصل الجديد
  6. إذا كان البرنامج يعمل بشكل جيد ، يمكنك تجربة نموذج آخر يبدأ بـ SDMMC_ *
  7. إذا لم يكن لديك فتحة بطاقة SD أو لم يكن لديك FFmpeg مثبتًا ، فلا يزال بإمكانك تجربة SPIFFS_ * مثال

الخطوة 9: المعيار

المعيار
المعيار

فيما يلي ملخص الأداء لمقاطع الفيديو المختلفة (220 × 176) وتنسيق الصوت (44100 ميجاهرتز):

صيغة إطار في الثانية (fps)
MJPEG + PCM 30
15
RGB565 + PCM 9
MJPEG + MP3 24

ملحوظة:

  • يمكن أن تصل MJPEG + PCM إلى إطارات أعلى في الثانية ، لكنها تلعب غير ضرورية في شاشة صغيرة أكبر من 30 إطارًا في الثانية
  • لا يتطلب RGB565 عملية فك التشفير ولكن حجم البيانات كبير جدًا ويستهلك الكثير من الوقت في تحميل البيانات من SD وناقل 4 بت SD وبطاقة SD الأسرع يمكن أن يحسنها قليلاً (يمكن أن يصل التخمين الجامح إلى حوالي 12 إطارًا في الثانية)
  • لم يتم تحسين عملية فك تشفير MP3 بعد ، فقد تم تخصيص النواة 0 لفك تشفير MP3 والنواة 1 لتشغيل الفيديو

الخطوة 10: لعب سعيد

لعب سعيد!
لعب سعيد!

يمكنك الآن تشغيل الفيديو والصوت باستخدام ESP32 ، فقد فتح العديد من الاحتمالات!

أعتقد أنني سأصنع تلفزيونًا عتيقًا صغيرًا لاحقًا …

موصى به: