جدول المحتويات:
- الخطوة 1: ميزات وقيود ESP32
- الخطوة 2: تنسيق الفيديو
- الخطوة 3: تنسيق الصوت
- الخطوة 4: تنسيق التحويل
- الخطوة 5: تجهيز الأجهزة
- الخطوة 6: واجهة SD
- الخطوة 7: ضعها معًا
- الخطوة 8: البرنامج
- الخطوة 9: المعيار
- الخطوة 10: لعب سعيد
فيديو: تشغيل الفيديو باستخدام ESP32: 10 خطوات (بالصور)
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-01-31 10:16
تعرض 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
تضمنت لوحة الفصل 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
ترجمة وتحميل
- افتح SDMMC_MJPEG_video_PCM_audio_dualSPI_multitask.ino في Arduino IDE
- إذا كنت لا تستخدم ILI9225 ، فقم بتغيير رمز الفئة الجديد (حول السطر 35) لتصحيح اسم الفئة
- اضغط على زر Arduino IDE "تحميل"
- إذا فشلت في تحميل البرنامج ، فحاول فصل الاتصال بين ESP32 GPIO 2 و SD D0 / MISO
- إذا وجدت أن الاتجاه غير صحيح ، فقم بتغيير قيمة "الدوران" (0-3) في كود الفصل الجديد
- إذا كان البرنامج يعمل بشكل جيد ، يمكنك تجربة نموذج آخر يبدأ بـ SDMMC_ *
- إذا لم يكن لديك فتحة بطاقة 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 ، فقد فتح العديد من الاحتمالات!
أعتقد أنني سأصنع تلفزيونًا عتيقًا صغيرًا لاحقًا …
موصى به:
الحديث اردوينو - تشغيل ملف MP3 باستخدام Arduino بدون أي وحدة - تشغيل ملف MP3 من Arduino باستخدام PCM: 6 خطوات
الحديث اردوينو | تشغيل ملف MP3 باستخدام Arduino بدون أي وحدة | تشغيل ملف MP3 من Arduino باستخدام PCM: في هذه التعليمات ، سنتعلم كيفية تشغيل ملف mp3 باستخدام اردوينو دون استخدام أي وحدة صوتية ، وهنا سنستخدم مكتبة PCM لـ Arduino التي تقوم بتشغيل 16 بت PCM بتردد 8 كيلو هرتز ، لذلك دعونا نفعل ذلك
تشغيل الأغاني (MP3) باستخدام Arduino باستخدام PWM على مكبر الصوت أو محول Flyback: 6 خطوات (بالصور)
قم بتشغيل الأغاني (MP3) باستخدام Arduino باستخدام PWM على مكبر الصوت أو Flyback Transformer: مرحبًا يا شباب ، هذا هو أول تدريب لي ، آمل أن تعجبك! لنقل بيانات الموسيقى من جهاز الكمبيوتر المحمول الخاص بي إلى Arduino. وباستخدام Arduino TIMERS t
كيفية تشغيل / إيقاف تشغيل Wifi باستخدام موجه الأوامر !!: 4 خطوات
كيفية تشغيل / إيقاف تشغيل Wifi باستخدام موجه الأوامر !!: سيوضح لك هذا Instructable كيفية تشغيل wifi على جهاز الكمبيوتر الخاص بك أو إيقاف تشغيله باستخدام موجه الأوامر ، يرجى الاشتراك في قناتي شكرًا
تشغيل / إيقاف تشغيل تلقائي للتحكم عن بعد باستخدام مقبس MIC في كاميرا الفيديو / مرحل الحالة الصلبة منخفض الجهد: 4 خطوات (بالصور)
تشغيل / إيقاف تشغيل تلقائي عن بُعد باستخدام مقبس MIC في كاميرا الفيديو / مرحل الحالة الصلبة منخفض الجهد: نظرة عامة: استخدمنا مقبس MIC الخاص بكاميرا الفيديو لاكتشاف وقت تشغيل كاميرا الفيديو. قمنا ببناء مرحل الحالة الصلبة منخفض الجهد لاكتشاف مقبس MIC وتشغيل وإيقاف تشغيل جهاز بعيد في نفس الوقت مثل كاميرا الفيديو. الحالة الصلبة
كيفية تشغيل الفيديو المركب وبيانات الشبكة عبر كابل إيثرنت: 6 خطوات (بالصور)
كيفية تشغيل الفيديو المركب وبيانات الشبكة عبر كابل إيثرنت: كنت بحاجة إلى تشغيل الفيديو والصوت في جزء آخر من منزلي. كانت المشكلة ، لم يكن لدي الكثير من كبلات الصوت والصورة ، ولا الوقت والمال للقيام بتثبيت جيد. ومع ذلك ، كان لدي الكثير من كبلات Cat 5 Ethernet. هذا هو ما خطرت لي