Sisukord:

Esita videot ESP32 abil: 10 sammu (piltidega)
Esita videot ESP32 abil: 10 sammu (piltidega)

Video: Esita videot ESP32 abil: 10 sammu (piltidega)

Video: Esita videot ESP32 abil: 10 sammu (piltidega)
Video: MKS Robin Nano v2.0 - motherboard basics for 3d Printing 2024, November
Anonim
Esitage videot ESP32 abil
Esitage videot ESP32 abil

Need juhendid näitavad midagi video ja heli esitamise kohta ESP32 abil.

Samm: ESP32 funktsioonid ja piirangud

Funktsioonid

  • 4 SPI -bussi, 2 SPI -bussi on kasutajaruumi jaoks saadaval, need on SPI2 ja SPI3 või nimetatakse HSPI ja VSPI. Mõlemad SPI siinid võivad töötada maksimaalselt 80 MHz. Teoreetiliselt suudab see tõsta 320x240 16-bitiseid värvipiksleid SPI LCD-le 60 kaadrit sekundis, kuid pole veel arvestanud videoandmete lugemiseks ja dekodeerimiseks kuluvat üldkulusid.
  • 1-bitine / 4-bitine SD-siin saab ühendada SD-kaardi algprotokollis
  • I2S sisemine DAC heliväljund
  • video- ja helipuhvri jaoks on saadaval üle 100 KB muutmälu
  • Piisavalt töötlemisvõimsus, et dekodeerida JPEG (esita Motion JPEG) ja LZW andmete pakkimine (esita animeeritud GIF)
  • Kahetuumaline versioon võib jagada lugemisandmed SD-kaardilt, dekodeerida ja SPI-LCD-le lükata paralleelseteks mitmeks ülesandeks ning suurendada taasesituse jõudlust

Piirangud

  • kuna sisemälu pole piisavalt, et 16-bitistes värvides 320x240 kahekordse kaadriga puhver oleks, piiras see multitegumtöötlust. Välise PSRAM -iga saab see natuke üle, kuigi see on aeglasem kui sisemine RAM
  • mp4 -video dekodeerimiseks pole piisavalt töötlemisvõimsust
  • mitte kõigil ESP32 versioonidel pole 2 tuuma, mitme ülesande näidis on kasulik ainult kahetuumalisel versioonil

Viide:

Samm: videovorming

RGB565

Või nn 16-bitine värv on toorandmete vorming, mida tavaliselt kasutatakse MCU ja värvilise ekraani vahelise suhtluse jaoks. Iga värvipikslit tähistab 16-bitine väärtus, esimene 5-bitine on punane väärtus, järgmine 6-bitine on roheline ja seejärel 5-bitine sinine väärtus. 16-bitine väärtus võib muuta 65536 värvivariatsiooni, nii et seda nimetatakse ka 64K värviks. 1 minuti pikkune 320x240@30 kaadrit sekundis video suurus on 16 * 320 * 240 * 30 * 60 = 2211840000 bitti = 276480000 baiti või üle 260 MB

Animeeritud GIF

See on veebis levinud failivorming alates 1990ndatest. See piirab iga ekraani värvide varieerumist kuni 256 värvi ja ei korda piksli salvestamist sama värviga kui eelmine kaader. Seega võib see faili suurust palju vähendada, eriti kui iga animatsioonikaader ei muuda liiga palju üksikasju. LZW -tihendus on kavandatud 1990ndate aastate arvutiga dekodeerimiseks, seega on ESP32 -l ka piisavalt õigust töötlemiseks, et seda reaalajas dekodeerida.

Liikuv JPEG

Või nimega M-JPEG / MJPEG on piiratud töötlemisvõimsusega videosalvestusriistvara tavaline videotihendusvorming. Tegelikult on see lihtsalt liikumatute JPEG -kaadrite ühendamine. Võrreldes MPEG või MP4 -ga, ei vaja Motion JPEG arvutuslikult intensiivset kaadritevahelise ennustamise tehnikat, iga kaader on sõltumatu. Seega nõuab see kodeerimiseks ja dekodeerimiseks vähem ressurssi.

