INHOUDSOPGAWE:
- Stap 1: ESP32 -funksies en beperkings
- Stap 2: Videoformaat
- Stap 3: Klankformaat
- Stap 4: Formateer omskakeling
- Stap 5: Voorbereiding van hardeware
- Stap 6: SD -koppelvlak
- Stap 7: Sit dit saam
- Stap 8: Programmeer
- Stap 9: Norm
- Stap 10: Gelukkig speel
Video: Speel video met ESP32: 10 stappe (met foto's)
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-31 10:16
Hierdie instruksies wys iets oor die speel van video en klank met ESP32.
Stap 1: ESP32 -funksies en beperkings
Kenmerke
- 4 SPI -bus, 2 SPI -bus beskikbaar vir gebruikersruimte, dit is SPI2 en SPI3 of genoem HSPI en VSPI. Beide SPI -busse kan hoogstens 80 MHz ry. Teoreties kan dit 320x240 16-bis kleurpiksels na SPI LCD teen 60 fps stoot, maar dit het nog nie die tyd wat nodig is vir die lees en dekodeer van die videodata getel nie.
- 1-bis / 4-bis SD-bus kan 'n SD-kaart in die oorspronklike protokol koppel
- I2S interne DAC -klankuitset
- meer as 100 KB RAM beskikbaar vir video- en klankbuffer
- Redelike genoeg verwerkingskrag om JPEG (Motion JPEG) en LZW -datakompressie te speel (speel geanimeerde GIF)
- Weergawe met twee kerns kan leesdata van SD-kaart verdeel, ontsyfer en na SPI LCD in parallelle multi-take stoot en die afspeelprestasie verhoog
Beperkings
- nie genoeg interne RAM om 'n dubbele raambuffer vir 320x240 in 16-bis kleur te hê nie, dit het die multitask-ontwerp beperk. Dit kan 'n bietjie oorkom met eksterne PSRAM, hoewel dit stadiger is as interne RAM
- nie genoeg verwerkingskrag om mp4 -video te dekodeer nie
- nie alle ESP32-weergawes het 2 kern nie, maar die multi-taak-voorbeeld vind slegs baat by 'n tweekern-weergawe
Verwysing:
Stap 2: Videoformaat
RGB565
Of 16-bis kleur genoem, is 'n rou data-formaat wat algemeen gebruik word in die kommunikasie tussen MCU en kleurskerm. Elke kleurpiksel word voorgestel deur 'n 16-biswaarde, die eerste 5-bis is 'n rooi waarde, die volgende is 'n groen waarde en 'n 5-bis blou waarde. 16-bis waarde kan 65536 kleurvariasies maak, dus word dit ook 64K kleure genoem. Die grootte van 1 minuut 320x240@30 fps video is 16: 320 * 240 * 30 * 60 = 2211840000 bis = 276480000 grepe of meer as 260 MB
Geanimeerde GIF
Dit is 'n algemene lêerformaat op die internet sedert die 1990's. Dit beperk die kleurvariasie vir elke skerm tot 256 kleure en stoor nie die pixel met dieselfde kleur as die vorige raam nie. Dit kan die lêergrootte dus baie verminder, veral as elke animasieraam nie te veel besonderhede verander nie. Die LZW -kompressie is ontwerp om deur die rekenaar uit die 1990's te ontsyfer, sodat ESP32 ook redelike genoeg verwerkingskrag het om dit intyds te dekodeer.
Beweging JPEG
Of M-JPEG / MJPEG genoem, is 'n algemene video-kompressie-formaat vir die video-opname hardeware met beperkte verwerkingskrag. Dit is eintlik 'n samevoeging van steeds JPEG -rame. Vergelyk met MPEG of MP4, Motion JPEG hoef nie rekenaarmatig intensiewe tegnieke van interraamvoorspelling te wees nie; elke raam is onafhanklik. Dit verg dus minder hulpbronne om te kodeer en te dekodeer.
Verw.:
en.wikipedia.org/wiki/List_of_monochrome_a…
en.wikipedia.org/wiki/GIF
en.wikipedia.org/wiki/Motion_JPEG
Stap 3: Klankformaat
PCM
'N Onbewerkte dataformaat vir digitale klank. ESP32 DAC gebruik 16-bis-diepte, wat beteken dat elke 16-bis-data 'n analoog sein van 'n digitale steekproef verteenwoordig. Die meeste video- en liedjie -klank gebruik gewoonlik monstertempo by 44100 MHz, dit wil sê 44100 analoog sein vir elke sekonde. Die grootte van 1 minuut mono -oudio -PCM -rou data sal dus grootte wees: 16 * 44100 * 60 = 42336000 bis = 5292000 grepe of meer as 5 MB. Die grootte van stereo -klank is dubbel, dit wil sê meer as 10 MB
MP3
MPEG Layer 3 is 'n saamgeperste klankformaat wat sedert 1990's wyd gebruik word vir die druk van liedjies. Dit kan die lêergrootte dramaties verminder tot minder as 'n tiende van die rou PCM-formaat
Verw.:
en.wikipedia.org/wiki/Pulse-code_modulatio…
en.wikipedia.org/wiki/MP3
Stap 4: Formateer omskakeling
Hierdie projek gebruik FFmpeg om die video in ESP32 -leesbare formaat om te skakel.
Laai FFmpeg af en installeer dit op hul amptelike webwerf, indien nog nie:
Skakel oor na PCM -klank
ffmpeg -i input.mp4 -f u16be -acodec pcm_u16le -ar 44100 -ac 1 44100_u16le.pcm
Skakel oor na MP3 -klank
ffmpeg -i input.mp4 -ar 44100 -ac 1 -q: a 9 44100.mp3
Skakel oor na RGB565
ffmpeg -i input.mp4 -vf "fps = 9, skaal = -1: 176: vlae = lanczos, crop = 220: in_h: (in_w -220)/2: 0" -c: v rawvideo -pix_fmt rgb565be 220_9fps. rgb
Skakel oor na geanimeerde GIF
ffmpeg -i input.mp4 -vf "fps = 15, skaal = -1: 176: vlae = lanczos, crop = 220: in_h: (in_w -220)/2: 0, split [s0] [s1]; [s0] palettegen [p]; [s1] [p] paletteuse "-loop -1 220_15fps.gif
Skakel oor na Motion JPEG
ffmpeg -i input.mp4 -vf "fps = 30, skaal = -1: 176: vlae = lanczos, crop = 220: in_h: (in_w -220)/2: 0" -q: v 9 220_30fps.mjpeg
Let wel:
Met FFmpeg -omgeskakel Geanimeerde GIF's kan deur sommige webhulpmiddels verder geoptimaliseer word; u kan na-g.webp" />
Stap 5: Voorbereiding van hardeware
ESP32 Dev Board
Enige ESP32-dev-bord met twee kern moet goed wees, hierdie keer gebruik ek 'n TTGO ESP32-Micro.
Kleur vertoon
Enige kleurskerm wat Arduino_GFX ondersteun, behoort goed te wees; hierdie keer gebruik ek 'n ILI9225 -uitbreekbord met 'n SD -kaartgleuf.
U kan Arduino_GFX ondersteunde kleurvertoningslys vind by Github:
github.com/moononournation/Arduino_GFX
SD kaart
Enige SD -kaart behoort goed te wees, hierdie keer gebruik ek 'n SanDisk "normale snelheid" 8 GB mikro -SD met SD -adapter.
Oudio
As u slegs 'n koptelefoon wil gebruik, koppel die koptelefoonpennetjies aan pen 26 en GND kan die klank luister. Of u kan 'n klein versterker gebruik om klank met luidspreker te speel.
Ander
Sommige broodborde en broodborddrade
Stap 6: SD -koppelvlak
ILI9225 LCD -uitbreekbord bevat ook 'n SD crd -gleufbreekpenne. Dit kan gebruik word as SPI-bus of 1-bis SD-bus. Soos in my vorige instruksies genoem, verkies ek om 1-bis SD-bus te gebruik, dus hierdie projek sal gebaseer wees op 1-bis SD-bus.
Stap 7: Sit dit saam
Bogenoemde foto's toon die toetsplatform wat ek in hierdie projek gebruik. Die wit broodbord is 3D -gedruk, u kan dit aflaai en aflaai op thingiverse:
Die werklike verbinding hang af van watter hardeware u in die hand het.
Hier is die verbindingopsomming:
ESP32
Vcc -> LCD Vcc GND -> LCD GND GPIO 2 -> SD D0/MISO -> 1k weerstand -> 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
Verwysing:
Stap 8: Programmeer
Arduino IDE
Laai en installeer Arduino IDE as u dit nog nie gedoen het nie:
www.arduino.cc/en/main/software
Ondersteuning van ESP32
Volg die installasie -instruksies om ESP32 -ondersteuning by te voeg as u dit nog nie gedoen het nie:
github.com/espressif/arduino-esp32
Arduino_GFX -biblioteek
Laai die nuutste Arduino_GFX -biblioteke af: (druk "Klone of aflaai" -> "Laai zip af")
github.com/moononournation/Arduino_GFX
Voer biblioteke in in Arduino IDE. (Arduino IDE "Skets" -kieslys -> "Sluit biblioteek in" -> "Voeg. ZIP -biblioteek by" -> kies afgelaaide zip -lêer)
ESP8266Audio
Laai die nuutste ESP8266Audiobiblioteke af: (druk "Klone of aflaai" -> "Laai zip af")
github.com/earlephilhower/ESP8266Audio
Voer biblioteke in in Arduino IDE. (Arduino IDE "Skets" -kieslys -> "Sluit biblioteek in" -> "Voeg. ZIP -biblioteek by" -> kies afgelaaide zip -lêer)
RGB565_video Voorbeeldkode
Laai die nuutste RGB565_video -voorbeeldkode af: (druk "Klone of aflaai" -> "Laai zip af")
github.com/moononournation/RGB565_video
SD kaart data
Kopieer die omgeskakelde lêers na die SD -kaart en plaas dit in die LCD -kaartgleuf
Stel op en laai op
- Maak SDMMC_MJPEG_video_PCM_audio_dualSPI_multitask.ino oop in Arduino IDE
- As u nie ILI9225 gebruik nie, verander die nuwe klaskode (rondom reël 35) om die klasnaam korrek te maak
- Druk die "Upload" -knoppie van Arduino IDE
- As u nie die program opgelaai het nie, probeer om die verbinding tussen ESP32 GPIO 2 en SD D0/MISO los te maak
- As u die oriëntasie nie korrek vind nie, verander die 'rotasie'-waarde (0-3) in die nuwe klaskode
- As die program goed verloop, kan u 'n ander voorbeeld begin met SDMMC_*
- As u nie 'n SD -kaartgleuf het nie of FFmpeg nie geïnstalleer het nie, kan u steeds 'n voorbeeld van SPIFFS_* probeer
Stap 9: Norm
Hier is die prestasie -opsomming vir verskillende videoformate (220x176) en klank (44100 MHz):
Formaat | Raam per sekonde (fps) |
MJPEG + PCM | 30 |
15 | |
RGB565 + PCM | 9 |
MJPEG + MP3 | 24 |
Let wel:
- MJPEG + PCM kan hoër fps bereik, maar dit is onnodig om op 'n klein skerm groter as 30 fps te speel
- RGB565 benodig geen dekodeerproses nie, maar die datagrootte is te groot en dit verg baie tyd om data vanaf SD, 4-bis SD-bus en vinniger SD-kaart te laai (dit kan ongeveer 12 fps bereik)
- MP3 -dekodeerproses is nog nie geoptimaliseer nie; dit is nou toegewy aan kern 0 vir MP3 -dekodeer en kern 1 vir die speel van video
Stap 10: Gelukkig speel
Nou kan u video en klank speel met u ESP32, dit het baie moontlikhede ontsluit!
Ek dink ek sal later 'n klein vintage TV maak …
Aanbeveel:
Praat Arduino - 'N MP3 speel met Arduino sonder enige module - Speel MP3 -lêer vanaf Arduino met behulp van PCM: 6 stappe
Praat Arduino | 'N MP3 speel met Arduino sonder enige module | Mp3 -lêer speel vanaf Arduino met behulp van PCM: In hierdie instruksies leer ons hoe om 'n mp3 -lêer met arduino te speel sonder om 'n klankmodule te gebruik
Speel liedjies (MP3) met Arduino met behulp van PWM op luidspreker of Flyback -transformator: 6 stappe (met foto's)
Speel liedjies (MP3) met Arduino met behulp van PWM op luidspreker of Flyback -transformator: Hallo ouens, dit is my eerste instruksie, ek hoop dat u daarvan sal hou !! In hierdie projek het ek die seriële kommunikasie tussen my Arduino en my laptop gebruik, om musiekdata van my skootrekenaar na die Arduino oor te dra. En met behulp van die Arduino TIMERS t
Speel CD's sonder CD -speler, met behulp van AI en YouTube: 10 stappe (met foto's)
Speel CD's sonder CD -speler, gebruik AI en YouTube: wil u u CD's speel, maar het u nie meer 'n CD -speler nie? Het u nie tyd gehad om u CD's te skeur nie? Het hulle dit gerip, maar die lêers is nie beskikbaar as dit nodig is nie? Geen probleem nie. Laat AI (kunsmatige intelligensie) u CD identifiseer en YouTube speel dit! Ek het 'n Android -app geskryf wat
Speel musiek met Arduino !: 5 stappe (met foto's)
Speel musiek met Arduino !: In hierdie instruksies sal ek jou wys hoe ek musiek speel met 'n Arduino UNO en 'n SD -kaartmodule. Ons sal die SPI -kommunikasie gebruik. Kom aan die gang
Speel liedjies met stappermotor !!: 11 stappe (met foto's)
Speel liedjies met stappermotor !!: Hierdie projek gaan oor die ontwerp van 'n eenvoudige dinamiese koppelvlak, waarmee u op twee verskillende maniere met 'n stappermotor kan omgaan. eenvoudige GUI, wat h