Isi kandungan:

Mainkan Video Dengan ESP32: 10 Langkah (dengan Gambar)
Mainkan Video Dengan ESP32: 10 Langkah (dengan Gambar)

Video: Mainkan Video Dengan ESP32: 10 Langkah (dengan Gambar)

Video: Mainkan Video Dengan ESP32: 10 Langkah (dengan Gambar)
Video: ESP32 CAM dalam 10 Menit - Cara Gampang Menggunakan ESP32 Cam dengan Arduino IDE 2024, Julai
Anonim
Mainkan Video Dengan ESP32
Mainkan Video Dengan ESP32

Instructables ini menunjukkan sesuatu tentang bermain video dan audio dengan ESP32.

Langkah 1: Ciri & Batasan ESP32

ciri-ciri

  • 4 bas SPI, 2 bas SPI tersedia untuk ruang pengguna, ia adalah SPI2 dan SPI3 atau dipanggil HSPI dan VSPI. Kedua-dua bas SPI boleh berjalan maksimum 80 MHz. Secara teorinya ia dapat mendorong 320x240 piksel warna 16-bit ke SPI LCD pada 60 fps, tetapi belum menghitung overhead waktu yang diperlukan untuk membaca dan menyahkod data video.
  • Bas SD 1-bit / 4-bit dapat menyambungkan kad SD dalam protokol asli
  • Output audio DAC dalaman I2S
  • lebih dari 100 KB RAM tersedia untuk penyangga video dan audio
  • Kuasa pemprosesan yang cukup adil untuk menyahkod JPEG (main Motion JPEG) dan pemampatan data LZW (main Animasi GIF)
  • Versi dwi-teras dapat membahagikan data baca dari kad SD, menyahkod dan mendorong ke SPI LCD menjadi pelbagai tugas selari dan meningkatkan prestasi main balik

Batasan

  • RAM dalaman tidak mencukupi untuk mempunyai buffer bingkai ganda untuk 320x240 dalam warna 16-bit, ia membatasi reka bentuk multitask. Ia dapat mengatasi sedikit dengan PSRAM luaran walaupun lebih perlahan daripada RAM dalaman
  • kuasa pemprosesan tidak mencukupi untuk menyahkod video mp4
  • tidak semua versi ESP32 mempunyai 2 teras, sampel multi-tugas hanya memberi manfaat pada versi dwi-teras

Ruj:

Langkah 2: Format Video

RGB565

Atau disebut warna 16-bit adalah format data mentah yang biasa digunakan pada komunikasi antara MCU dan paparan warna. Setiap piksel warna diwakili oleh nilai 16-bit, 5-bit pertama adalah nilai merah, berikut 6-bit adalah nilai hijau dan kemudian nilai biru 5-bit. Nilai 16-bit dapat membuat variasi warna 65536 sehingga disebut juga warna 64K. Jadi 1 minit 320x240 @ 30 fps video akan bersaiz: 16 * 320 * 240 * 30 * 60 = 2211840000 bit = 276480000 bait atau lebih dari 260 MB

Ini adalah format fail biasa di web sejak tahun 1990-an. Ini menghadkan variasi warna untuk setiap layar hingga 256 warna dan jangan sekali-kali menyimpan piksel yang sama warna dengan bingkai sebelumnya. Oleh itu, ia dapat mengurangkan ukuran fail, terutamanya apabila setiap bingkai animasi tidak mengubah terlalu banyak perincian. Mampatan LZW direka untuk dikodkan pada komputer tahun 1990-an, jadi ESP32 juga mempunyai daya pemprosesan yang cukup baik untuk menyahkodnya dalam masa nyata.

Gerakan JPEG

Atau disebut M-JPEG / MJPEG adalah format pemampatan video biasa untuk perkakasan rakaman video dengan daya pemprosesan terhad. Ini sebenarnya merupakan gabungan dari bingkai JPEG yang masih ada. Bandingkan dengan MPEG atau MP4, Motion JPEG tidak memerlukan teknik intensif ramalan interframe, setiap bingkai adalah bebas. Oleh itu, memerlukan lebih sedikit sumber untuk mengekod dan menyahkod.