Viide:

en.wikipedia.org/wiki/List_of_monochrome_a…

en.wikipedia.org/wiki/GIF

en.wikipedia.org/wiki/Motion_JPEG

Samm: helivorming

PCM

Toores andmevorming digitaalse heli jaoks. ESP32 DAC kasutab 16-bitist sügavust, mis tähendab, et kõik 16-bitised andmed esindavad digitaalset proovivõtu analoogsignaali. Enamik video- ja lauluheli kasutab tavaliselt proovivõtu sagedust 44100 MHz, see tähendab 44100 proovivõtu analoogsignaali iga sekundi kohta. Niisiis, 1 -minutilise monoheli PCM algandmete suurus on 16 * 44100 * 60 = 42336000 bitti = 5292000 baiti või üle 5 MB. Stereoheli suurus on kahekordne, st üle 10 MB

MP3

MPEG Layer 3 on tihendatud helivorming, mida on laialdaselt kasutatud laulude tihendamiseks alates 1990ndatest. See võib dramaatiliselt vähendada faili suurust alla kümnendiku toor-PCM-vormingust

Viide:

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

en.wikipedia.org/wiki/MP3

4. samm: vormindage teisendus

See projekt kasutab FFmpegi, teisendades video ESP32 loetavasse vormingusse.

Palun laadige alla ja installige FFmpeg nende ametlikule saidile, kui mitte:

Teisenda PCM -heliks

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

Teisenda MP3 -heliks

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

Teisendage RGB565 -ks

ffmpeg -i input.mp4 -vf "fps = 9, skaala = -1: 176: lipud = lanczos, kärpimine = 220: in_h: (in_w -220)/2: 0" -c: v rawvideo -pix_fmt rgb565be 220_9fps. rgb

Teisenda animeeritud-g.webp

ffmpeg -i input.mp4 -vf "fps = 15, skaala = -1: 176: lipud = lanczos, kärpimine = 220: in_h: (in_w -220)/2: 0, jagatud [s0] [s1]; [s0] palettegen [p]; [s1] [p] paletteuse "-loop -1 220_15fps.gif

Teisenda Motion JPEG -ks

ffmpeg -i input.mp4 -vf "fps = 30, skaala = -1: 176: lipud = lanczos, kärpimine = 220: in_h: (in_w -220)/2: 0" -q: v 9 220_30fps.mjpeg

Märge:

FFmpegi teisendatud animeeritud-g.webp" />

Samm: riistvara ettevalmistamine

Riistvara ettevalmistamine
Riistvara ettevalmistamine

ESP32 arendusplaat

Iga kahetuumaline ESP32 arendusplaat peaks olema korras, seekord kasutan TTGO ESP32-Micro.

Värviline ekraan

Kõik värvilised ekraanid, mida Arduino_GFX toetab, peaksid olema korras, seekord kasutan SD -kaardi pesaga ILI9225 eraldusplaati.

Arduino_GFX toetatud värviekraanide loendi leiate Githubist:

github.com/moononournation/Arduino_GFX

SD -kaart

Iga SD -kaart peaks olema korras, seekord kasutan SanDiski "tavalise kiirusega" 8 GB micro SD -d koos SD -adapteriga.

Heli

Kui soovite kasutada ainult kõrvaklappe, ühendage lihtsalt kõrvaklappide tihvtid tihvtiga 26 ja GND saab heli kuulata. Või saate kõlariga heli esitamiseks kasutada väikest võimendit.

Teised

Mõned leivalauad ja leivaplaadi juhtmed

6. samm: SD -liides

SD liides
SD liides
SD liides
SD liides

ILI9225 LCD eraldusplaat sisaldas ka SD crd pesa jaotusnõelu. Seda saab kasutada SPI-siinina või 1-bitise SD-siinina. Nagu minu eelmistes juhendites mainitud, eelistan kasutada 1-bitist SD-bussi, nii et see projekt põhineb 1-bitisel SD-siinil.

7. samm: pange see kokku

Pange see kokku
Pange see kokku
Pange see kokku
Pange see kokku
Pange see kokku
Pange see kokku

Ülaltoodud pildid näitavad testimisplatvormi, mida ma selles projektis kasutan. Valge leivalaud on 3D -trükitud, saate selle alla laadida ja printida saidilt thingiverse:

Tegelik ühendus sõltub sellest, milline riistvara teil käes on.

Siin on ühenduse kokkuvõte:

ESP32

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

Viide:

8. samm: programm

Programm
Programm

Arduino IDE

Laadige alla ja installige Arduino IDE, kui te pole seda veel teinud:

www.arduino.cc/en/main/software

ESP32 tugi

Kui te pole seda veel teinud, järgige ESP32 toe lisamiseks installijuhiseid:

github.com/espressif/arduino-esp32

Arduino_GFX raamatukogu

Laadige alla uusimad Arduino_GFX teegid: (vajutage "Kloonige või laadige alla" -> "Laadi alla ZIP")

github.com/moononournation/Arduino_GFX

Importige teegid Arduino IDE -s. (Arduino IDE "Sketch" menüü -> "Kaasa raamatukogu" -> "Lisa. ZIP -raamatukogu" -> valige allalaaditud ZIP -fail)

ESP8266Heli

Laadige alla uusimad ESP8266Audioteegid: (vajutage "Kloonige või laadige alla" -> "Laadi alla ZIP")

github.com/earlephilhower/ESP8266Audio

Importige Arduino IDE raamatukogud. (Arduino IDE "Sketch" menüü -> "Kaasa raamatukogu" -> "Lisa. ZIP -raamatukogu" -> valige allalaaditud ZIP -fail)

RGB565_video näidiskood

Laadige alla uusim RGB565_video näidiskood: (vajutage "Kloonige või laadige alla" -> "Laadi alla ZIP")

github.com/moononournation/RGB565_video

SD -kaardi andmed

Kopeerige teisendatud failid SD -kaardile ja sisestage LCD -kaardi pesasse

Kompileeri ja laadi üles

  1. Avage SDMMC_MJPEG_video_PCM_audio_dualSPI_multitask.ino Arduino IDE -s
  2. Kui te ILI9225 ei kasuta, muutke uue klassi kood (umbes 35. rida), et klassinimi oleks õige
  3. Vajutage Arduino IDE nuppu "Laadi üles"
  4. Kui teil ei õnnestunud programmi üles laadida, katkestage ühendus ESP32 GPIO 2 ja SD D0/MISO vahel
  5. Kui leiate, et suund ei ole õige, muutke uue klassi koodis pöörlemisväärtust (0-3)
  6. Kui programm töötab hästi, võite proovida teist näidist, alustades SDMMC_*
  7. Kui teil pole SD -kaardi pesa või FFmpeg pole installitud, võite siiski proovida SPIFFS_* näidet

9. samm: võrdlusalus

Võrdlusalus
Võrdlusalus

Siin on erinevate video (220x176) ja heli (44100 MHz) vormingu toimivuse kokkuvõte:

Vorming Kaader sekundis (kaadrit sekundis)
MJPEG + PCM 30
15
RGB565 + PCM 9
MJPEG + MP3 24

Märge:

  • MJPEG + PCM võib saavutada kõrgemat kaadrit sekundis, kuid see on tarbetu esitamine väikesel ekraanil, mis on suurem kui 30 kaadrit sekundis
  • RGB565 ei vaja dekodeerimisprotsessi, kuid andmemaht on liiga suur ja palju aega kulub andmete laadimisel SD-lt, 4-bitiselt SD-bussilt ja kiiremalt SD-kaardilt, mis võib seda veidi parandada (metsik oletus võib ulatuda umbes 12 kaadrini sekundis)
  • MP3 dekodeerimisprotsess pole veel optimeeritud, nüüd on see pühendatud tuumale 0 MP3 dekodeerimiseks ja tuumale 1 video esitamiseks

Samm: head mängimist

Head mängimist!
Head mängimist!

Nüüd saate oma ESP32 -ga mängida videot ja heli, see avas palju võimalusi!

Ma arvan, et teen hiljem väikese vintage -teleri…

Soovitan: