Përmbajtje:

Luani video me ESP32: 10 hapa (me fotografi)
Luani video me ESP32: 10 hapa (me fotografi)

Video: Luani video me ESP32: 10 hapa (me fotografi)

Video: Luani video me ESP32: 10 hapa (me fotografi)
Video: How to user Makerfabs ESP32 3.5" TFT Capacitive Touch with Camera 2024, Nëntor
Anonim
Luani video me ESP32
Luani video me ESP32

Ky udhëzues tregon diçka në lidhje me luajtjen e videos dhe zërit me ESP32.

Hapi 1: Karakteristikat dhe Kufizimet ESP32

Karakteristikat

  • 4 autobus SPI, 2 autobus SPI të disponueshëm për hapësirën e përdoruesit, ato janë SPI2 dhe SPI3 ose quhen HSPI dhe VSPI. Të dy autobusët SPI mund të funksionojnë më së shumti 80 MHz. Teorikisht mund të shtyjë pixel me ngjyra 320x240 16-bit në SPI LCD me 60 fps, por ende nuk e ka llogaritur kohën e nevojshme për leximin dhe deshifrimin e të dhënave video.
  • Autobusi SD 1-bit / 4-bit mund të lidhë kartën SD në protokollin amë
  • Dalja audio e brendshme DAC I2S
  • mbi 100 KB RAM në dispozicion për tampon video dhe audio
  • Fuqi mjaft e drejtë përpunimi për të deshifruar JPEG (luaj Motion JPEG) dhe kompresim të të dhënave LZW (luaj-g.webp" />
  • Versioni me dy bërthama mund të ndajë të dhënat e lexuara nga karta SD, të deshifrojë dhe shtyjë në SPI LCD në shumë detyra paralele dhe të rrisë performancën e riprodhimit

Kufizimet

  • RAM i brendshëm i pamjaftueshëm për të pasur tampon me kornizë të dyfishtë për 320x240 në ngjyrë 16-bit, ai kufizoi modelin e shumë detyrave. Mund të kapërcejë pak me PSRAM të jashtëm edhe pse është më i ngadalshëm se RAM i brendshëm
  • nuk ka fuqi të mjaftueshme përpunuese për të deshifruar video mp4
  • jo të gjitha versionet ESP32 kanë 2 bërthama, mostra me shumë detyra përfiton vetëm në versionin me dy bërthama

Ref.:

Hapi 2: Formati i videos

RGB565

Ose e quajtur ngjyra 16-bit është një format i papërpunuar i të dhënave që përdoret zakonisht në komunikimin midis MCU dhe ekranit me ngjyra. Çdo piksel ngjyrash përfaqësohet nga një vlerë 16-bit, 5-biti i parë është vlera e kuqe, pas 6-bitësh është vlera e gjelbër dhe më pas vlera blu 5-bit. Vlera 16-bit mund të bëjë 65536 ndryshim ngjyrash, kështu që quhet edhe ngjyra 64K. Pra, 1 minutë 320x240@30 fps video do të ketë madhësi: 16 * 320 * 240 * 30 * 60 = 2211840000 bit = 276480000 bajt ose mbi 260 MB

Ky është një format i zakonshëm skedar në internet që nga vitet 1990. Ai kufizon ndryshimin e ngjyrave për secilin ekran deri në 256 ngjyra dhe nuk e përsërit ruajtjen e pikselit në të njëjtën ngjyrë si korniza e mëparshme. Kështu që mund të zvogëlojë shumë madhësinë e skedarit, veçanërisht kur çdo kornizë animacioni nuk ndryshon shumë detaje. Kompresimi LZW është projektuar i aftë të deshifrojë nga kompjuteri i viteve 1990, kështu që ESP32 gjithashtu ka fuqi të mjaftueshme përpunuese për ta deshifruar atë në kohë reale.

Lëvizja JPEG

Ose i quajtur M-JPEG / MJPEG është një format i zakonshëm i kompresimit të videove për pajisjet e regjistrimit të videos me fuqi të kufizuar përpunimi. Në fakt është thjesht një bashkim i kornizave ende JPEG. Krahasoni me MPEG ose MP4, Motion JPEG nuk ka nevojë për teknikë llogaritëse intensive të parashikimit ndërkufitar, çdo kornizë është e pavarur. Kështu që kërkon më pak burime për të koduar dhe deshifruar.

Ref.:

en.wikipedia.org/wiki/List_of_monochrome_a…

en.wikipedia.org/wiki/GIF

en.wikipedia.org/wiki/Motion_JPEG

Hapi 3: Formati i audios

PCM

Një format i papërpunuar i të dhënave për audio dixhitale. ESP32 DAC përdor thellësi 16-bit, që do të thotë se çdo e dhënë 16-bit përfaqëson një sinjal analog të mostrës dixhitale. Shumica e audios video dhe këngë zakonisht përdorin normën e mostrës në 44100 MHz, që do të thotë 44100 sinjal analog të mostrës për çdo sekondë. Pra, 1 minutë të dhëna mono audio PCM të papërpunuara do të kenë madhësi: 16 * 44100 * 60 = 42336000 bit = 5292000 byte ose mbi 5 MB. Madhësia e audios stereo do të jetë e dyfishtë, pra mbi 10 MB

MP3

MPEG Layer 3 është një format audio i ngjeshur i përdorur gjerësisht për kompresimin e këngëve që nga vitet 1990. Mund të zvogëlojë në mënyrë dramatike madhësinë e skedarit në nën një të dhjetën e formatit të papërpunuar PCM

Ref.:

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

en.wikipedia.org/wiki/MP3

Hapi 4: Konvertimi i formatit

Ky projekt përdor FFmpeg për ta kthyer videon në format ESP32 të lexueshëm.

Ju lutemi shkarkoni dhe instaloni FFmpeg në faqen e tyre zyrtare nëse jo akoma:

Ktheni në audio PCM

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

Ktheni në audio MP3

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

Shndërrohuni në RGB565

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

Shndërrohuni në-g.webp

ffmpeg -i input.mp4 -vf "fps = 15, shkallë = -1: 176: flamuj = lanczos, kulture = 220: in_h: (in_w -220)/2: 0, ndarë [s0] [s1]; [s0] palettegen [p]; [s1] [p] paletteuse "-loop -1 220_15fps.gif

Shndërrohuni në Motion JPEG

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

Shënim:

GF e animuar e konvertuar nga FFmpeg mund të optimizohet më tej nga disa vegla në internet, mund të kërkoni optimizuesin-g.webp" />

Hapi 5: Përgatitja e harduerit

Përgatitja e harduerit
Përgatitja e harduerit

ESP32 Bordi i Zhvillimit

Çdo bord me dy bërthama ESP32 dev duhet të jetë në rregull, këtë herë unë jam duke përdorur një TTGO ESP32-Micro.

Ekran me ngjyra

Çdo ekran me ngjyra që mbështet Arduino_GFX duhet të jetë në rregull, këtë herë unë jam duke përdorur një tabelë shpërthimi ILI9225 me fole për kartën SD.

Listën e shfaqjes së ngjyrave të mbështetur nga Arduino_GFX mund ta gjeni në Github:

github.com/moononournation/Arduino_GFX

Kartë SD

Çdo kartë SD duhet të jetë në rregull, këtë herë unë jam duke përdorur një SanDisk "shpejtësi normale" 8 GB micro SD me përshtatës SD.

Audio

Nëse doni të përdorni vetëm kufje, thjesht lidhni kunjat e kufjeve në pin 26 dhe GND mund të dëgjojë tingullin. Ose mund të përdorni një përforcues të vogël për të luajtur audio me altoparlantin.

Të tjerët

Disa dërrasa buke dhe tela të bukës

Hapi 6: Ndërfaqja SD

Ndërfaqja SD
Ndërfaqja SD
Ndërfaqja SD
Ndërfaqja SD

Bordi i shpërthimit ILI9225 LCD gjithashtu përfshinte një kunj të shpërthimit të slot SD crd. Mund të përdoret si autobus SPI ose autobus SD 1-bit. Siç u përmend në udhëzimet e mia të mëparshme, unë preferoj të përdor autobus SD 1-bit, kështu që ky projekt do të bazohet në autobus 1-bit SD.

Hapi 7: Vendoseni së bashku

Vendoseni së bashku
Vendoseni së bashku
Vendoseni së bashku
Vendoseni së bashku
Vendoseni së bashku
Vendoseni së bashku

Fotografitë e mësipërme tregojnë platformën e testimit që po përdor në këtë projekt. Tabela e bardhë e bukës është e printuar 3D, mund ta shkarkoni dhe printoni në thingiverse:

Lidhja aktuale varet nga ajo pajisje që keni në dorë.

Këtu janë përmbledhjet e lidhjes:

ESP32

Vcc -> LCD Vcc GND -> LCD GND GPIO 2 -> SD D0/MISO -> 1k rezistencë -> 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.:

Hapi 8: Programi

Program
Program

Arduino IDE

Shkarkoni dhe instaloni Arduino IDE nëse nuk e keni bërë ende:

www.arduino.cc/en/main/software

Mbështetje ESP32

Ndiqni Udhëzimet e Instalimit për të shtuar mbështetjen ESP32 nëse nuk e keni bërë ende:

github.com/espressif/arduino-esp32

Biblioteka Arduino_GFX

Shkarkoni bibliotekat më të fundit të Arduino_GFX: (shtypni "Clone or Download" -> "Download ZIP")

github.com/moononournation/Arduino_GFX

Importoni biblioteka në Arduino IDE. (Menyja Arduino IDE "Sketch" -> "Përfshi Bibliotekën" -> "Shto Bibliotekën. ZIP" -> zgjidhni skedarin ZIP të shkarkuar)

ESP8266Audioja

Shkarkoni bibliotekat më të fundit ESP8266Audio: (shtypni "Clone or Download" -> "Download ZIP")

github.com/earlephilhower/ESP8266Audio

Importoni biblioteka në Arduino IDE. (Menyja Arduino IDE "Sketch" -> "Përfshi Bibliotekën" -> "Shto Bibliotekën. ZIP" -> zgjidhni skedarin ZIP të shkarkuar)

Kodi Shembull i RGB565_video

Shkarkoni kodin më të fundit RGB565_video: (shtypni "Clone or Download" -> "Download ZIP")

github.com/moononournation/RGB565_video

Të dhënat e kartës SD

Kopjoni skedarët e konvertuar në kartën SD dhe futeni në folenë e kartës LCD

Përpilo & Ngarko

  1. Hap SDMMC_MJPEG_video_PCM_audio_dualSPI_multitask.ino në Arduino IDE
  2. Nëse nuk jeni duke përdorur ILI9225, ndryshoni kodin e ri të klasës (rreth rreshtit 35) për të korrigjuar emrin e klasës
  3. Shtypni butonin Arduino IDE "Ngarko"
  4. Nëse nuk keni arritur të ngarkoni programin, provoni të shkëputni lidhjen midis ESP32 GPIO 2 dhe SD D0/MISO
  5. Nëse e gjeni orientimin jo të saktë, ndryshoni vlerën e "rrotullimit" (0-3) në kodin e ri të klasës
  6. Nëse programi funksionon mirë, mund të provoni fillimin e mostrës tjetër me SDMMC_*
  7. Nëse nuk keni slot për kartën SD ose nuk keni FFmpeg të instaluar, prapë mund të provoni shembullin SPIFFS_*

Hapi 9: Referimi

Pikë referimi
Pikë referimi

Këtu janë përmbledhjet e performancës për format të ndryshëm video (220x176) dhe audio (44100 MHz):

Format Korniza për sekondë (fps)
MJPEG + PCM 30
15
RGB565 + PCM 9
MJPEG + MP3 24

Shënim:

  • MJPEG + PCM mund të arrijë fps më të larta, por është lojë e panevojshme në një ekran të vogël më të madh se 30 fps
  • RGB565 nuk kërkon dekodim, por madhësia e të dhënave është shumë e madhe dhe konsumon shumë kohë për ngarkimin e të dhënave nga SD, autobusi SD 4-bit dhe karta SD më e shpejtë mund ta përmirësojë atë pak (supozimi i egër mund të arrijë rreth 12 fps)
  • Procesi i deshifrimit MP3 ende nuk është optimizuar, tani i dedikohet bërthamës 0 për deshifrim MP3 dhe bërthamës 1 për të luajtur video

Hapi 10: Luani me kënaqësi

Gëzuar Luajtja!
Gëzuar Luajtja!

Tani mund të luani video dhe audio me ESP32 tuaj, ai hapi shumë mundësi!

Unë mendoj se do të bëj një TV të vogël të cilësisë së mirë më vonë…

Recommended: