Talaan ng mga Nilalaman:
- Hakbang 1: Mga Tampok at Limitasyon ng ESP32
- Hakbang 2: Format ng Video
- Hakbang 3: Format ng Audio
- Hakbang 4: Pag-format ng Conversion
- Hakbang 5: Paghahanda ng Hardware
- Hakbang 6: SD Interface
- Hakbang 7: Isama Ito
- Hakbang 8: Programa
- Hakbang 9: Benchmark
- Hakbang 10: Maligayang Paglalaro
Video: Mag-play ng Video Sa ESP32: 10 Mga Hakbang (na may Mga Larawan)
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-31 10:25
Nagpapakita ang Mga Tagubilin na ito ng isang bagay tungkol sa pag-play ng video at audio sa ESP32.
Hakbang 1: Mga Tampok at Limitasyon ng ESP32
Mga Tampok
- 4 SPI bus, 2 SPI bus na magagamit para sa puwang ng gumagamit, ang mga ito ay SPI2 at SPI3 o tinatawag na HSPI at VSPI. Ang parehong mga SPI bus ay maaaring tumakbo nang higit sa 80 MHz. Sa teoretikal maaari nitong itulak ang 320x240 16-bit na mga pixel ng kulay sa SPI LCD sa 60 fps, ngunit hindi pa nito nabibilang ang oras na kinakailangan sa overhead para mabasa at mabaskode ang data ng video.
- Ang 1-bit / 4-bit SD bus ay maaaring kumonekta sa SD card sa katutubong protocol
- I2S panloob na output ng audio ng DAC
- higit sa 100 KB RAM na magagamit para sa video at audio buffer
- Sapat na kapangyarihan sa pagpoproseso upang ma-decode ang JPEG (play Motion JPEG) at LZW data compression (play Animated GIF)
- Maaaring i-split ng bersyon ng dual-core ang nabasa na data mula sa SD card, i-decode at itulak sa SPI LCD sa parallel multi-task at palakasin ang pagganap ng pag-playback
Mga limitasyon
- hindi sapat ang panloob na RAM upang magkaroon ng dobleng frame buffer para sa 320x240 sa 16-bit na kulay, nilimitahan nito ang disenyo ng multitask. Maaari itong mapagtagumpayan ng kaunti sa panlabas na PSRAM kahit na ito ay mas mabagal kaysa sa panloob na RAM
- walang sapat na kapangyarihan sa pagproseso upang ma-decode ang mp4 video
- hindi lahat ng bersyon ng ESP32 ay mayroong 2 core, ang sample na multi-task ay nakikinabang lamang sa bersyon ng dual-core
Ref.:
Hakbang 2: Format ng Video
RGB565
O tinatawag na 16-bit na kulay ay isang hilaw na format ng data na karaniwang ginagamit sa komunikasyon sa pagitan ng MCU at pagpapakita ng kulay. Ang bawat kulay na pixel ay kinakatawan ng isang 16-bit na halaga, ang unang 5-bit ay pulang halaga, ang pagsunod sa 6-bit ay berde na halaga at pagkatapos ay 5-bit na asul na halaga. Ang 16-bit na halaga ay maaaring gumawa ng pagkakaiba-iba ng kulay na 65536 kaya't tumawag din ito ng mga kulay na 64K. Kaya't ang 1 minutong 320x240 @ 30 fps na video ay sukat: 16 * 320 * 240 * 30 * 60 = 2211840000 bits = 276480000 bytes o higit sa 260 MB
Animated na GIF
Ito ay isang karaniwang format ng file sa web mula pa noong 1990s. Nililimitahan nito ang pagkakaiba-iba ng kulay para sa bawat screen hanggang sa 256 na kulay at huwag ulitin ang pag-iimbak ng pixel na kasing kulay ng nakaraang frame. Kaya't maaari nitong mabawasan ang laki ng file, lalo na kapag ang bawat frame ng animation ay hindi nagbabago ng labis na mga detalye. Ang compression ng LZW ay idinisenyo na may kakayahang mai-decode ng computer noong 1990, kaya't ang ESP32 ay mayroon ding sapat na kapangyarihan sa pagpoproseso upang ma-decode ito sa real time.
Paggalaw JPEG
O tinatawag na M-JPEG / MJPEG ay isang pangkaraniwang format ng compression ng video para sa hardware ng pagkuha ng video na may limitadong lakas sa pagpoproseso. Ito ay talagang isang pagsasama-sama pa rin ng mga frame ng JPEG. Paghambingin sa MPEG o MP4, Paggalaw JPEG hindi na kailangan ng computationally masinsinang pamamaraan ng interframe hula, bawat frame ay malaya. Kaya't nangangailangan ito ng mas kaunting mapagkukunan upang ma-encode at mag-decode.
Ref.:
en.wikipedia.org/wiki/List_of_monochrome_a…
en.wikipedia.org/wiki/GIF
en.wikipedia.org/wiki/Motion_JPEG
Hakbang 3: Format ng Audio
PCM
Isang hilaw na format ng data para sa digital audio. Gumagamit ang ESP32 DAC ng 16-bit na lalim na bit, nangangahulugang ang bawat 16-bit na data ay kumakatawan sa isang digital na sample ng analog signal. Karamihan sa audio ng video at kanta ay karaniwang gumagamit ng sample rate na 44100 MHz, nangangahulugan iyon ng 44100 na sampol na analog signal para sa bawat segundo. Kaya, 1 minutong mono audio PCM raw data ay susukat: 16 * 44100 * 60 = 42336000 bits = 5292000 bytes o higit sa 5 MB. Ang laki ng stereo audio ay magiging doble, ibig sabihin higit sa 10 MB
MP3
Ang MPEG Layer 3 ay isang naka-compress na audio format na malawakang ginagamit para sa compression ng kanta mula pa noong 1990s. Puwede nitong bawasan ang laki ng file sa ilalim ng ikasampu ng hilaw na format ng PCM
Ref.:
en.wikipedia.org/wiki/Pulse-code_modulatio…
en.wikipedia.org/wiki/MP3
Hakbang 4: Pag-format ng Conversion
Gumagamit ang proyektong ito ng FFmpeg i-convert ang video sa nababasa na format na ESP32.
Mangyaring i-download at i-install ang FFmpeg sa kanilang opisyal na site kung hindi pa:
I-convert sa audio ng PCM
ffmpeg -i input.mp4 -f u16be -acodec pcm_u16le -ar 44100 -ac 1 44100_u16le.pcm
I-convert sa MP3 audio
ffmpeg -i input.mp4 -ar 44100 -ac 1 -q: a 9 44100.mp3
I-convert sa 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
I-convert sa Animated GIF
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
I-convert sa 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
Tandaan:
Ang FFmpeg na na-convert na Animated-g.webp" />
Hakbang 5: Paghahanda ng Hardware
ESP32 Dev Board
Anumang dual-core ESP32 dev board ay dapat na ok, sa oras na ito ay gumagamit ako ng isang TTGO ESP32-Micro.
Pagpapakita ng Kulay
Anumang pagpapakita ng kulay na sinusuportahan ng Arduino_GFX ay dapat na ok, sa oras na ito ay gumagamit ako ng isang ILI9225 breakout board na may puwang ng SD card.
Maaari mong makita ang sinusuportahan ng Arduino_GFX na listahan ng display ng kulay sa Github:
github.com/moononournation/Arduino_GFX
SD Card
Anumang SD card ay dapat na ok, sa oras na ito ay gumagamit ako ng isang SanDisk "normal na bilis" 8 GB micro SD na may SD adapter.
Audio
Kung nais mong gumamit ng headphone lamang, ikonekta lamang ang mga headphone pin sa pin 26 at makikinig ang GND ng audio. O maaari kang gumamit ng isang maliit na amplifier upang i-play ang audio sa speaker.
Ang iba pa
Ang ilang mga breadboard at wireboard wires
Hakbang 6: SD Interface
Ang ILI9225 LCD breakout board ay nagsama rin ng mga SD crd slot breakout pin. Maaari itong magamit bilang SPI bus o 1-bit SD bus. Tulad ng nabanggit sa aking nakaraang mga itinuturo, mas gusto ko ang paggamit ng 1-bit SD bus, kaya ang proyektong ito ay magbabase sa 1-bit SD bus.
Hakbang 7: Isama Ito
Ipinapakita ng mga larawan sa itaas ang platform ng pagsubok na ginagamit ko sa proyektong ito. Ang puting tinapay ay naka-print sa 3D, maaari mong i-download at i-print ito sa thingiverse:
Ang tunay na koneksyon ay nakasalalay sa aling mga hardware ang nasa kamay mo.
Narito ang buod ng koneksyon:
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
Ref.:
Hakbang 8: Programa
Arduino IDE
I-download at i-install ang Arduino IDE kung hindi mo pa ito nagagawa:
www.arduino.cc/en/main/software
Suporta ng ESP32
Sundin ang Mga Tagubilin sa Pag-install upang magdagdag ng suporta sa ESP32 kung hindi mo pa ito nagagawa:
github.com/espressif/arduino-esp32
Arduino_GFX Library
Mag-download ng pinakabagong mga aklatan ng Arduino_GFX: (pindutin ang "I-clone o I-download" -> "I-download ang ZIP")
github.com/moononournation/Arduino_GFX
Mag-import ng mga aklatan sa Arduino IDE. (Arduino IDE "Sketch" Menu -> "Isama ang Library" -> "Magdagdag. ZIP Library" -> piliin ang na-download na ZIP file)
ESP8266Audio
Mag-download ng pinakabagong mga aklatan ng ESP8266Audio: (pindutin ang "I-clone o I-download" -> "I-download ang ZIP")
github.com/earlephilhower/ESP8266Audio
Mag-import ng mga aklatan sa Arduino IDE. (Arduino IDE "Sketch" Menu -> "Isama ang Library" -> "Idagdag. ZIP Library" -> piliin ang na-download na ZIP file)
RGB565_video Sample Code
Mag-download ng pinakabagong RGB565_video sample code: (pindutin ang "I-clone o I-download" -> "I-download ang ZIP")
github.com/moononournation/RGB565_video
Data ng SD Card
Kopyahin ang na-convert na mga file sa SD card at ipasok sa slot ng LCD card
Magtipon at Mag-upload
- Buksan ang SDMMC_MJPEG_video_PCM_audio_dualSPI_multitask.ino sa Arduino IDE
- Kung hindi ka gumagamit ng ILI9225, baguhin ang bagong code ng klase (sa paligid ng linya 35) upang itama ang pangalan ng klase
- Pindutin ang pindutan ng "Mag-upload" ng Arduino IDE
- Kung nabigo kang i-upload ang programa, subukang tanggalin ang koneksyon sa pagitan ng ESP32 GPIO 2 at SD D0 / MISO
- Kung nakita mong hindi tama ang oryentasyon, baguhin ang halagang "pag-ikot" (0-3) sa bagong code ng klase
- Kung tumatakbo nang maayos ang programa maaari mong subukan ang iba pang sample na magsimula sa SDMMC_ *
- Kung wala kang puwang ng SD card o wala kang naka-install na FFmpeg, maaari mo pa ring subukan ang halimbawa ng SPIFFS_ *
Hakbang 9: Benchmark
Narito ang buod ng pagganap para sa iba't ibang format ng video (220x176) at audio (44100 MHz):
Format | Frame bawat segundo (fps) |
MJPEG + PCM | 30 |
15 | |
RGB565 + PCM | 9 |
MJPEG + MP3 | 24 |
Tandaan:
- Ang MJPEG + PCM ay maaaring umabot sa mas mataas na fps ngunit hindi kinakailangan ang pag-play sa isang maliit na screen na mas malaki sa 30 fps
- Ang RGB565 ay hindi nangangailangan ng proseso ng pag-decode ngunit ang laki ng data ay masyadong malaki at maraming oras na natupok sa paglo-load ng data mula sa SD, 4-bit SD bus at mas mabilis na SD card ay maaaring mapabuti ito nang kaunti (ang ligaw na hula ay maaaring umabot sa paligid ng 12 fps)
- Ang proseso ng pag-decode ng MP3 ay hindi pa na-optimize, nakatuon ngayon ang core 0 para sa MP3 decode at core 1 para sa pag-play ng video
Hakbang 10: Maligayang Paglalaro
Ngayon ay maaari mo nang i-play ang video at audio sa iyong ESP32, na-unlock ang maraming mga posibilidad!
Sa palagay ko ay gagawa ako ng isang maliit na maliit na TV sa TV mamaya …
Inirerekumendang:
Mag-ukit ng isang Circuit Board Na May Mga Pantustos sa Kusina: 6 na Hakbang (na may Mga Larawan)
Mag-ukit ng isang Circuit Board Na Mayroong Mga Pantustos sa Kusina: Habang nag-tinker ka sa mga proyekto sa electronics, mabilis mong mapagtanto na mas kumplikado ang mga ito, mas mahirap silang magkakasama. Karaniwan nang nangangahulugan ito ng paglikha ng pugad ng daga ng mga indibidwal na wires, na maaaring malaki at mahirap i-troubleshoot.
Paano Mag-disassemble ng isang Computer Na May Madaling Hakbang at Mga Larawan: 13 Hakbang (na may Mga Larawan)
Paano Mag-disassemble ng isang Computer Na May Madaling Mga Hakbang at Larawan: Ito ay isang tagubilin tungkol sa kung paano i-disassemble ang isang PC. Karamihan sa mga pangunahing sangkap ay modular at madaling matanggal. Gayunpaman mahalaga na maging maayos ka tungkol dito. Makakatulong ito upang maiwasan ka sa pagkawala ng mga bahagi, at sa paggawa din ng muling pagsasama
Paano Mag-hack at Mag-upgrade ng isang Rigol DS1054Z Digital Oscilloscope: 5 Hakbang (na may Mga Larawan)
Paano Mag-hack at Mag-upgrade ng isang Rigol DS1054Z Digital Oscilloscope: Ang Rigol DS1054Z ay isang tanyag, antas ng entry na 4-channel na Digital Storage Oscilloscope. Nagtatampok ito ng isang real-time na rate ng sample ng hanggang sa 1 GSa / s at isang bandwidth na 50 MHz. Ang partikular na malalaking nagpapakita ng kulay na TFT ay napakadaling basahin. Salamat sa isang sa
Paano Mag-alis ng Mga Logo Mula sa Iyong PDA / Cell Phone Na May Asukal: 4 na Hakbang (na may Mga Larawan)
Paano Mag-alis ng Mga Logo Mula sa Iyong PDA / Cell Phone Na May Asukal: Mangyaring huwag subukan ito kung hindi ka sigurado tungkol sa paglalagay ng iyong telepono sa kaunting panganib … hindi ko maaayos ang mga telepono … (Bagaman hindi dapat magkaroon ng anumang pinsala dahil medyo madali ito) i-updateNOTE: Hindi ito gagana sa mga plastic cover! Ang asukal ay mag-iiwan ng gasgas
Buuin ang Iyong Sariling Butler Robot !!! - Tutorial, Mga Larawan, at Video: 58 Mga Hakbang (na may Mga Larawan)
Buuin ang Iyong Sariling Butler Robot !!! - Tutorial, Mga Larawan, at Video: EDIT: Higit pang impormasyon sa aking mga proyekto suriin ang aking bagong website: narobo.com Gumagawa din ako ng pagkonsulta para sa robotics, mechatronics, at mga espesyal na epekto na proyekto / produkto. Suriin ang aking website - narobo.com para sa higit pang mga detalye. Nais ng bawat isa ang isang butler robot na nakikipag-usap sa