Isi kandungan:
- Langkah 1: Ciri & Batasan ESP32
- Langkah 2: Format Video
- Langkah 3: Format Audio
- Langkah 4: Penukaran Format
- Langkah 5: Penyediaan Perkakasan
- Langkah 6: Antara Muka SD
- Langkah 7: Masukkan Bersama
- Langkah 8: Program
- Langkah 9: Tanda Aras
- Langkah 10: Selamat Bermain
Video: Mainkan Video Dengan ESP32: 10 Langkah (dengan Gambar)
2024 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2024-01-31 10:23
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
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
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
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
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
- Buka SDMMC_MJPEG_video_PCM_audio_dualSPI_multitask.ino di Arduino IDE
- Sekiranya anda tidak menggunakan ILI9225, ubah kod kelas baru (sekitar baris 35) untuk membetulkan nama kelas
- Tekan butang "Muat naik" IDE Arduino
- Sekiranya anda gagal memuat naik program, cuba lepaskan sambungan antara ESP32 GPIO 2 dan SD D0 / MISO
- Sekiranya anda mendapati orientasi tidak betul, ubah nilai "putaran" (0-3) dalam kod kelas baru
- Sekiranya program berjalan dengan baik, anda boleh mencuba contoh lain dengan SDMMC_ *
- Sekiranya anda tidak mempunyai slot kad SD atau tidak memasang FFmpeg, anda masih boleh mencuba contoh SPIFFS_ *
Langkah 9: 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
Sekarang anda boleh memainkan video dan audio dengan ESP32 anda, ia membuka banyak kemungkinan!
Saya fikir saya akan membuat TV vintaj kecil kemudian …
Disyorkan:
Bunyi Mainkan MP3 Dinding FX: 12 Langkah (dengan Gambar)
MP3 Playing Sound FX Wall: Buat dinding suara yang menyeronokkan dan interaktif yang memainkan Mp3 dengan sentuhan mudah! Apa yang anda buat dengan dinding kosong? Anda boleh menambah beberapa gambar yang bagus? Atau tutup dengan tanaman rumah yang berwarna-warni. Kami juga pernah melihat beberapa orang menyembunyikan dinding kosong di belakang buku
Mainkan CD Tanpa Pemain CD, Menggunakan AI dan YouTube: 10 Langkah (dengan Gambar)
Mainkan CD Tanpa Pemain CD, Menggunakan AI dan YouTube: Ingin memainkan CD anda tetapi tidak mempunyai pemain CD lagi? Tidak sempat merobek CD anda? Merobeknya tetapi fail tidak tersedia apabila diperlukan? Tidak ada masalah. Biarkan AI (kecerdasan buatan) mengenal pasti CD anda, dan YouTube memainkannya! Saya menulis aplikasi Android
Mainkan Muzik Dengan Arduino !: 5 Langkah (dengan Gambar)
Mainkan Muzik Dengan Arduino !: Dalam instruksional ini, saya akan menunjukkan kepada anda bagaimana saya memainkan muzik menggunakan modul Arduino UNO dan SD Card. Kami akan menggunakan Komunikasi SPI. Mari bermula
Mainkan Video ke Belakang Menggunakan Pemain Pantas: 5 Langkah
Mainkan Video Mundur Menggunakan Pemain Quicktime: Ini adalah helah paling dahsyat abad ini. Instructable ini menunjukkan cara mudah untuk memainkan video ke belakang tanpa memuat turun program yang cerdik (jika anda tidak mempunyai masa cepat anda memerlukannya.) lakukan dengan projek itu tetapi saya perlukan
Mainkan Apa sahaja Dari NES ke Xbox Dengan Skittlespider A.T.S Aka "The Contraption": 11 Langkah (dengan Gambar)
Mainkan Apa sahaja Dari NES ke Xbox Dengan Skittlespider A.T.S Aka "The Contraption": Instructable ini adalah untuk Skittlespider A.T.S (All Together System) yang juga dikenali sebagai " The Contraption " Projek ini ternyata lebih sukar daripada yang saya jangkakan. Dalam beberapa cara, lebih mudah juga, jadi saya tidak boleh mengatakan bahawa ini adalah keseluruhan projek yang sukar atau mudah