2025 Forfatter: John Day | [email protected]. Sist endret: 2025-01-23 15:02
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å:
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 -grensesnittSD -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 sammenSett det sammenSett 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.
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
Åpne SDMMC_MJPEG_video_PCM_audio_dualSPI_multitask.ino i Arduino IDE
Hvis du ikke bruker ILI9225, må du endre den nye klassekoden (rundt linje 35) til å rette klassenavnet
Trykk på Arduino IDE "Last opp" -knappen
Hvis du ikke klarte å laste opp programmet, kan du prøve å koble fra forbindelsen mellom ESP32 GPIO 2 og SD D0/MISO
Hvis du finner retningen ikke riktig, endrer du "rotasjons" -verdien (0-3) i ny klassekode
Hvis programmet kjører bra, kan du prøve en annen prøvestart med SDMMC_*
Hvis du ikke har SD -kortspor eller ikke har FFmpeg installert, kan du fortsatt prøve SPIFFS_* -eksempel
Trinn 9: Benchmark
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!
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 …
Spill Nintendo -spill på Idevice med en Wiimote gratis!: Har du noen gang gått til appbutikken for å få et Super Nintendo -spill, men du finner ikke et å spille. Nå kan du spille disse nintendo -spillene med snes -emulatoren fra Cydia. Denne emulatoren lar deg spille Nintendo -spill på din enhet, selv med
Spill et PONG -spill med Arduino Uno og OLED 0.96 SSD1306 Display: Hei folkens i dag skal vi lage et PONG -spill med Arduino. Vi bruker adafruit's 0.96 oled display for å vise spillet & trykknapper for å kontrollere spillet
Slik laster du opp spill til Arduboy og 500 spill til Flash-cart: Jeg lagde noen hjemmelagde Arduboy med Serial Flash-minne som kan lagre maks 500 spill å spille på veien. Jeg håper å dele hvordan du laster inn spill til den, inkludert hvordan du lagrer spill i det serielle flashminnet og lager din egen konsoliderte spillpakke
SmartPhone Game Simulator- Spill Windows-spill ved hjelp av Gesture Control IMU, Accelerometer, Gyroscope, Magnetometer: Støtt dette prosjektet: https://www.paypal.me/vslcreations ved å donere til åpen kildekode & støtte til videre utvikling
Last ned og spill Flash-spill på eller offline: I denne instruksen vil jeg lære deg hvordan du laster ned flash-spill. Dette er fantastisk for å spille på turer og ting der du ikke kan få wi-fi