Innholdsfortegnelse:
- Trinn 1: ESP32 -funksjoner og begrensninger
- Trinn 2: Videoformat
- Trinn 3: Lydformat
- Trinn 4: Format konvertering
- Trinn 5: Forberedelse av maskinvare
- Trinn 6: SD -grensesnitt
- Trinn 7: Sett det sammen
- Trinn 8: Programmer
- Trinn 9: Benchmark
- Trinn 10: Lykke til
Video: Spill av video med ESP32: 10 trinn (med bilder)
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-31 10:23
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
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
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
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
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
- Å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
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
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:
Spill Nintendo -spill på Idevice med en Wiimote gratis !: 6 trinn
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 -skjerm: 6 trinn
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: 8 trinn
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: 5 trinn
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 online eller offline: 5 trinn
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