Daftar Isi:
- Langkah 1: Fitur & Batasan ESP32
- Langkah 2: Format Video
- Langkah 3: Format Audio
- Langkah 4: Format Konversi
- Langkah 5: Persiapan Perangkat Keras
- Langkah 6: Antarmuka SD
- Langkah 7: Satukan
- Langkah 8: Program
- Langkah 9: Tolok Ukur
- Langkah 10: Selamat Bermain
Video: Putar Video Dengan ESP32: 10 Langkah (dengan Gambar)
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-31 10:21
Instruksi ini menunjukkan sesuatu tentang memutar video dan audio dengan ESP32.
Langkah 1: Fitur & Batasan ESP32
Fitur
- 4 bus SPI, 2 bus SPI tersedia untuk ruang pengguna, yaitu SPI2 dan SPI3 atau disebut HSPI dan VSPI. Kedua bus SPI dapat berjalan paling banyak 80 MHz. Secara teoritis dapat mendorong 320x240 piksel warna 16-bit ke LCD SPI pada 60 fps, tetapi belum menghitung overhead waktu yang diperlukan untuk membaca dan mendekode data video.
- Bus SD 1-bit / 4-bit dapat menghubungkan kartu SD dalam protokol asli
- Output audio DAC internal I2S
- lebih dari 100 KB RAM tersedia untuk buffer video dan audio
- Kekuatan pemrosesan yang cukup adil untuk memecahkan kode JPEG (memutar Motion JPEG) dan kompresi data LZW (memutar-g.webp" />
- Versi dual-core dapat membagi membaca data dari kartu SD, decode dan push ke SPI LCD menjadi multi-tugas paralel dan meningkatkan kinerja pemutaran
Keterbatasan
- RAM internal tidak cukup untuk memiliki buffer bingkai ganda untuk 320x240 dalam warna 16-bit, itu membatasi desain multitask. Itu dapat mengatasi sedikit dengan PSRAM eksternal meskipun lebih lambat dari RAM internal
- tidak cukup daya pemrosesan untuk memecahkan kode video mp4
- tidak semua versi ESP32 memiliki 2 inti, sampel multi-tugas hanya menguntungkan pada versi dual-core
Referensi:
Langkah 2: Format Video
RGB565
Atau disebut warna 16-bit adalah format data mentah yang biasa digunakan pada komunikasi antara MCU dan tampilan 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 65536 variasi warna sehingga disebut juga 64K warna. Jadi video 1 menit 320x240@30 fps akan berukuran: 16 * 320 * 240 * 30 * 60 = 2211840000 bit = 276480000 byte atau lebih dari 260 MB
Ini adalah format file umum di web sejak 1990-an. Ini membatasi variasi warna untuk setiap layar hingga 256 warna dan tidak mengulangi penyimpanan piksel yang sama dengan warna bingkai sebelumnya. Jadi bisa banyak mengurangi ukuran file, terutama ketika setiap frame animasi tidak terlalu banyak mengubah detail. Kompresi LZW dirancang mampu diterjemahkan oleh komputer tahun 1990-an, sehingga ESP32 juga memiliki kekuatan pemrosesan yang cukup untuk memecahkan kode secara real time.
Gerakan JPEG
Atau disebut M-JPEG / MJPEG adalah format kompresi video umum untuk perangkat keras pengambilan video dengan daya pemrosesan terbatas. Ini sebenarnya hanya gabungan dari frame JPEG diam. Bandingkan dengan MPEG atau MP4, Motion JPEG tidak memerlukan teknik prediksi interframe yang intensif secara komputasi, setiap frame bersifat independen. Jadi itu membutuhkan lebih sedikit sumber daya untuk menyandikan dan mendekode.
Referensi:
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 16-bit, yang berarti setiap data 16-bit mewakili sinyal analog sampel digital. Kebanyakan video dan audio lagu umumnya menggunakan sample rate pada 44100 MHz, yang berarti 44100 sinyal analog yang disampel untuk setiap detiknya. Jadi, data mentah PCM audio mono 1 menit akan berukuran: 16 * 44100 * 60 = 42336000 bit = 5292000 byte atau lebih dari 5 MB. Ukuran audio stereo akan menjadi dua kali lipat, yaitu lebih dari 10 MB
MP3
MPEG Layer 3 adalah format audio terkompresi yang banyak digunakan untuk kompresi lagu sejak 1990-an. Ini dapat secara dramatis mengurangi ukuran file hingga di bawah sepersepuluh format PCM mentah
Referensi:
en.wikipedia.org/wiki/Pulse-code_modulatio…
en.wikipedia.org/wiki/MP3
Langkah 4: Format Konversi
Proyek ini menggunakan FFmpeg untuk mengubah video menjadi format yang dapat dibaca ESP32.
Silakan unduh dan instal FFmpeg di situs resmi mereka jika belum:
Konversikan ke audio PCM
ffmpeg -i input.mp4 -f u16be -acodec pcm_u16le -ar 44100 -ac 1 44100_u16le.pcm
Konversikan ke audio MP3
ffmpeg -i input.mp4 -ar 44100 -ac 1 -q:a 9 44100.mp3
Konversikan ke 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. rgb
Konversikan ke-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]palettegen[p];[s1][p]paletteuse" -loop -1 220_15fps.gif
Konversikan ke Motion 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
Catatan:
Langkah 5: Persiapan Perangkat Keras
Papan Pengembang ESP32
Papan dev ESP32 dual-core apa pun seharusnya baik-baik saja, kali ini saya menggunakan TTGO ESP32-Micro.
Tampilan Warna
Tampilan warna apa pun yang didukung Arduino_GFX seharusnya ok, kali ini saya menggunakan papan breakout ILI9225 dengan slot kartu SD.
Anda dapat menemukan daftar tampilan warna yang didukung Arduino_GFX di Github:
github.com/moononournation/Arduino_GFX
Kartu SD
Kartu SD apa pun harusnya baik-baik saja, kali ini saya menggunakan "kecepatan normal" SanDisk micro SD 8 GB dengan adaptor SD.
audio
Jika Anda ingin menggunakan headphone saja, cukup sambungkan pin headphone ke pin 26 dan GND dapat mendengarkan audio. Atau Anda dapat menggunakan amplifier kecil untuk memutar audio dengan speaker.
Yang lain
Beberapa papan tempat memotong roti dan kabel papan tempat memotong roti
Langkah 6: Antarmuka SD
Papan breakout LCD ILI9225 juga menyertakan pin breakout slot SD crd. Ini dapat digunakan sebagai bus SPI atau bus SD 1-bit. Seperti yang disebutkan dalam instruksi saya sebelumnya, saya lebih suka menggunakan bus SD 1-bit, jadi proyek ini akan didasarkan pada bus SD 1-bit.
Langkah 7: Satukan
Gambar di atas menunjukkan platform pengujian yang saya gunakan dalam proyek ini. Papan tempat memotong roti putih dicetak 3D, Anda dapat mengunduh dan mencetaknya di thingiverse:
Koneksi sebenarnya tergantung pada perangkat keras yang Anda miliki.
Berikut ringkasan koneksinya:
ESP32
Vcc -> LCD Vcc GND -> LCD GND GPIO 2 -> SD D0/MISO -> resistor 1k -> Vcc GPIO 14 -> SD CLK GPIO 15 -> SD CMD/MOSI GPIO 18 -> LCD SCK GPIO 19 -> LCD MISO GPIO 22 -> LED LCD GPIO 23 -> LCD MOSI GPIO 27 -> LCD DC/RS GPIO 33 -> LCD RST
Ref.:
Langkah 8: Program
Arduino IDE
Unduh dan instal Arduino IDE jika Anda belum melakukannya:
www.arduino.cc/en/main/software
Dukungan ESP32
Ikuti Petunjuk Instalasi untuk menambahkan dukungan ESP32 jika Anda belum melakukannya:
github.com/espressif/arduino-esp32
Perpustakaan Arduino_GFX
Unduh perpustakaan Arduino_GFX terbaru: (tekan "Klon atau Unduh" -> "Unduh ZIP")
github.com/moononournation/Arduino_GFX
Impor perpustakaan di Arduino IDE. (Menu "Sketsa" Arduino IDE -> "Sertakan Perpustakaan" -> "Tambahkan Perpustakaan. ZIP" -> pilih file ZIP yang diunduh)
ESP8266Audio
Unduh pustaka ESP8266Audio terbaru: (tekan "Klon atau Unduh" -> "Unduh ZIP")
github.com/earlephilhower/ESP8266Audio
Impor perpustakaan di Arduino IDE. (Menu "Sketsa" Arduino IDE -> "Sertakan Perpustakaan" -> "Tambahkan Perpustakaan. ZIP" -> pilih file ZIP yang diunduh)
Kode Sampel RGB565_video
Unduh kode sampel RGB565_video terbaru: (tekan "Klon atau Unduh" -> "Unduh ZIP")
github.com/moononournation/RGB565_video
Data Kartu SD
Salin file yang dikonversi ke kartu SD dan masukkan ke dalam slot kartu LCD
Kompilasi & Unggah
- Buka SDMMC_MJPEG_video_PCM_audio_dualSPI_multitask.ino di Arduino IDE
- Jika Anda tidak menggunakan ILI9225, ubah kode kelas baru (sekitar baris 35) untuk memperbaiki nama kelas
- Tekan tombol "Unggah" Arduino IDE
- Jika Anda gagal mengunggah program, coba lepaskan koneksi antara ESP32 GPIO 2 dan SD D0/MISO
- Jika Anda menemukan orientasi tidak benar, ubah nilai "rotasi" (0-3) dalam kode kelas baru
- Jika program berjalan dengan baik, Anda dapat mencoba sampel lain mulai dengan SDMMC_*
- Jika Anda tidak memiliki slot kartu SD atau tidak menginstal FFmpeg, Anda masih dapat mencoba contoh SPIFFS_*
Langkah 9: Tolok Ukur
Berikut adalah ringkasan performa untuk berbagai format video (220x176) dan audio (44100 MHz):
Format | Bingkai per detik (fps) |
MJPEG + PCM | 30 |
15 | |
RGB565 + PCM | 9 |
MJPEG + MP3 | 24 |
Catatan:
- MJPEG + PCM dapat mencapai fps yang lebih tinggi tetapi tidak perlu diputar di layar kecil yang lebih besar dari 30 fps
- RGB565 tidak memerlukan proses decode tetapi ukuran datanya terlalu besar dan banyak waktu yang dihabiskan untuk memuat data dari SD, bus SD 4-bit dan kartu SD yang lebih cepat dapat meningkatkannya sedikit (tebakan liar dapat mencapai sekitar 12 fps)
- Proses decode MP3 belum dioptimalkan, sekarang mendedikasikan core 0 untuk decode MP3 dan core 1 untuk memutar video
Langkah 10: Selamat Bermain
Sekarang Anda dapat memutar video dan audio dengan ESP32 Anda, itu membuka banyak kemungkinan!
Saya pikir saya akan membuat TV vintage kecil nanti…
Direkomendasikan:
Ubah Telepon Putar Menjadi Radio dan Perjalanan Melalui Waktu: 5 Langkah (dengan Gambar)
Ubah Telepon Putar Menjadi Radio dan Perjalanan Melalui Waktu: Saya meretas telepon putar menjadi radio! Angkat telepon, pilih negara dan satu dekade, dan dengarkan musik yang bagus!Cara kerjanyaPonsel putar ini memiliki komputer mikro (Raspberry Pi), yang berkomunikasi dengan radiooooo.com, radio web. NS
Meja Putar Jam Tangan: 8 Langkah (dengan Gambar)
Turntable Jam Tangan: Menggores catatan sangat menyenangkan, bahkan jika Anda bukan seorang turntablist. Tidakkah Anda berharap bisa menjatuhkan ketukan dan menggaruk ke mana pun Anda pergi? Nah sekarang Anda bisa; jadilah Pahlawan DJ dengan turntable jam tangan! Menggunakan 2 kartu ucapan yang dapat direkam dan beberapa
Minivac 601 (Versi 1.0) Saklar Putar Bermotor: 15 Langkah (dengan Gambar)
Minivac 601 (Versi 1.0) Saklar Putar Bermotor: Ini adalah tindak lanjut yang dijanjikan untuk Replika Minivac 601 saya (Versi 0.9) yang Dapat Diinstruksikan. Ini datang bersama lebih cepat dari yang diantisipasi dan saya cukup senang dengan hasilnya. Panel Input-Output Desimal yang dijelaskan di sini adalah pengganti drop-in untuk
Meja Putar Vertikal Desain Kustom: 15 Langkah (dengan Gambar)
Meja Putar Vertikal Desain Kustom: Saya bukan ahli dalam segala hal yang berhubungan dengan audio, apalagi turntable. Oleh karena itu, tujuan dari proyek ini bukanlah untuk menghasilkan audio dengan kualitas terbaik dan output berteknologi tinggi. Saya ingin membuat meja putar saya sendiri yang menurut saya merupakan karya desain yang menarik. dua
Putar Video Mundur Menggunakan Quicktime Player: 5 Langkah
Putar Video Mundur Menggunakan Quicktime Player: Ini adalah trik terbaik abad ini. Instruksi ini menunjukkan kepada Anda cara mudah memutar video mundur tanpa mengunduh program yang cerdik (jika Anda tidak memiliki waktu cepat, Anda akan memerlukannya.) Gambar tidak memiliki apa-apa lakukan dengan proyek tetapi saya membutuhkan