Ruj:

en.wikipedia.org/wiki/List_of_monochrome_a…

en.wikipedia.org/wiki/GIF

en.wikipedia.org/wiki/Motion_JPEG

Langkah 3: Format Audio

PCM

Format data mentah untuk audio digital. ESP32 DAC menggunakan kedalaman bit 16-bit, yang bermaksud setiap data 16-bit mewakili isyarat analog sampel digital. Sebilangan besar audio video dan lagu biasanya menggunakan kadar sampel pada 44100 MHz, itu bermaksud 44100 isyarat analog sampel untuk setiap saat. Jadi, data mentah PCM audio mono 1 minit akan berukuran: 16 * 44100 * 60 = 42336000 bit = 5292000 bait atau lebih dari 5 MB. Saiz audio stereo akan berganda, iaitu lebih dari 10 MB

MP3

MPEG Layer 3 adalah format audio termampat yang banyak digunakan untuk pemampatan lagu sejak tahun 1990-an. Ini secara dramatik dapat mengurangkan ukuran fail menjadi di bawah sepersepuluh format PCM mentah

Ruj:

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

en.wikipedia.org/wiki/MP3

Langkah 4: Penukaran Format

Projek ini menggunakan FFmpeg menukar video ke dalam format yang boleh dibaca ESP32.

Sila muat turun dan pasang FFmpeg di laman rasmi mereka jika belum:

Tukar ke audio PCM

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

Tukar ke audio MP3

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

Tukar ke RGB565

ffmpeg -i input.mp4 -vf "fps = 9, skala = -1: 176: flags = lanczos, crop = 220: in_h: (in_w-220) / 2: 0" -c: v rawvideo -pix_fmt rgb565be 220_9fps. rgb

Tukar ke-g.webp

ffmpeg -i input.mp4 -vf "fps = 15, skala = -1: 176: flags = lanczos, crop = 220: in_h: (in_w-220) / 2: 0, split [s0] [s1]; [s0] palettegen [p]; [s1] [p] paletteuse "-loop -1 220_15fps.gif

Tukar ke Motion JPEG

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

Catatan:

FIFmpeg-g.webp" />

Langkah 5: Penyediaan Perkakasan

Penyediaan Perkakasan
Penyediaan Perkakasan

Papan Dev ESP ESP32

Mana-mana papan dev ESP32 dwi-teras mestilah baik, kali ini saya menggunakan TTGO ESP32-Micro.

Paparan Warna

Sebarang paparan warna yang disokong oleh Arduino_GFX semestinya baik, kali ini saya menggunakan papan pemecah ILI9225 dengan slot kad SD.

Anda boleh mendapatkan senarai paparan warna yang disokong Arduino_GFX di Github:

github.com/moononournation/Arduino_GFX

Kad SD

Mana-mana kad SD mesti ok, kali ini saya menggunakan SanDisk "speed normal" micro SD 8 GB dengan penyesuai SD.

Audio

Sekiranya anda ingin menggunakan fon kepala sahaja, sambungkan pin fon kepala ke pin 26 dan GND dapat mendengar audio. Atau anda boleh menggunakan penguat kecil untuk memainkan audio dengan pembesar suara.

Yang lain

Beberapa papan roti dan wayar papan roti

Langkah 6: Antara Muka SD

Antara Muka SD
Antara Muka SD
Antara Muka SD
Antara Muka SD

Papan pelarian LCD ILI9225 juga menyertakan pin pemecah slot SD crd. Ia boleh digunakan sebagai bas SPI atau bas SD 1-bit. Seperti yang dinyatakan dalam arahan sebelumnya, saya lebih suka menggunakan bas SD 1-bit, jadi projek ini akan menggunakan bas SD 1-bit.

Langkah 7: Masukkan Bersama

Letakkan Bersama
Letakkan Bersama
Letakkan Bersama
Letakkan Bersama
Letakkan Bersama
Letakkan Bersama

Gambar di atas menunjukkan platform ujian yang saya gunakan dalam projek ini. Papan roti putih dicetak 3D, anda boleh memuat turun dan mencetaknya di thingiverse:

Sambungan sebenar bergantung pada perkakasan yang anda miliki.

Berikut adalah ringkasan sambungan:

ESP32

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

Ruj:

Langkah 8: Program

Program
Program

Arduino IDE

Muat turun dan pasang Arduino IDE jika anda belum melakukannya:

www.arduino.cc/en/main/software

Sokongan ESP32

Ikuti Arahan Pemasangan untuk menambahkan sokongan ESP32 jika anda belum melakukannya:

github.com/espressif/arduino-esp32

Perpustakaan Arduino_GFX

Muat turun perpustakaan Arduino_GFX terkini: (tekan "Klon atau Muat turun" -> "Muat turun ZIP")

github.com/moononournation/Arduino_GFX

Import perpustakaan di Arduino IDE. (Arduino IDE "Sketch" Menu -> "Include Library" -> "Add. ZIP Library" -> pilih fail ZIP yang dimuat turun)

ESP8266Audio

Muat turun perpustakaan ESP8266Audio terkini: (tekan "Klon atau Muat turun" -> "Muat turun ZIP")

github.com/earlephilhower/ESP8266Audio

Import perpustakaan di Arduino IDE. (Arduino IDE "Sketch" Menu -> "Include Library" -> "Add. ZIP Library" -> pilih fail ZIP yang dimuat turun)

RGB565_video Contoh Kod

Muat turun kod contoh RGB565_video terkini: (tekan "Klon atau Muat turun" -> "Muat turun ZIP")

github.com/moononournation/RGB565_video

Data Kad SD

Salin fail yang ditukar ke kad SD dan masukkan ke dalam slot kad LCD

Susun & Muat Naik

  1. Buka SDMMC_MJPEG_video_PCM_audio_dualSPI_multitask.ino di Arduino IDE
  2. Sekiranya anda tidak menggunakan ILI9225, ubah kod kelas baru (sekitar baris 35) untuk membetulkan nama kelas
  3. Tekan butang "Muat naik" IDE Arduino
  4. Sekiranya anda gagal memuat naik program, cuba lepaskan sambungan antara ESP32 GPIO 2 dan SD D0 / MISO
  5. Sekiranya anda mendapati orientasi tidak betul, ubah nilai "putaran" (0-3) dalam kod kelas baru
  6. Sekiranya program berjalan dengan baik, anda boleh mencuba contoh lain dengan SDMMC_ *
  7. Sekiranya anda tidak mempunyai slot kad SD atau tidak memasang FFmpeg, anda masih boleh mencuba contoh SPIFFS_ *

Langkah 9: Tanda Aras

Tanda aras
Tanda aras

Berikut adalah ringkasan prestasi untuk format video (220x176) dan audio (44100 MHz) yang berbeza:

Format Bingkai sesaat (fps)
MJPEG + PCM 30
15
RGB565 + PCM 9
MJPEG + MP3 24

Catatan:

  • MJPEG + PCM dapat mencapai fps lebih tinggi tetapi tidak perlu dimainkan dalam skrin kecil lebih besar daripada 30 fps
  • RGB565 tidak memerlukan proses penyahkodan tetapi ukuran data terlalu besar dan banyak masa yang digunakan untuk memuatkan data dari SD, bus SD 4-bit dan kad SD yang lebih pantas dapat memperbaikinya sedikit (tekaan liar dapat mencapai sekitar 12 fps)
  • Proses penyahkodan MP3 belum dioptimumkan, kini mendedikasikan teras 0 untuk penyahkodan MP3 dan teras 1 untuk memainkan video

Langkah 10: Selamat Bermain

Selamat Bermain!
Selamat Bermain!

Sekarang anda boleh memainkan video dan audio dengan ESP32 anda, ia membuka banyak kemungkinan!

Saya fikir saya akan membuat TV vintaj kecil kemudian …

Disyorkan: