Kazalo:
- Korak: Funkcije in omejitve ESP32
- Korak: Video format
- 3. korak: Oblika zvoka
- 4. korak: Oblikujte pretvorbo
- 5. korak: Priprava strojne opreme
- Korak 6: Vmesnik SD
- 7. korak: Sestavite skupaj
- 8. korak: Program
- 9. korak: Primerjalno merilo
- 10. korak: Veselo igranje
Video: Predvajajte video z ESP32: 10 korakov (s slikami)
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:02
Ta navodila kažejo nekaj o predvajanju videa in zvoka z ESP32.
Korak: Funkcije in omejitve ESP32
Lastnosti
- 4 vodila SPI, 2 vodila SPI, ki sta na voljo za uporabniški prostor, sta SPI2 in SPI3 ali se imenujeta HSPI in VSPI. Oba vodila SPI lahko delujeta največ 80 MHz. Teoretično lahko potisne 16-bitne barvne slikovne pike 320x240 na SPI LCD pri 60 fps, vendar še ni upošteval časovnih stroškov, potrebnih za branje in dekodiranje video podatkov.
- 1-bitno / 4-bitno vodilo SD lahko poveže kartico SD v izvornem protokolu
- I2S notranji avdio izhod DAC
- za video in avdio vmesnik je na voljo več kot 100 KB RAM -a
- Dovolj poštena procesna moč za dekodiranje JPEG (predvajajte Motion JPEG) in stiskanje podatkov LZW (predvajajte animirani GIF)
- Dvojedrna različica lahko razdeli prebrane podatke s kartice SD, dekodira in potisne na SPI LCD v vzporedne večopravilne naloge ter poveča zmogljivost predvajanja
Omejitve
- premalo notranjega RAM-a, da bi imel vmesni pomnilnik z dvojnim okvirjem za 320x240 v 16-bitni barvi, je omejeval zasnovo večopravilnosti. Z zunanjim PSRAM -om lahko nekoliko premaga, čeprav je počasnejši od notranjega RAM -a
- premalo procesorske moči za dekodiranje videa mp4
- nimajo vse različice ESP32 2 jedra, večopravilni vzorec koristi le različici z dvema jedroma
Glej:
Korak: Video format
RGB565
Ali imenovana 16-bitna barva je surov format podatkov, ki se običajno uporablja pri komunikaciji med MCU in barvnim zaslonom. Vsak barvni piksel je predstavljen s 16-bitno vrednostjo, prvih 5-bit je rdeča vrednost, naslednja 6-bitna je zelena vrednost in nato 5-bitna modra vrednost. 16-bitna vrednost lahko povzroči barvno variacijo 65536, zato jo imenujemo tudi 64K barve. Tako bo 1 minutni video 320x240 pri 30 sličicah na sekundo velikosti videoposnetka: 16 * 320 * 240 * 30 * 60 = 2211840000 bitov = 276480000 bajtov ali več kot 260 MB
Animirani GIF
To je običajna oblika datotek v spletu od devetdesetih let prejšnjega stoletja. Omejuje barvno variacijo za vsak zaslon na največ 256 barv in ne ponavlja, da slikovno piko shrani v isti barvi kot prejšnji okvir. Tako lahko veliko zmanjša velikost datoteke, še posebej, če vsak okvir animacije ne spremeni preveč podrobnosti. Stiskanje LZW je zasnovano tako, da ga lahko dekodira računalnik iz devetdesetih let prejšnjega stoletja, zato ima tudi ESP32 dovolj poštene procesorske moči za njegovo dekodiranje v realnem času.
Motion JPEG
Ali pa se imenuje M-JPEG / MJPEG je običajna oblika stiskanja videa za strojno opremo za zajem videa z omejeno močjo obdelave. Pravzaprav gre preprosto za združevanje mirujočih okvirjev JPEG. Za primerjavo z MPEG ali MP4, Motion JPEG ne potrebuje računalniško intenzivne tehnike med kadriranja, vsak okvir je neodvisen. Zato za kodiranje in dekodiranje zahteva manj sredstev.
Ref.:
en.wikipedia.org/wiki/List_of_monochrome_a…
en.wikipedia.org/wiki/GIF
en.wikipedia.org/wiki/Motion_JPEG
3. korak: Oblika zvoka
PCM
Surov format podatkov za digitalni zvok. ESP32 DAC uporablja 16-bitno bitno globino, kar pomeni, da vsi 16-bitni podatki predstavljajo digitalni vzorčeni analogni signal. Večina zvoka za video in pesmi običajno uporablja frekvenco vzorčenja pri 44100 MHz, kar pomeni 44100 vzorčenega analognega signala za vsako sekundo. Tako bodo 1 -minutni mono avdio PCM surovi podatki velikosti: 16 * 44100 * 60 = 42336000 bitov = 5292000 bajtov ali več kot 5 MB. Velikost stereo zvoka bo dvojna, to je več kot 10 MB
MP3
MPEG Layer 3 je stisnjen zvočni format, ki se od leta 1990 široko uporablja za stiskanje pesmi. Lahko dramatično zmanjša velikost datoteke na manj kot eno desetino surovega formata PCM
Ref.:
en.wikipedia.org/wiki/Pulse-code_modulatio…
en.wikipedia.org/wiki/MP3
4. korak: Oblikujte pretvorbo
Ta projekt z uporabo FFmpeg pretvori video v ESP32 berljivo obliko.
Prenesite in namestite FFmpeg na njihovo uradno spletno mesto, če še ne:
Pretvorite v zvok PCM
ffmpeg -i vhod.mp4 -f u16be -acodec pcm_u16le -ar 44100 -ac 1 44100_u16le.pcm
Pretvorite v zvok MP3
ffmpeg -i vhod.mp4 -ar 44100 -ac 1 -q: a 9 44100.mp3
Pretvori v RGB565
ffmpeg -i vhod.mp4 -vf "fps = 9, merilo = -1: 176: zastave = lanczos, obrezovanje = 220: in_h: (in_w -220)/2: 0" -c: v rawvideo -pix_fmt rgb565be 220_9fps. rgb
Pretvori v animirani GIF
ffmpeg -i vhod.mp4 -vf "fps = 15, merilo = -1: 176: zastave = lanczos, obrezovanje = 220: in_h: (in_w -220)/2: 0, razcep [s0] [s1]; [s0] palettegen [p]; [s1] [p] paletteuse "-ool -1 220_15fps.gif
Pretvori v Motion JPEG
ffmpeg -i vhod.mp4 -vf "fps = 30, merilo = -1: 176: zastave = lanczos, obrezovanje = 220: in_h: (in_w -220)/2: 0" -q: v 9 220_30fps.mjpeg
Opomba:
Animirani GIF, pretvorjen v FFmpeg, je mogoče dodatno optimizirati z nekaterimi spletnimi orodji. Poiščite ga lahko v orodju za optimiziranje GIF
5. korak: Priprava strojne opreme
Razvojna plošča ESP32
Vsaka dvojedrna ESP32 dev plošča bi morala biti v redu, tokrat uporabljam TTGO ESP32-Micro.
Barvni zaslon
Vsak barvni zaslon, ki ga podpira Arduino_GFX, bi moral biti v redu, tokrat uporabljam odklopno ploščo ILI9225 z režo za kartico SD.
Seznam barvnih zaslonov, ki jih podpira Arduino_GFX, najdete na Githubu:
github.com/moononournation/Arduino_GFX
SD kartice
Vsaka kartica SD bi morala biti v redu, tokrat uporabljam SanDisk "normal speed" 8 GB micro SD s SD adapterjem.
Zvok
Če želite uporabljati samo slušalke, preprosto priključite nožice za slušalke na pin 26 in GND lahko posluša zvok. Lahko pa uporabite majhen ojačevalnik za predvajanje zvoka z zvočnikom.
Drugi
Nekaj ploščic in žic za plošče
Korak 6: Vmesnik SD
Odklopna plošča LCD ILI9225 vključuje tudi odmične zatiče za režo SD crd. Uporablja se lahko kot vodilo SPI ali 1-bitno vodilo SD. Kot sem že omenil v svojih prejšnjih navodilih, raje uporabljam 1-bitno vodilo SD, zato bo ta projekt temeljil na 1-bitnem vodilu SD.
7. korak: Sestavite skupaj
Zgornje slike prikazujejo preskusno platformo, ki jo uporabljam v tem projektu. Bela plošča je 3D natisnjena, lahko jo naložite in natisnete na thingiverse:
Dejanska povezava je odvisna od strojne opreme, ki jo imate pri roki.
Tu je povzetek povezave:
ESP32
Vcc -> LCD Vcc GND -> LCD GND GPIO 2 -> SD D0/MISO -> 1k upor -> 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
Glej:
8. korak: Program
Arduino IDE
Prenesite in namestite Arduino IDE, če tega še niste storili:
www.arduino.cc/en/main/software
Podpora za ESP32
Če tega še niste storili, sledite navodilom za namestitev, če tega še niste storili:
github.com/espressif/arduino-esp32
Knjižnica Arduino_GFX
Prenesite najnovejše knjižnice Arduino_GFX: (pritisnite "Clone or Download" -> "Download ZIP")
github.com/moononournation/Arduino_GFX
Uvozite knjižnice v Arduino IDE. (Arduino IDE "Sketch" Menu -> "Include Library" -> "Add. ZIP Library" -> izberite preneseno datoteko ZIP)
ESP8266Avdio
Prenesite najnovejše knjižnice ESP8266Audio: (pritisnite "Clone or Download" -> "Download ZIP")
github.com/earlephilhower/ESP8266Audio
Uvozite knjižnice v Arduino IDE. (Arduino IDE "Sketch" Menu -> "Include Library" -> "Add. ZIP Library" -> izberite preneseno datoteko ZIP)
RGB565_video vzorčna koda
Prenesite najnovejšo vzorčno kodo RGB565_video: (pritisnite "Clone or Download" -> "Download ZIP")
github.com/moononournation/RGB565_video
Podatki s kartice SD
Pretvorite datoteke na kartico SD in jih vstavite v režo za kartico LCD
Sestavite in naložite
- Odprite SDMMC_MJPEG_video_PCM_audio_dualSPI_multitask.ino v Arduino IDE
- Če ne uporabljate ILI9225, spremenite novo kodo razreda (okoli vrstice 35), da popravite ime razreda
- Pritisnite gumb "Naloži" Arduino IDE
- Če programa niste naložili, poskusite prekiniti povezavo med ESP32 GPIO 2 in SD D0/MISO
- Če ugotovite, da orientacija ni pravilna, spremenite vrednost "rotacije" (0-3) v novi kodi razreda
- Če se program dobro izvaja, lahko poskusite z drugim vzorčnim zagonom s SDMMC_*
- Če nimate reže za kartico SD ali nimate nameščenega FFmpeg, lahko še vedno poskusite s primerom SPIFFS_*
9. korak: Primerjalno merilo
Tu je povzetek uspešnosti za različne video (220x176) in zvočne (44100 MHz) oblike:
Oblika | Sličic na sekundo (fps) |
MJPEG + PCM | 30 |
15 | |
RGB565 + PCM | 9 |
MJPEG + MP3 | 24 |
Opomba:
- MJPEG + PCM lahko doseže višje fps, vendar je nepotrebno predvajanje na majhnem zaslonu, večjem od 30 fps
- RGB565 ne potrebuje dekodiranja, vendar je velikost podatkov prevelika in veliko časa porabljenega pri nalaganju podatkov s SD-ja, 4-bitnega vodila SD in hitrejše kartice SD lahko to nekoliko izboljša (ugibanje lahko doseže okoli 12 fps)
- Postopek dekodiranja MP3 še ni optimiziran, zdaj je namenjen jedru 0 za dekodiranje MP3 in jedru 1 za predvajanje videa
10. korak: Veselo igranje
Zdaj lahko s svojim ESP32 predvajate video in zvok, odklenil je številne možnosti!
Mislim, da bom kasneje naredil majhen starinski televizor …
Priporočena:
Predvajajte FM radio na dolgi rok z Rashpberry Pi SAMO !!: 6 korakov
Predvajajte FM radio na dolgi rok z Rashpberry Pi SAMO !!: Vsi, da, vrnil sem se k " poučevanju ", preteče veliko časa od zadnjega pouka, ki sem ga napisal, vendar sem se učil več za " poučevanje " vas več. Torej začnimo. Mnogi od vas razmišljajo o mudulih in drugih sestavnih delih, ki
Predvajajte Bluetooth na Sonosu z uporabo Raspberry Pi: 25 korakov
Predvajanje Bluetootha na Sonosu z uporabo Raspberry Pi: Pred tem sem napisal navodila, ki opisujejo, kako dodati pomožno ali analogno linijo v Sonos z uporabo Raspberry Pi. Bralka je vprašala, ali bi bilo mogoče prenašati zvok bluetooth iz njegovega telefona v Sonos. To je enostavno storiti z uporabo bluetooth ključa
Predvajajte glasbo z Arduinom!: 5 korakov (s slikami)
Predvajajte glasbo z Arduinom !: V tem navodilu vam bom pokazal, kako predvajam glasbo z Arduino UNO in modulom SD kartice. Uporabili bomo komunikacijo SPI. Začnimo
Predvajajte pesmi s koračnim motorjem !!: 11 korakov (s slikami)
Predvajajte pesmi z uporabo koračnega motorja !!: Ta projekt govori o oblikovanju preprostega dinamičnega vmesnika, ki bo omogočal interakcijo s koračnim motorjem na dva različna načina. Prvi vmesnik bo nadzoroval smer in hitrost koračnega motorja z uporabo preprost grafični vmesnik, ki h
Predvajajte karkoli od NES do Xbox z Skittlespider A.T.S Aka "The Contraption": 11 korakov (s slikami)
Predvajajte karkoli od NES do Xbox z Skittlespider A.T.S Aka "The Contraption": Ta navodila so namenjena Skittlespider A.T.S (Sistem Vse skupaj), znani tudi kot "The Contraption" Ta projekt se je izkazal za težjega, kot sem pričakoval. Na nekaj načinov je bilo tudi lažje, zato ne morem reči, da je bil to na splošno težak ali lahek projekt