Indholdsfortegnelse:
- Trin 1: ESP32 -funktioner og begrænsninger
- Trin 2: Videoformat
- Trin 3: Lydformat
- Trin 4: Formatér konvertering
- Trin 5: Forberedelse af hardware
- Trin 6: SD -grænseflade
- Trin 7: Sæt det sammen
- Trin 8: Programmer
- Trin 9: Benchmark
- Trin 10: God leg
Video: Afspil video med ESP32: 10 trin (med billeder)
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-31 10:18
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
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
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
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
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
- Åbn SDMMC_MJPEG_video_PCM_audio_dualSPI_multitask.ino i Arduino IDE
- Hvis du ikke bruger ILI9225, skal du ændre den nye klassekode (omkring linje 35) for at rette klassens navn
- Tryk på Arduino IDE "Upload" -knappen
- Hvis du ikke kunne uploade programmet, kan du prøve at afbryde forbindelsen mellem ESP32 GPIO 2 og SD D0/MISO
- Hvis du finder retningen ikke korrekt, skal du ændre værdien "rotation" (0-3) i ny klassekode
- Hvis programmet kører godt, kan du prøve anden prøve start med SDMMC_*
- Hvis du ikke har et SD -kort slot, eller du ikke har FFmpeg installeret, kan du stadig prøve SPIFFS_* eksempel
Trin 9: 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
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:
Sådan laver du en Ford Audiophile Stereo Radio Afspil MP3 -filer .: 7 trin
Sådan laver du en Ford Audiophile Stereo Radio Afspil MP3-filer .: Denne instruktør giver dig et par vigtige detaljer om, hvordan du opfylder MP3 CD-R-kompatibilitetskravene til en Ford Audiophile (og sandsynligvis en Mach 300, Shaker 500 og Shaker 1000 ) fabriksstereo, så du kan brænde og nyde MP3-filer på en cd
Afspil sange (MP3) med Arduino ved hjælp af PWM på højttaler eller Flyback Transformer: 6 trin (med billeder)
Spil sange (MP3) med Arduino ved hjælp af PWM på højttaler eller Flyback Transformer: Hej Guys, Dette er min første instruerbare, jeg håber, at du vil kunne lide det! Grundlæggende har jeg i dette projekt brugt den serielle kommunikation mellem min Arduino og min bærbare computer, at overføre musikdata fra min bærbare til Arduino. Og ved hjælp af Arduino TIMERS t
Afspil cd'er uden cd -afspiller, brug af AI og YouTube: 10 trin (med billeder)
Afspil cd'er uden cd -afspiller, brug af AI og YouTube: Vil du afspille dine cd'er, men har ikke mere cd -afspiller? Havde du ikke tid til at rippe dine cd'er? Rippede dem, men filerne er ikke tilgængelige, når det er nødvendigt? Intet problem. Lad AI (kunstig intelligens) identificere din cd, og YouTube afspiller den! Jeg skrev en Android -app, der gør
Afspil sange ved hjælp af trinmotor !!: 11 trin (med billeder)
Afspil sange ved hjælp af trinmotor !!: Dette projekt handler om at designe en simpel dynamisk grænseflade, som gør det muligt at interagere med en trinmotor på to forskellige måder. Den første grænseflade styrer retningen og hastigheden på steppermotoren ved hjælp af en simpel GUI, som h
Føj en Afspil/spring-knap til dit selvstændige cd-rom-drev: 4 trin
Føj en afspil/spring-knap til dit selvstændige cd-rom-drev: Hvis du vil lave en cd-afspiller fra et gammelt cd-rom-drev (se her), men det drev, du har, ikke har en PLAY/SKIP-knap på forsiden ….. Fortvivl ikke, du kan tilføje en til de fleste Cd -drev, > > > > Læs videre