সুচিপত্র:

ESP32 এর সাথে ভিডিও চালান: 10 টি ধাপ (ছবি সহ)
ESP32 এর সাথে ভিডিও চালান: 10 টি ধাপ (ছবি সহ)

ভিডিও: ESP32 এর সাথে ভিডিও চালান: 10 টি ধাপ (ছবি সহ)

ভিডিও: ESP32 এর সাথে ভিডিও চালান: 10 টি ধাপ (ছবি সহ)
ভিডিও: ESP32 Tutorial 7 - Using Array with ESP32 Arduino Programming-SunFounder's ESP32 IoT Learnig kit 2024, নভেম্বর
Anonim
ESP32 দিয়ে ভিডিও চালান
ESP32 দিয়ে ভিডিও চালান

এই নির্দেশাবলী ESP32 এর সাথে ভিডিও এবং অডিও চালানোর বিষয়ে কিছু দেখায়।

ধাপ 1: ESP32 বৈশিষ্ট্য এবং সীমাবদ্ধতা

বৈশিষ্ট্য

  • 4 SPI বাস, 2 SPI বাস ব্যবহারকারীর জায়গার জন্য উপলব্ধ, সেগুলি SPI2 এবং SPI3 বা HSPI এবং VSPI নামে পরিচিত। উভয় এসপিআই বাস সর্বাধিক 80 মেগাহার্টজ চলতে পারে। তাত্ত্বিকভাবে এটি 60 fps এ 320x240 16-বিট কালার পিক্সেলকে SPI LCD তে ধাক্কা দিতে পারে, কিন্তু ভিডিও ডেটা পড়ার এবং ডিকোড করার জন্য এটি প্রয়োজনীয় সময় ওভারহেড এখনও গণনা করেনি।
  • 1-বিট / 4-বিট এসডি বাস স্থানীয় প্রোটোকলে এসডি কার্ড সংযুক্ত করতে পারে
  • I2S অভ্যন্তরীণ DAC অডিও আউটপুট
  • 100 KB র‍্যাম ভিডিও এবং অডিও বাফারের জন্য উপলব্ধ
  • JPEG (প্লে মোশন JPEG) এবং LZW ডেটা কম্প্রেশন (অ্যানিমেটেড-g.webp" />
  • ডুয়াল কোর ভার্সন এসডি কার্ড থেকে পড়া ডাটা বিভক্ত করতে পারে, ডিকোড করতে পারে এবং এসপিআই এলসিডি-তে ধাক্কা দিয়ে সমান্তরাল মাল্টি-টাস্ক করতে পারে এবং প্লেব্যাকের কর্মক্ষমতা বৃদ্ধি করতে পারে

সীমাবদ্ধতা

  • 16-বিট রঙে 320x240 এর জন্য ডাবল ফ্রেম বাফারের জন্য যথেষ্ট অভ্যন্তরীণ র RAM্যাম নেই, এটি মাল্টিটাস্ক ডিজাইনকে সীমিত করেছে। এটি বাহ্যিক পিএসআরএএম দিয়ে কিছুটা কাটিয়ে উঠতে পারে যদিও এটি অভ্যন্তরীণ র‍্যামের চেয়ে ধীর
  • mp4 ভিডিও ডিকোড করার জন্য পর্যাপ্ত প্রসেসিং পাওয়ার নেই
  • সমস্ত ESP32 সংস্করণে 2 কোর নেই, মাল্টি-টাস্ক নমুনা শুধুমাত্র দ্বৈত কোর সংস্করণে উপকৃত হয়

রেফারেন্স:

ধাপ 2: ভিডিও ফরম্যাট

RGB565

অথবা 16-বিট রঙ বলা হয় একটি কাঁচা ডেটা ফরম্যাট যা সাধারণত MCU এবং কালার ডিসপ্লের মধ্যে যোগাযোগের জন্য ব্যবহৃত হয়। প্রতিটি রঙের পিক্সেল 16-বিট মান দ্বারা প্রতিনিধিত্ব করে, প্রথম 5-বিট হল লাল মান, 6-বিট পরে সবুজ মান এবং তারপর 5-বিট নীল মান। 16-বিট মান 65536 রঙের বৈচিত্র তৈরি করতে পারে তাই এটি 64K রঙও বলা হয়। সুতরাং 1 মিনিট 320x240@30 fps ভিডিও আকার হবে: 16 * 320 * 240 * 30 * 60 = 2211840000 বিট = 276480000 বাইট বা 260 MB এর বেশি

অ্যানিমেটেড জিআইএফ

এটি 1990 -এর দশক থেকে ওয়েবে একটি সাধারণ ফাইল ফরম্যাট। এটি প্রতিটি পর্দার জন্য 256 রঙ পর্যন্ত রঙের বৈচিত্র্য সীমাবদ্ধ করে এবং পিক্সেলটি আগের ফ্রেমের মতো একই রঙের পুনরাবৃত্তি করে না। সুতরাং এটি ফাইলের আকার অনেক কমিয়ে দিতে পারে, বিশেষ করে যখন প্রতিটি অ্যানিমেশন ফ্রেম খুব বেশি বিবরণ পরিবর্তন করে না। এলজেডডব্লিউ কম্প্রেশনটি 1990 এর দশকের কম্পিউটার দ্বারা সক্ষম ডিকোড করা হয়েছে, তাই ইএসপি 32 এর রিয়েল টাইমে ডিকোড করার জন্য যথেষ্ট পরিমাণে প্রক্রিয়াকরণ ক্ষমতা রয়েছে।

মোশন জেপিইজি

অথবা বলা হয় M-JPEG / MJPEG সীমিত প্রসেসিং পাওয়ার সহ ভিডিও ক্যাপচার হার্ডওয়্যারের জন্য একটি সাধারণ ভিডিও কম্প্রেশন ফরম্যাট। এটি আসলে কেবল JPEG ফ্রেমের সংমিশ্রণ। এমপিইজি বা এমপি 4 এর সাথে তুলনা করুন, মোশন জেপিইজি ইন্টারফ্রেম পূর্বাভাসের কম্পিউটেশনালভাবে নিবিড় কৌশল প্রয়োজন নেই, প্রতিটি ফ্রেম স্বাধীন। সুতরাং এটি এনকোড এবং ডিকোড করার জন্য কম সম্পদ প্রয়োজন।

রেফারেন্স:

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 মিনিটের মোনো অডিও PCM কাঁচা ডাটা সাইজ হবে: 16 * 44100 * 60 = 42336000 বিট = 5292000 বাইট বা 5 MB এর বেশি। স্টেরিও অডিওর আকার দ্বিগুণ হবে, অর্থাৎ 10 এমবি এর বেশি

MP3

এমপিইজি লেয়ার 3 একটি কম্প্রেসড অডিও ফরম্যাট যা 1990 এর দশক থেকে গান কম্প্রেশনের জন্য ব্যাপকভাবে ব্যবহৃত হয়। এটি নাটকীয়ভাবে ফাইলের আকার কমাতে পারে কাঁচা 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, crop = 220: in_h: (in_w -220)/2: 0" -c: v rawvideo -pix_fmt rgb565be 220_9fps। আরজিবি

অ্যানিমেটেড-g.webp

ffmpeg -i input.mp4 -vf "fps = 15, scale = -1: 176: flags = lanczos, crop = 220: in_h: (in_w -220)/2: 0, split [s0] [s1]; [s0] প্যালেটেজেন [পি]; [এস 1] [পি] প্যালেটেজ "-লুপ -1 220_15fps.gif

মোশন JPEG এ রূপান্তর করুন

ffmpeg -i input.mp4 -vf "fps = 30, scale = -1: 176: flags = lanczos, crop = 220: in_h: (in_w -220)/2: 0" -q: v 9 220_30fps.mjpeg

বিঃদ্রঃ:

FFmpeg রূপান্তরিত অ্যানিমেটেড-g.webp" />

ধাপ 5: হার্ডওয়্যার প্রস্তুতি

হার্ডওয়্যার প্রস্তুতি
হার্ডওয়্যার প্রস্তুতি

ESP32 দেব বোর্ড

যেকোনো ডুয়াল কোর ESP32 dev বোর্ড ঠিক থাকা উচিত, এবার আমি TTGO ESP32-Micro ব্যবহার করছি।

রঙ প্রদর্শন

Arduino_GFX সমর্থন যে কোন রঙ প্রদর্শন ঠিক হওয়া উচিত, এই সময় আমি SD কার্ড স্লট সহ একটি ILI9225 ব্রেকআউট বোর্ড ব্যবহার করছি।

আপনি Github এ Arduino_GFX সমর্থিত রঙ প্রদর্শন তালিকা খুঁজে পেতে পারেন:

github.com/moononournation/Arduino_GFX

এসডি কার্ড

যেকোন এসডি কার্ড ঠিক থাকা উচিত, এবার আমি স্যানডিস্ক "স্বাভাবিক গতি" 8 জিবি মাইক্রো এসডি ব্যবহার করছি এসডি অ্যাডাপ্টারের সাথে।

শ্রুতি

আপনি যদি কেবল হেডফোন ব্যবহার করতে চান, কেবল হেডফোন পিনগুলি 26 পিনে সংযুক্ত করুন এবং GND অডিও শুনতে পারে। অথবা স্পিকারের সাথে অডিও চালানোর জন্য আপনি একটি ছোট এম্প্লিফায়ার ব্যবহার করতে পারেন।

অন্যান্য

কিছু breadboards এবং breadboard তারের

ধাপ 6: এসডি ইন্টারফেস

এসডি ইন্টারফেস
এসডি ইন্টারফেস
এসডি ইন্টারফেস
এসডি ইন্টারফেস

ILI9225 LCD ব্রেকআউট বোর্ডে একটি SD CRD স্লট ব্রেকআউট পিন অন্তর্ভুক্ত ছিল। এটি SPI বাস বা 1-বিট SD বাস হিসাবে ব্যবহার করা যেতে পারে। আমার আগের নির্দেশাবলীতে উল্লিখিত হিসাবে, আমি 1-বিট এসডি বাস ব্যবহার করতে পছন্দ করি, তাই এই প্রকল্পটি 1-বিট এসডি বাসের উপর ভিত্তি করবে।

ধাপ 7: এটি একসাথে রাখুন

এটা একসাথে রাখুন
এটা একসাথে রাখুন
এটা একসাথে রাখুন
এটা একসাথে রাখুন
এটা একসাথে রাখুন
এটা একসাথে রাখুন

উপরের ছবিগুলি এই প্রকল্পে আমি যে পরীক্ষার প্ল্যাটফর্মটি ব্যবহার করছি তা দেখায়। সাদা ব্রেডবোর্ড থ্রিডি প্রিন্টেড, আপনি এটিকে থিভারিভার্সে ডাউনলোড করে প্রিন্ট করতে পারেন:

আপনার হাতে কোন হার্ডওয়্যার আছে তার উপর প্রকৃত সংযোগ নির্ভর করে।

এখানে সংযোগ সারসংক্ষেপ:

ESP32

Vcc -> LCD Vcc GND -> LCD GND GPIO 2 -> SD D0/MISO -> 1k resistor -> 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

Arduino IDE ডাউনলোড এবং ইনস্টল করুন যদি আপনি এখনও এটি না করেন:

www.arduino.cc/en/main/software

ESP32 সাপোর্ট

ESP32 সমর্থন যোগ করার জন্য ইনস্টলেশন নির্দেশাবলী অনুসরণ করুন যদি আপনি এটি এখনও না করেন:

github.com/espressif/arduino-esp32

Arduino_GFX লাইব্রেরি

সর্বশেষ Arduino_GFX লাইব্রেরি ডাউনলোড করুন: ("ক্লোন বা ডাউনলোড করুন" -> "ZIP ডাউনলোড করুন" টিপুন)

github.com/moononournation/Arduino_GFX

Arduino IDE তে লাইব্রেরি আমদানি করুন। (Arduino IDE "স্কেচ" মেনু -> "লাইব্রেরি অন্তর্ভুক্ত করুন" -> ". ZIP লাইব্রেরি যোগ করুন" -> ডাউনলোড করা ZIP ফাইল নির্বাচন করুন)

ESP8266 অডিও

সর্বশেষ ESP8266 অডিও লাইব্রেরি ডাউনলোড করুন: ("ক্লোন বা ডাউনলোড করুন" -> "ZIP ডাউনলোড করুন" টিপুন)

github.com/earlephilhower/ESP8266Audio

Arduino IDE তে লাইব্রেরি আমদানি করুন। (Arduino IDE "স্কেচ" মেনু -> "লাইব্রেরি অন্তর্ভুক্ত করুন" -> ". ZIP লাইব্রেরি যোগ করুন" -> ডাউনলোড করা ZIP ফাইল নির্বাচন করুন)

RGB565_video নমুনা কোড

সর্বশেষ RGB565_video নমুনা কোড ডাউনলোড করুন: ("ক্লোন বা ডাউনলোড" -> "ZIP ডাউনলোড করুন" টিপুন)

github.com/moononournation/RGB565_video

এসডি কার্ড ডেটা

এসডি কার্ডে রূপান্তরিত ফাইলগুলি অনুলিপি করুন এবং এলসিডি কার্ড স্লটে ertোকান

কম্পাইল করুন এবং আপলোড করুন

  1. Arduino IDE তে SDMMC_MJPEG_video_PCM_audio_dualSPI_multitask.ino খুলুন
  2. আপনি যদি ILI9225 ব্যবহার না করেন, তাহলে ক্লাসের নাম সংশোধন করতে নতুন ক্লাস কোড (প্রায় line৫ লাইন) পরিবর্তন করুন
  3. Arduino IDE "আপলোড" বোতাম টিপুন
  4. আপনি যদি প্রোগ্রামটি আপলোড করতে ব্যর্থ হন তবে ESP32 GPIO 2 এবং SD D0/MISO এর মধ্যে সংযোগ বিচ্ছিন্ন করার চেষ্টা করুন
  5. যদি আপনি অরিয়েন্টেশন সঠিক না পান, নতুন ক্লাস কোডে "ঘূর্ণন" মান (0-3) পরিবর্তন করুন
  6. যদি প্রোগ্রামটি ভালভাবে চলে তাহলে আপনি SDMMC_* দিয়ে অন্য নমুনা শুরু করার চেষ্টা করতে পারেন
  7. যদি আপনার এসডি কার্ড স্লট না থাকে বা আপনার FFmpeg ইনস্টল না থাকে, আপনি এখনও SPIFFS_* উদাহরণ চেষ্টা করতে পারেন

ধাপ 9: বেঞ্চমার্ক

মাপকাঠি
মাপকাঠি

এখানে বিভিন্ন ভিডিও (220x176) এবং অডিও (44100 মেগাহার্টজ) ফরম্যাটের পারফরম্যান্সের সারাংশ দেওয়া হল:

বিন্যাস ফ্রেম প্রতি সেকেন্ড (fps)
MJPEG + PCM 30
15
RGB565 + PCM 9
MJPEG + MP3 24

বিঃদ্রঃ:

  • এমজেপিইজি + পিসিএম উচ্চতর এফপিএস পৌঁছতে পারে তবে এটি 30 এফপিএসের চেয়ে ছোট স্ক্রিনে অপ্রয়োজনীয় খেলা
  • RGB565 এর জন্য ডিকোড প্রক্রিয়ার প্রয়োজন হয় না কিন্তু এসডি, 4-বিট এসডি বাস এবং দ্রুত এসডি কার্ড থেকে ডাটা লোড করার সময় ডাটা সাইজ অনেক বড় এবং অনেক বেশি সময় ব্যয় হয় (বুনো অনুমান প্রায় 12 fps এ পৌঁছতে পারে)
  • এমপি 3 ডিকোড প্রক্রিয়াটি এখনও অপ্টিমাইজ করা হয়নি, এটি এখন এমপিথ্রি ডিকোডের জন্য কোর 0 এবং ভিডিও চালানোর জন্য কোর 1 উৎসর্গ করা হয়েছে

ধাপ 10: খুশি বাজানো

খুশি বাজানো!
খুশি বাজানো!

এখন আপনি আপনার ইএসপি 32 এর সাথে ভিডিও এবং অডিও চালাতে পারেন, এটি অনেক সম্ভাবনা খুলে দিয়েছে!

আমি মনে করি আমি একটি ছোট মদ টিভি পরে তৈরি করব …

প্রস্তাবিত: