Indholdsfortegnelse:

Afspil video med ESP32: 10 trin (med billeder)
Afspil video med ESP32: 10 trin (med billeder)

Video: Afspil video med ESP32: 10 trin (med billeder)

Video: Afspil video med ESP32: 10 trin (med billeder)
Video: Управление 32 серводвигателями с PCA9685 и ESP32 - V4 2024, November
Anonim
Afspil video med ESP32
Afspil video med ESP32

Denne instruktion viser noget om afspilning af video og lyd med ESP32.

Trin 1: ESP32 -funktioner og begrænsninger

Funktioner

  • 4 SPI -bus, 2 SPI -bus til rådighed for brugerplads, de er SPI2 og SPI3 eller kaldes HSPI og VSPI. Begge SPI -busser kan højst køre 80 MHz. Teoretisk set kan den skubbe 320x240 16-bit farvepixel til SPI LCD ved 60 fps, men den har endnu ikke talt den tid, der er nødvendig for at læse og afkode videodata.
  • 1-bit / 4-bit SD-bus kan tilslutte SD-kort i native protokol
  • I2S intern DAC -lydudgang
  • over 100 KB RAM tilgængelig til video- og lydbuffer
  • Rimelig nok processorkraft til at afkode JPEG (afspil Motion JPEG) og LZW -datakomprimering (afspil animeret GIF)
  • Dual-core-version kan opdele læsedata fra SD-kort, afkode og skubbe til SPI LCD i parallelle multi-opgaver og øge afspilningsevnen

Begrænsninger

  • ikke nok intern RAM til at have dobbelt frame buffer til 320x240 i 16-bit farve, det begrænsede multitask-designet. Det kan overvinde lidt med ekstern PSRAM, selvom det er langsommere end intern RAM
  • ikke nok processorkraft til at afkode mp4 -video
  • ikke alle ESP32-versioner har 2 kerner, multi-task-prøven har kun fordel af dual-core-versionen

Ref.:

Trin 2: Videoformat

RGB565

Eller kaldet 16-bit farve er et rådataformat, der almindeligvis bruges i kommunikationen mellem MCU og farvedisplay. Hver farvepixel repræsenteret med en 16-bit værdi, den første 5-bit er rød værdi, efter 6-bit er grøn værdi og derefter 5-bit blå værdi. 16-bit værdi kan lave 65536 farvevariationer, så det kaldes også 64K farver. Så 1 minuts 320x240@30 fps video vil have en størrelse: 16 * 320 * 240 * 30 * 60 = 2211840000 bits = 276480000 bytes eller over 260 MB

Animeret GIF

Dette er et almindeligt filformat på internettet siden 1990'erne. Det begrænser farvevariationen for hver skærm op til 256 farver og gem ikke den pixel, der har samme farve som den forrige ramme. Så det kan reducere filstørrelsen meget, især når hver animationsramme ikke ændrer for mange detaljer. LZW -komprimering er designet i stand til at blive afkodet af 1990'ernes computer, så ESP32 har også fair nok processorkraft til at afkode den i realtid.

Motion JPEG

Eller kaldet M-JPEG / MJPEG er et almindeligt videokomprimeringsformat til videooptagelseshardware med begrænset behandlingseffekt. Det er faktisk simpelthen en sammenkædning af stadig JPEG -rammer. Sammenlign med MPEG eller MP4, Motion JPEG behøver ikke beregningsmæssigt intensiv teknik til interframe forudsigelse, hver ramme er uafhængig. Så det kræver mindre ressource at kode og afkode.

Ref.:

da.wikipedia.org/wiki/List_of_monochrome_a…

da.wikipedia.org/wiki/GIF

da.wikipedia.org/wiki/Motion_JPEG

Trin 3: Lydformat

PCM

Et rådataformat til digital lyd. ESP32 DAC bruger 16-bit bitdybde, det vil sige, at hver 16-bit data repræsenterer et digitalt samplet analogt signal. De fleste video- og sanglyde bruger normalt samplingsfrekvens ved 44100 MHz, det betyder 44100 samplet analogt signal for hvert sekund. Så 1 minuts mono -lyd PCM -rådata vil have en størrelse: 16 * 44100 * 60 = 42336000 bits = 5292000 bytes eller over 5 MB. Størrelsen på stereolyd vil være dobbelt, dvs. over 10 MB

MP3

MPEG Layer 3 er et komprimeret lydformat, der har været meget udbredt til sangkomprimering siden 1990'erne. Det kan dramatisk reducere filstørrelsen til under en tiendedel af rå PCM-format

Ref.:

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

da.wikipedia.org/wiki/MP3

Trin 4: Formatér konvertering

Dette projekt bruger FFmpeg til at konvertere videoen til et læsbart ESP32 -format.

Download og installer FFmpeg på deres officielle websted, hvis ikke endnu:

Konverter til PCM -lyd

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

Konverter til MP3 -lyd

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

Konverter til RGB565

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

Konverter til animeret GIF

ffmpeg -i input.mp4 -vf "fps = 15, skala = -1: 176: flag = lanczos, crop = 220: in_h: (in_w -220)/2: 0, split [s0] [s1]; [s0] palettegen [p]; [s1] [p] paletteuse "-loop -1 220_15fps.gif

Konverter til Motion JPEG

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

Bemærk:

FFmpeg konverteret Animeret-g.webp" />

Trin 5: Forberedelse af hardware

Forberedelse af hardware
Forberedelse af hardware

ESP32 Dev Board

Ethvert dual-core ESP32 dev-kort skal være ok, denne gang bruger jeg en TTGO ESP32-Micro.

Farvedisplay

Enhver farvedisplay, som Arduino_GFX understøtter, burde være ok, denne gang bruger jeg et ILI9225 breakout -kort med SD -kortplads.

Du kan finde Arduino_GFX understøttede farvedisplayliste på Github:

github.com/moononournation/Arduino_GFX

SD kort

Ethvert SD -kort skal være ok, denne gang bruger jeg en SanDisk "normal hastighed" 8 GB micro SD med SD -adapter.

Lyd

Hvis du kun vil bruge hovedtelefoner, skal du blot slutte hovedtelefonstifterne til pin 26, og GND kan lytte til lyden. Eller du kan bruge en lille forstærker til at afspille lyd med højttaler.

Andre

Nogle brødbrætter og brødbrætstråde

Trin 6: SD -grænseflade

SD -interface
SD -interface
SD -interface
SD -interface

ILI9225 LCD breakout board inkluderede også en SD crd slot breakout pins. Det kan bruges som SPI-bus eller 1-bit SD-bus. Som nævnt i mine tidligere instruktører foretrækker jeg at bruge 1-bit SD-bus, så dette projekt vil basere sig på 1-bit SD-bus.

Trin 7: Sæt det sammen

Sæt det sammen
Sæt det sammen
Sæt det sammen
Sæt det sammen
Sæt det sammen
Sæt det sammen

Ovenstående billeder viser den testplatform, jeg bruger i dette projekt. Det hvide brødbræt er 3D -printet, du kan downloade og udskrive det på thingiverse:

Den faktiske forbindelse afhænger af, hvilken hardware du har i hånden.

Her er forbindelsesoversigten:

ESP32

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

Trin 8: Programmer

Program
Program

Arduino IDE

Download og installer Arduino IDE, hvis du endnu ikke gør det:

www.arduino.cc/en/main/software

ESP32 Support

Følg installationsvejledningen for at tilføje ESP32 -support, hvis du endnu ikke gør det:

github.com/espressif/arduino-esp32

Arduino_GFX bibliotek

Download de nyeste Arduino_GFX -biblioteker: (tryk på "Klon eller download" -> "Download ZIP")

github.com/moononournation/Arduino_GFX

Importer biblioteker i Arduino IDE. (Arduino IDE "Skitse" menu -> "Inkluder bibliotek" -> "Tilføj. ZIP bibliotek" -> vælg downloadet ZIP -fil)

ESP8266Lyd

Download de nyeste ESP8266Lydbiblioteker: (tryk på "Klon eller download" -> "Download ZIP")

github.com/earlephilhower/ESP8266Audio

Importer biblioteker i Arduino IDE. (Arduino IDE "Skitse" menu -> "Inkluder bibliotek" -> "Tilføj. ZIP bibliotek" -> vælg downloadet ZIP -fil)

RGB565_video Prøvekode

Download den nyeste RGB565_video -prøvekode: (tryk på "Klon eller download" -> "Download ZIP")

github.com/moononournation/RGB565_video

SD -kortdata

Kopier de konverterede filer til SD -kort, og indsæt dem i LCD -kortpladsen

Kompiler og upload

  1. Åbn SDMMC_MJPEG_video_PCM_audio_dualSPI_multitask.ino i Arduino IDE
  2. Hvis du ikke bruger ILI9225, skal du ændre den nye klassekode (omkring linje 35) for at rette klassens navn
  3. Tryk på Arduino IDE "Upload" -knappen
  4. Hvis du ikke kunne uploade programmet, kan du prøve at afbryde forbindelsen mellem ESP32 GPIO 2 og SD D0/MISO
  5. Hvis du finder retningen ikke korrekt, skal du ændre værdien "rotation" (0-3) i ny klassekode
  6. Hvis programmet kører godt, kan du prøve anden prøve start med SDMMC_*
  7. Hvis du ikke har et SD -kort slot, eller du ikke har FFmpeg installeret, kan du stadig prøve SPIFFS_* eksempel

Trin 9: Benchmark

Benchmark
Benchmark

Her er ydeevneoversigten for forskellige video- (220x176) og lydformater (44100 MHz):

Format Billed pr. Sekund (fps)
MJPEG + PCM 30
15
RGB565 + PCM 9
MJPEG + MP3 24

Bemærk:

  • MJPEG + PCM kan nå højere fps, men det er unødvendigt at afspille på en lille skærm større end 30 fps
  • RGB565 kræver ikke afkodningsproces, men datastørrelsen er for stor og meget tidskrævende ved indlæsning af data fra SD, 4-bit SD-bus og hurtigere SD-kort kan forbedre det en smule (vildt gæt kan nå omkring 12 fps)
  • MP3 -afkodningsprocessen endnu ikke optimeret, det er nu dedikeret kerne 0 til MP3 -afkodning og kerne 1 til afspilning af video

Trin 10: God leg

Glad for at spille!
Glad for at spille!

Nu kan du afspille video og lyd med din ESP32, det låste op for mange muligheder!

Jeg tror, jeg vil lave et lille vintage TV senere …

Anbefalede: