Innholdsfortegnelse:

Spill av video med ESP32: 10 trinn (med bilder)
Spill av video med ESP32: 10 trinn (med bilder)

Video: Spill av video med ESP32: 10 trinn (med bilder)

Video: Spill av video med ESP32: 10 trinn (med bilder)
Video: ТАКОГО ЕЩЕ НИКТО НЕ ВИДЕЛ! Узнав это СЕКРЕТ, ты никогда не выбросишь пластиковую бутылку! 2024, November
Anonim
Spill av video med ESP32
Spill av video med ESP32

Denne instruksen viser noe om å spille av video og lyd med ESP32.

Trinn 1: ESP32 -funksjoner og begrensninger

Funksjoner

  • 4 SPI -busser, 2 SPI -busser tilgjengelig for brukerplass, de er SPI2 og SPI3 eller kalles HSPI og VSPI. Begge SPI -bussene kan kjøre maksimalt 80 MHz. Teoretisk sett kan den skyve 320x240 16-biters fargepiksler til SPI LCD med 60 bps, men den har ennå ikke talt den tiden som kreves for å lese og dekode videodata.
  • 1-bit / 4-biters SD-buss kan koble til SD-kort i egen protokoll
  • I2S intern DAC -lydutgang
  • over 100 KB RAM tilgjengelig for video- og lydbuffer
  • Rett nok prosessorkraft til å dekode JPEG (spille av Motion JPEG) og LZW -datakomprimering (spille av animert GIF)
  • Dual-core versjon kan dele lese data fra SD-kort, dekode og skyve til SPI LCD i parallelle multi-oppgaver og øke avspillingsytelsen

Begrensninger

  • ikke nok intern RAM til å ha dobbel rammebuffer for 320x240 i 16-biters farge, begrenset det multitask-designet. Det kan overvinne litt med ekstern PSRAM, selv om det er tregere enn intern RAM
  • ikke nok prosessorkraft til å dekode mp4 -video
  • ikke alle ESP32-versjoner har 2 kjerner, multi-task-prøven har bare fordeler med en dual-core-versjon

Ref.:

Trinn 2: Videoformat

RGB565

Eller kalt 16-biters farge er et rådataformat som vanligvis brukes i kommunikasjonen mellom MCU og fargedisplay. Hver fargepiksel representert med en 16-biters verdi, den første 5-bits er rød verdi, etter 6-bit er grønn verdi og deretter 5-biters blå verdi. 16-biters verdi kan gjøre 65536 fargevariasjoner, så det kalles også 64K farger. Så 1 minutt 320x240@30 fps video vil ha en størrelse: 16 * 320 * 240 * 30 * 60 = 2211840000 bits = 276480000 byte eller over 260 MB

Animert GIF

Dette er et vanlig filformat på nettet siden 1990 -tallet. Det begrenser fargevariasjonen for hver skjerm opp til 256 farger og ikke gjenta pikselene som har samme farge som forrige ramme. Så det kan redusere filstørrelsen mye, spesielt når hver animasjonsramme ikke endrer for mange detaljer. LZW -komprimeringen er designet for å kunne dekodes av datamaskinen fra 1990 -tallet, så ESP32 har også god nok prosessorkraft til å dekode den i sanntid.

Bevegelse JPEG

Eller kalt M-JPEG / MJPEG er et vanlig videokomprimeringsformat for videoopptaksmaskinvare med begrenset prosessorkraft. Det er faktisk bare en sammenkobling av fremdeles JPEG -rammer. Sammenlign med MPEG eller MP4, Motion JPEG trenger ikke beregningsmessig intensiv teknikk for interframe -prediksjon, hver ramme er uavhengig. Så det krever mindre ressurs å kode og dekode.

Ref.:

en.wikipedia.org/wiki/List_of_monochrome_a…

en.wikipedia.org/wiki/GIF

en.wikipedia.org/wiki/Motion_JPEG

Trinn 3: Lydformat

PCM

Et rådataformat for digital lyd. ESP32 DAC bruker 16-biters dybde, det vil si at hver 16-biters data representerer et digitalt samplet analogt signal. De fleste video- og sanglyder bruker vanligvis samplingsfrekvens ved 44100 MHz, det betyr 44100 samplet analogt signal for hvert sekund. Så, 1 minutts mono -lyd PCM -rådata vil ha en størrelse: 16 * 44100 * 60 = 42336000 bits = 5292000 byte eller over 5 MB. Størrelsen på stereolyd vil være dobbelt, dvs. over 10 MB

MP3

MPEG Layer 3 er et komprimert lydformat som har blitt mye brukt til sangkomprimering siden 1990 -tallet. Det kan dramatisk redusere filstørrelsen til under en tidel av rå PCM-format

Ref.:

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

en.wikipedia.org/wiki/MP3

Trinn 4: Format konvertering

Dette prosjektet bruker FFmpeg til å konvertere videoen til et lesbart ESP32 -format.

Last ned og installer FFmpeg på deres offisielle nettsted hvis ikke ennå:

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: flagg = lanczos, crop = 220: in_h: (in_w -220)/2: 0" -c: v rawvideo -pix_fmt rgb565be 220_9fps. rgb

Konverter til animert GIF

ffmpeg -i input.mp4 -vf "fps = 15, skala = -1: 176: flagg = lanczos, beskjæring = 220: in_h: (in_w -220)/2: 0, delt [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: flagg = lanczos, beskjære = 220: in_h: (in_w -220)/2: 0" -q: v 9 220_30fps.mjpeg

Merk:

FFmpeg -konvertert Animert-g.webp" />

Trinn 5: Forberedelse av maskinvare

Forberedelse av maskinvare
Forberedelse av maskinvare

ESP32 Dev Board

Ethvert ESP32 dev-kort med to kjerner burde være ok, denne gangen bruker jeg en TTGO ESP32-Micro.

Fargedisplay

Enhver fargeskjerm som Arduino_GFX -støtte skal være ok, denne gangen bruker jeg et ILI9225 breakout -kort med SD -kortspor.

Du finner Arduino_GFX støttet fargeskjermliste på Github:

github.com/moononournation/Arduino_GFX

SD kort

Ethvert SD -kort skal være ok, denne gangen bruker jeg en SanDisk "normal speed" 8 GB micro SD med SD -adapter.

Lyd

Hvis du bare vil bruke hodetelefoner, kobler du bare hodetelefonpinnene til pin 26, og GND kan lytte til lyden. Eller du kan bruke en liten forsterker til å spille av lyd med høyttaler.

Andre

Noen brødbrett og brødbrettledninger

Trinn 6: SD -grensesnitt

SD -grensesnitt
SD -grensesnitt
SD -grensesnitt
SD -grensesnitt

ILI9225 LCD breakout board inkluderte også en SD crd slot breakout pins. Den kan brukes som SPI-buss eller 1-biters SD-buss. Som nevnt i mine tidligere instrukser, foretrekker jeg å bruke 1-biters SD-buss, så dette prosjektet vil basere seg på 1-biters SD-buss.

Trinn 7: Sett det sammen

Sett det sammen
Sett det sammen
Sett det sammen
Sett det sammen
Sett det sammen
Sett det sammen

Bildene ovenfor viser testplattformen jeg bruker i dette prosjektet. Det hvite brødbrettet er 3D -trykt, du kan laste det ned og skrive det ut på thingiverse:

Den faktiske tilkoblingen avhenger av hvilken maskinvare du har i hånden.

Her er tilkoblingssammendraget:

ESP32

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

Trinn 8: Programmer

Program
Program

Arduino IDE

Last ned og installer Arduino IDE hvis du ikke har gjort det ennå:

www.arduino.cc/en/main/software

ESP32 -støtte

Følg installasjonsinstruksjonene for å legge til ESP32 -støtte hvis du ikke har gjort det ennå:

github.com/espressif/arduino-esp32

Arduino_GFX bibliotek

Last ned de nyeste Arduino_GFX -bibliotekene: (trykk "Clone or Download" -> "Download ZIP")

github.com/moononournation/Arduino_GFX

Importer biblioteker i Arduino IDE. (Arduino IDE "Sketch" -meny -> "Inkluder bibliotek" -> "Legg til. ZIP -bibliotek" -> velg nedlastet ZIP -fil)

ESP8266Audio

Last ned de siste ESP8266Audio -bibliotekene: (trykk "Klon eller last ned" -> "Last ned ZIP")

github.com/earlephilhower/ESP8266Audio

Importer biblioteker i Arduino IDE. (Arduino IDE "Sketch" -meny -> "Inkluder bibliotek" -> "Legg til. ZIP -bibliotek" -> velg nedlastet ZIP -fil)

RGB565_video Eksempelkode

Last ned siste RGB565_video -prøvekode: (trykk "Klon eller Last ned" -> "Last ned ZIP")

github.com/moononournation/RGB565_video

SD -kortdata

Kopier de konverterte filene til SD -kort og sett det inn i LCD -kortsporet

Kompiler og last opp

  1. Åpne SDMMC_MJPEG_video_PCM_audio_dualSPI_multitask.ino i Arduino IDE
  2. Hvis du ikke bruker ILI9225, må du endre den nye klassekoden (rundt linje 35) til å rette klassenavnet
  3. Trykk på Arduino IDE "Last opp" -knappen
  4. Hvis du ikke klarte å laste opp programmet, kan du prøve å koble fra forbindelsen mellom ESP32 GPIO 2 og SD D0/MISO
  5. Hvis du finner retningen ikke riktig, endrer du "rotasjons" -verdien (0-3) i ny klassekode
  6. Hvis programmet kjører bra, kan du prøve en annen prøvestart med SDMMC_*
  7. Hvis du ikke har SD -kortspor eller ikke har FFmpeg installert, kan du fortsatt prøve SPIFFS_* -eksempel

Trinn 9: Benchmark

Målestokk
Målestokk

Her er ytelsesoppsummeringen for forskjellige video- (220x176) og lydformater (44100 MHz):

Format Bilde per sekund (fps)
MJPEG + PCM 30
15
RGB565 + PCM 9
MJPEG + MP3 24

Merk:

  • MJPEG + PCM kan nå høyere fps, men det er unødvendig spill i en liten skjerm som er større enn 30 fps
  • RGB565 krever ikke dekodingsprosess, men datastørrelsen er for stor og bruker mye tid på å laste inn data fra SD, 4-biters SD-buss og raskere SD-kort kan forbedre det litt (vill gjetning kan nå rundt 12 bps)
  • MP3 -dekodingsprosessen er ennå ikke optimalisert, det er nå dedikert kjerne 0 for MP3 -dekode og kjerne 1 for å spille av video

Trinn 10: Lykke til

Glad i leken!
Glad i leken!

Nå kan du spille av video og lyd med ESP32, den låste opp mange muligheter!

Jeg tror jeg skal lage en liten vintage TV senere …

Anbefalt: