विषयसूची:

ESP32 के साथ वीडियो चलाएं: 10 कदम (चित्रों के साथ)
ESP32 के साथ वीडियो चलाएं: 10 कदम (चित्रों के साथ)

वीडियो: ESP32 के साथ वीडियो चलाएं: 10 कदम (चित्रों के साथ)

वीडियो: ESP32 के साथ वीडियो चलाएं: 10 कदम (चित्रों के साथ)
वीडियो: ESP32CAM Tutorial: GPIO, Programming, and Video Stream Demo [in Hindi] 2024, जुलाई
Anonim
ESP32. के साथ वीडियो चलाएं
ESP32. के साथ वीडियो चलाएं

यह निर्देश ESP32 के साथ वीडियो और ऑडियो चलाने के बारे में कुछ दिखाते हैं।

चरण 1: ESP32 सुविधाएँ और सीमाएँ

विशेषताएं

  • 4 SPI बस, 2 SPI बस उपयोगकर्ता स्थान के लिए उपलब्ध हैं, वे SPI2 और SPI3 हैं या जिन्हें HSPI और VSPI कहा जाता है। दोनों एसपीआई बसें अधिकतम 80 मेगाहर्ट्ज पर चल सकती हैं। सैद्धांतिक रूप से यह 320x240 16-बिट रंग पिक्सल को 60 एफपीएस पर एसपीआई एलसीडी पर धक्का दे सकता है, लेकिन इसने अभी तक वीडियो डेटा को पढ़ने और डीकोड करने के लिए आवश्यक समय की गणना नहीं की है।
  • 1-बिट / 4-बिट एसडी बस एसडी कार्ड को देशी प्रोटोकॉल में जोड़ सकती है
  • I2S आंतरिक DAC ऑडियो आउटपुट
  • वीडियो और ऑडियो बफर के लिए 100 केबी से अधिक रैम उपलब्ध है
  • जेपीईजी (प्ले मोशन जेपीईजी) और एलजेडडब्ल्यू डेटा संपीड़न (एनिमेटेड जीआईएफ चलाएं) को डीकोड करने के लिए पर्याप्त प्रसंस्करण शक्ति
  • डुअल-कोर संस्करण एसडी कार्ड से पढ़े गए डेटा को विभाजित कर सकता है, डीकोड कर सकता है और एसपीआई एलसीडी को समानांतर बहु-कार्यों में धकेल सकता है और प्लेबैक प्रदर्शन को बढ़ा सकता है

सीमाओं

  • 16-बिट रंग में 320x240 के लिए डबल फ्रेम बफर रखने के लिए पर्याप्त आंतरिक रैम नहीं है, इसने मल्टीटास्क डिज़ाइन को सीमित कर दिया है। यह बाहरी PSRAM से थोड़ा आगे निकल सकता है, हालांकि यह आंतरिक RAM की तुलना में धीमा है
  • mp4 वीडियो को डिकोड करने के लिए पर्याप्त प्रोसेसिंग पावर नहीं है
  • सभी ESP32 संस्करण में 2 कोर नहीं होते हैं, बहु-कार्य नमूना केवल दोहरे-कोर संस्करण पर लाभान्वित होता है

संदर्भ:

चरण 2: वीडियो प्रारूप

आरजीबी565

या 16-बिट रंग कहा जाता है, एक कच्चा डेटा प्रारूप है जो आमतौर पर एमसीयू और रंग प्रदर्शन के बीच संचार पर उपयोग किया जाता है। प्रत्येक रंग पिक्सेल को 16-बिट मान द्वारा दर्शाया जाता है, पहला 5-बिट लाल मान है, 6-बिट के बाद हरा मान और फिर 5-बिट नीला मान है। 16-बिट मान 65536 रंग भिन्नता बना सकता है इसलिए इसे 64K रंग भी कहा जाता है। तो 1 मिनट 320x240 @ 30 एफपीएस वीडियो का आकार होगा: 16 * 320 * 240 * 30 * 60 = 2211840000 बिट्स = 276480000 बाइट्स या 260 एमबी से अधिक

एनिमेटेड GIF

यह 1990 के दशक से वेब पर एक सामान्य फ़ाइल स्वरूप है। यह प्रत्येक स्क्रीन के लिए 256 रंगों तक रंग भिन्नता को सीमित करता है और पिक्सेल को पिछले फ्रेम के समान रंग के रूप में संग्रहीत नहीं करता है। तो यह फ़ाइल आकार को बहुत कम कर सकता है, खासकर जब प्रत्येक एनीमेशन फ्रेम बहुत अधिक विवरण नहीं बदलता है। LZW संपीड़न को 1990 के दशक के कंप्यूटर द्वारा डिकोड करने में सक्षम बनाया गया है, इसलिए ESP32 में वास्तविक समय में इसे डीकोड करने के लिए पर्याप्त प्रसंस्करण शक्ति भी है।

मोशन जेपीईजी

या एम-जेपीईजी / एमजेपीईजी कहा जाता है, वीडियो कैप्चर हार्डवेयर के लिए सीमित प्रसंस्करण शक्ति के साथ एक सामान्य वीडियो संपीड़न प्रारूप है। यह वास्तव में अभी भी 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: ऑडियो प्रारूप

पीसीएम

डिजिटल ऑडियो के लिए एक कच्चा डेटा प्रारूप। ESP32 DAC 16-बिट बिट गहराई का उपयोग करता है, जिसका अर्थ है कि प्रत्येक 16-बिट डेटा एक डिजिटल नमूना एनालॉग सिग्नल का प्रतिनिधित्व करता है। अधिकांश वीडियो और गीत ऑडियो आमतौर पर 44100 मेगाहर्ट्ज पर नमूना दर का उपयोग करते हैं, जिसका अर्थ है कि प्रत्येक सेकंड के लिए 44100 नमूना एनालॉग सिग्नल। तो, 1 मिनट मोनो ऑडियो पीसीएम कच्चे डेटा का आकार होगा: 16 * 44100 * 60 = 42336000 बिट्स = 5292000 बाइट्स या 5 एमबी से अधिक। स्टीरियो ऑडियो का आकार दोगुना होगा, यानी 10 एमबी से अधिक

एमपी 3

एमपीईजी लेयर 3 एक संपीड़ित ऑडियो प्रारूप है जिसका व्यापक रूप से 1990 के दशक से गीत संपीड़न के लिए उपयोग किया जाता है। यह कच्चे पीसीएम प्रारूप के दसवें हिस्से के तहत फ़ाइल आकार को नाटकीय रूप से कम कर सकता है

संदर्भ।:

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

en.wikipedia.org/wiki/MP3

चरण 4: प्रारूप रूपांतरण

यह प्रोजेक्ट FFmpeg का उपयोग वीडियो को ESP32 पठनीय प्रारूप में परिवर्तित करता है।

कृपया FFmpeg को उनकी आधिकारिक साइट पर डाउनलोड और इंस्टॉल करें यदि अभी तक नहीं:

पीसीएम ऑडियो में कनवर्ट करें

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 "एफपीएस = 9, स्केल = -1: 176: झंडे = लैंज़ोस, क्रॉप = 220: इन_एच: (इन_डब्ल्यू-220) / 2: 0" -सी: वी रॉवीडियो -पिक्स_एफएमटी आरजीबी 565बी 220_9 एफपीएस। आरजीबी

एनिमेटेड जीआईएफ में कनवर्ट करें

ffmpeg -i input.mp4 -vf "एफपीएस = 15, स्केल = -1: 176: झंडे = लैंक्ज़ोस, फसल = 220: in_h: (in_w-220) / 2: 0, विभाजित [s0] [s1]; [s0]palettegen[p];[s1][p]paletteuse" -loop -1 220_15fps.gif

मोशन जेपीईजी में कनवर्ट करें

ffmpeg -i input.mp4 -vf "एफपीएस = 30, स्केल = -1: 176: झंडे = लैंज़ोस, फसल = 220: in_h: (in_w-220) / 2: 0" -क्यू: वी 9 220_30 एफपीएस। एमजेपीईजी

ध्यान दें:

FFmpeg रूपांतरित एनिमेटेड-g.webp" />

चरण 5: हार्डवेयर तैयारी

हार्डवेयर तैयारी
हार्डवेयर तैयारी

ESP32 देव बोर्ड

कोई भी डुअल-कोर ESP32 देव बोर्ड ठीक होना चाहिए, इस बार मैं TTGO ESP32-Micro का उपयोग कर रहा हूं।

रंग प्रदर्शन

कोई भी रंग डिस्प्ले जो Arduino_GFX सपोर्ट ठीक होना चाहिए, इस बार मैं एसडी कार्ड स्लॉट के साथ ILI9225 ब्रेकआउट बोर्ड का उपयोग कर रहा हूं।

आप Arduino_GFX समर्थित रंग प्रदर्शन सूची Github पर पा सकते हैं:

github.com/moononournation/Arduino_GFX

एसडी कार्ड

कोई भी एसडी कार्ड ठीक होना चाहिए, इस बार मैं एसडी एडाप्टर के साथ सैनडिस्क "सामान्य गति" 8 जीबी माइक्रो एसडी का उपयोग कर रहा हूं।

ऑडियो

यदि आप केवल हेडफ़ोन का उपयोग करना चाहते हैं, तो बस हेडफ़ोन पिन को 26 पिन से कनेक्ट करें और GND ऑडियो सुन सकता है। या आप स्पीकर के साथ ऑडियो चलाने के लिए एक छोटे एम्पलीफायर का उपयोग कर सकते हैं।

अन्य

कुछ ब्रेडबोर्ड और ब्रेडबोर्ड तार

चरण 6: एसडी इंटरफ़ेस

एसडी इंटरफेस
एसडी इंटरफेस
एसडी इंटरफेस
एसडी इंटरफेस

ILI9225 LCD ब्रेकआउट बोर्ड में SD crd स्लॉट ब्रेकआउट पिन भी शामिल है। इसे एसपीआई बस या 1-बिट एसडी बस के रूप में इस्तेमाल किया जा सकता है। जैसा कि मेरे पिछले अनुदेशों में उल्लेख किया गया है, मैं 1-बिट एसडी बस का उपयोग करना पसंद करता हूं, इसलिए यह परियोजना 1-बिट एसडी बस पर आधारित होगी।

चरण 7: इसे एक साथ रखें

एक साथ रखो
एक साथ रखो
एक साथ रखो
एक साथ रखो
एक साथ रखो
एक साथ रखो

उपरोक्त चित्र इस परियोजना में मेरे द्वारा उपयोग किए जा रहे परीक्षण मंच को दिखाते हैं। सफेद ब्रेडबोर्ड 3डी प्रिंटेड है, आप इसे डाउनलोड कर सकते हैं और इसे विभिन्न प्रकार से प्रिंट कर सकते हैं:

वास्तविक कनेक्शन इस बात पर निर्भर करता है कि आपके पास कौन सा हार्डवेयर है।

यहाँ कनेक्शन सारांश हैं:

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: कार्यक्रम

कार्यक्रम
कार्यक्रम

अरुडिनो आईडीई

यदि आपने अभी तक ऐसा नहीं किया है तो Arduino IDE डाउनलोड और इंस्टॉल करें:

www.arduino.cc/hi/main/software

ESP32 समर्थन

यदि आपने अभी तक ऐसा नहीं किया है तो ESP32 समर्थन जोड़ने के लिए स्थापना निर्देशों का पालन करें:

github.com/espressif/arduino-esp32

Arduino_GFX लाइब्रेरी

नवीनतम Arduino_GFX लाइब्रेरी डाउनलोड करें: ("क्लोन या डाउनलोड" दबाएं -> "ज़िप डाउनलोड करें")

github.com/moononournation/Arduino_GFX

Arduino IDE में लाइब्रेरी आयात करें। (Arduino IDE "स्केच" मेनू -> "लाइब्रेरी शामिल करें" -> ". ZIP लाइब्रेरी जोड़ें" -> डाउनलोड की गई ज़िप फ़ाइल चुनें)

ESP8266ऑडियो

नवीनतम ESP8266ऑडियो लाइब्रेरी डाउनलोड करें: ("क्लोन या डाउनलोड" दबाएं -> "ज़िप डाउनलोड करें")

github.com/earlephilhower/ESP8266Audio

Arduino IDE में लाइब्रेरी आयात करें। (Arduino IDE "स्केच" मेनू -> "लाइब्रेरी शामिल करें" -> ". ZIP लाइब्रेरी जोड़ें" -> डाउनलोड की गई ज़िप फ़ाइल चुनें)

RGB565_video नमूना कोड

नवीनतम RGB565_video नमूना कोड डाउनलोड करें: ("क्लोन या डाउनलोड" दबाएं -> "ज़िप डाउनलोड करें")

github.com/moononournation/RGB565_video

एसडी कार्ड डेटा

कनवर्ट की गई फ़ाइलों को एसडी कार्ड में कॉपी करें और एलसीडी कार्ड स्लॉट में डालें

संकलित करें और अपलोड करें

  1. Arduino IDE में SDMMC_MJPEG_video_PCM_audio_dualSPI_multitask.ino खोलें
  2. यदि आप ILI9225 का उपयोग नहीं कर रहे हैं, तो कक्षा का नाम सही करने के लिए नया वर्ग कोड (लगभग 35 पंक्ति) बदलें
  3. Arduino IDE "अपलोड" बटन दबाएं
  4. यदि आप प्रोग्राम को अपलोड करने में विफल रहे हैं, तो ESP32 GPIO 2 और SD D0/MISO के बीच कनेक्शन को अलग करने का प्रयास करें।
  5. यदि आप अभिविन्यास को सही नहीं पाते हैं, तो "रोटेशन" मान (0-3) को नए वर्ग कोड में बदलें
  6. यदि प्रोग्राम अच्छी तरह से चलता है तो आप SDMMC_* के साथ अन्य नमूना शुरू करने का प्रयास कर सकते हैं
  7. यदि आपके पास SD कार्ड स्लॉट नहीं है या आपके पास FFmpeg स्थापित नहीं है, तो भी आप SPIFFS_* उदाहरण आज़मा सकते हैं

चरण 9: बेंचमार्क

बेंचमार्क
बेंचमार्क

विभिन्न वीडियो (220x176) और ऑडियो (44100 मेगाहर्ट्ज) प्रारूप के लिए प्रदर्शन सारांश यहां दिए गए हैं:

प्रारूप फ्रेम प्रति सेकंड (एफपीएस)
एमजेपीईजी + पीसीएम 30
जीआईएफ + पीसीएम 15
आरजीबी565 + पीसीएम 9
एमजेपीईजी + एमपी3 24

ध्यान दें:

  • एमजेपीईजी + पीसीएम उच्च एफपीएस तक पहुंच सकता है लेकिन 30 एफपीएस से अधिक की छोटी स्क्रीन में यह अनावश्यक खेल है
  • RGB565 को डिकोड प्रक्रिया की आवश्यकता नहीं है, लेकिन डेटा का आकार बहुत बड़ा है और एसडी से डेटा लोड करने में बहुत समय लगता है, 4-बिट एसडी बस और तेज एसडी कार्ड इसे थोड़ा सुधार सकता है (जंगली अनुमान लगभग 12 एफपीएस तक पहुंच सकता है)
  • एमपी 3 डिकोड प्रक्रिया अभी तक अनुकूलित नहीं है, अब यह एमपी 3 डीकोड के लिए कोर 0 और वीडियो चलाने के लिए कोर 1 समर्पित है

चरण 10: हैप्पी प्लेइंग

हैप्पी प्लेइंग!
हैप्पी प्लेइंग!

अब आप अपने ESP32 के साथ वीडियो और ऑडियो चला सकते हैं, इसने कई संभावनाओं को खोल दिया है!

मुझे लगता है कि मैं बाद में एक छोटा विंटेज टीवी बनाऊंगा …

सिफारिश की: