Turinys:
- 1 žingsnis: ESP32 funkcijos ir apribojimai
- 2 žingsnis: vaizdo įrašo formatas
- 3 žingsnis: garso formatas
- 4 žingsnis: Formatuokite konvertavimą
- 5 žingsnis: aparatinės įrangos paruošimas
- 6 žingsnis: SD sąsaja
- 7 žingsnis: sudėkite jį kartu
- 8 žingsnis: programa
- 9 žingsnis: etalonas
- 10 žingsnis: laimingas žaidimas
Video: Leiskite vaizdo įrašą naudodami ESP32: 10 žingsnių (su nuotraukomis)
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-31 10:22
Ši instrukcija rodo kažką apie vaizdo ir garso atkūrimą naudojant ESP32.
1 žingsnis: ESP32 funkcijos ir apribojimai
funkcijos
- 4 SPI magistralės, 2 SPI magistralės, skirtos vartotojo erdvei, jos yra SPI2 ir SPI3 arba vadinamos HSPI ir VSPI. Abi SPI magistralės gali veikti daugiausia 80 MHz dažniu. Teoriškai jis gali perkelti 320x240 16 bitų spalvotų pikselių į SPI LCD 60 kadrų per sekundę greičiu, tačiau jis dar neskaičiavo laiko, reikalingo vaizdo duomenims skaityti ir dekoduoti.
- 1 bitų / 4 bitų SD magistralė gali prijungti SD kortelę vietiniame protokole
- I2S vidinė DAC garso išvestis
- yra daugiau nei 100 KB RAM vaizdo ir garso buferiui
- Pakankamai tinkama apdorojimo galia, norint iššifruoti JPEG (paleisti judesio JPEG) ir LZW duomenų glaudinimą (paleisti animacinį GIF)
- Dviejų branduolių versija gali padalyti skaitymo duomenis iš SD kortelės, iššifruoti ir perkelti į SPI LCD į lygiagrečias kelias užduotis ir pagerinti atkūrimo našumą
Apribojimai
- nepakanka vidinės RAM, kad būtų dvigubo kadro buferis 320x240 formatu 16 bitų spalvomis, tai apribojo daugiafunkcinį dizainą. Jis gali šiek tiek įveikti naudojant išorinį PSRAM, nors jis yra lėtesnis nei vidinė RAM
- nepakanka apdorojimo galios, kad būtų galima iššifruoti mp4 vaizdo įrašą
- ne visos ESP32 versijos turi 2 branduolius, kelių užduočių pavyzdys naudingas tik dviejų branduolių versijai
Nuoroda:
2 žingsnis: vaizdo įrašo formatas
RGB565
Arba vadinama 16 bitų spalva yra neapdorotų duomenų formatas, dažniausiai naudojamas bendraujant tarp MCU ir spalvoto ekrano. Kiekvienas spalvinis pikselis yra 16 bitų reikšmė, pirmasis 5 bitų yra raudonos vertės, po 6 bitų-žalios spalvos, o po to-5 bitų mėlynos vertės. 16 bitų vertė gali pakeisti 65536 spalvas, todėl ji taip pat vadinama 64K spalvomis. Taigi 1 minutės 320x240@30 kadrų per sekundę vaizdo įrašo dydis bus toks: 16 * 320 * 240 * 30 * 60 = 2211840000 bitų = 276480000 baitų arba daugiau nei 260 MB
Animacinis GIF
Tai yra įprastas failų formatas žiniatinklyje nuo dešimtojo dešimtmečio. Tai apriboja kiekvieno ekrano spalvų variacijas iki 256 spalvų ir nekartokite taškų išsaugojimo tos pačios spalvos kaip ir ankstesnis kadras. Taigi tai gali žymiai sumažinti failo dydį, ypač kai kiekvienas animacijos kadras nepakeičia per daug detalių. LZW suspaudimas sukurtas taip, kad jį būtų galima iššifruoti dešimtojo dešimtmečio kompiuteriu, todėl ESP32 taip pat turi pakankamai pakankamai apdorojimo galios, kad jį būtų galima iššifruoti realiuoju laiku.
Judesio JPEG
Arba vadinamas M-JPEG / MJPEG yra įprastas vaizdo suspaudimo formatas, skirtas vaizdo įrašymo aparatūrai, turinčiai ribotą apdorojimo galią. Tiesą sakant, tai tiesiog nejudančių JPEG kadrų sujungimas. Palyginti su MPEG arba MP4, „Motion JPEG“nereikia skaičiavimo intensyvios tarprėmių prognozavimo technikos, kiekvienas kadras yra nepriklausomas. Taigi koduoti ir iššifruoti reikia mažiau išteklių.
Nuoroda:
en.wikipedia.org/wiki/List_of_monochrome_a…
en.wikipedia.org/wiki/GIF
en.wikipedia.org/wiki/Motion_JPEG
3 žingsnis: garso formatas
PCM
Neapdorotų duomenų formatas skaitmeniniam garsui. ESP32 DAC naudoja 16 bitų bitų gylį, tai reiškia, kad visi 16 bitų duomenys yra skaitmeninis atrinktas analoginis signalas. Daugelyje vaizdo įrašų ir dainų garso įrašų dažnis dažniausiai naudojamas 44100 MHz dažniu, tai reiškia, kad kiekvieną sekundę 44100 imamas analoginis signalas. Taigi 1 minutės mono garso PCM neapdorotų duomenų dydis bus: 16 * 44100 * 60 = 42336000 bitų = 5292000 baitų arba daugiau nei 5 MB. Stereo garso dydis bus dvigubas, t.y. daugiau nei 10 MB
MP3
„MPEG Layer 3“yra suspausto garso formatas, plačiai naudojamas dainų glaudinimui nuo dešimtojo dešimtmečio. Tai gali žymiai sumažinti failo dydį iki dešimtadalio neapdoroto PCM formato
Nuoroda:
en.wikipedia.org/wiki/Pulse-code_modulatio…
en.wikipedia.org/wiki/MP3
4 žingsnis: Formatuokite konvertavimą
Šiame projekte naudojamas FFmpeg konvertuoti vaizdo įrašą į ESP32 skaitomą formatą.
Atsisiųskite ir įdiekite „FFmpeg“oficialioje svetainėje, jei dar ne:
Konvertuoti į PCM garsą
ffmpeg -i input.mp4 -f u16be -acodec pcm_u16le -ar 44100 -ac 1 44100_u16le.pcm
Konvertuoti į MP3 garsą
ffmpeg -i input.mp4 -ar 44100 -ac 1 -q: a 9 44100.mp3
Konvertuoti į RGB565
ffmpeg -i input.mp4 -vf "fps = 9, scale = -1: 176: flags = lanczos, crop = 220: in_h: (in_w -220)/2: 0" -c: v rawvideo -pix_fmt rgb565be 220_9fps. rgb
Konvertuoti į animacinį GIF
ffmpeg -i input.mp4 -vf "fps = 15, scale = -1: 176: flags = lanczos, crop = 220: in_h: (in_w -220)/2: 0, split [s0] [s1]; [s0] palettegen [p]; [s1] [p] paletteuse "-loop -1 220_15fps.gif
Konvertuoti į „Motion JPEG“
ffmpeg -i input.mp4 -vf "fps = 30, scale = -1: 176: flags = lanczos, crop = 220: in_h: (in_w -220)/2: 0" -q: v 9 220_30fps.mjpeg
Pastaba:
FFmpeg konvertuotą animacinį-g.webp" />
5 žingsnis: aparatinės įrangos paruošimas
ESP32 kūrėjų lenta
Bet kuri dviejų branduolių ESP32 dev plokštė turėtų būti tinkama, šį kartą aš naudoju TTGO ESP32-Micro.
Spalvotas ekranas
Bet koks spalvotas ekranas, kurį palaiko „Arduino_GFX“, turėtų būti tinkamas, šį kartą naudoju „ILI9225“pertraukos plokštę su SD kortelės lizdu.
„Arduino_GFX“palaikomų spalvų rodymo sąrašą galite rasti „Github“:
github.com/moononournation/Arduino_GFX
SD kortelė
Bet kuri SD kortelė turėtų būti tinkama, šį kartą naudoju „SanDisk“„įprasto greičio“8 GB „micro SD“su SD adapteriu.
Garsas
Jei norite naudoti tik ausines, tiesiog prijunkite ausinių kaiščius prie 26 kaiščio ir GND gali klausytis garso. Arba galite naudoti mažą stiprintuvą, norėdami leisti garsą su garsiakalbiu.
Kiti
Kai kurios lentos ir laidai
6 žingsnis: SD sąsaja
„ILI9225“skystųjų kristalų skydui skirtoje plokštėje taip pat buvo SD kortelės lizdo išspaudimo kaiščiai. Jis gali būti naudojamas kaip SPI magistralė arba 1 bitų SD magistralė. Kaip minėta ankstesnėse instrukcijose, aš mieliau naudoju 1 bitų SD magistralę, todėl šis projektas bus pagrįstas 1 bitų SD magistralėmis.
7 žingsnis: sudėkite jį kartu
Aukščiau pateiktose nuotraukose parodyta bandymo platforma, kurią naudoju šiame projekte. Baltoji duonos lenta yra atspausdinta 3D, ją galite atsisiųsti ir atsispausdinti „thingiverse“:
Tikrasis ryšys priklauso nuo to, kokią aparatūrą turite.
Čia pateikiama ryšio santrauka:
ESP32
Vcc -> LCD Vcc GND -> LCD GND GPIO 2 -> SD D0/MISO -> 1k rezistorius -> 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
Nuoroda:
8 žingsnis: programa
„Arduino IDE“
Atsisiųskite ir įdiekite „Arduino IDE“, jei dar to nepadarėte:
www.arduino.cc/en/main/software
ESP32 palaikymas
Vykdykite diegimo instrukcijas, kad pridėtumėte ESP32 palaikymą, jei to dar nepadarėte:
github.com/espressif/arduino-esp32
„Arduino_GFX“biblioteka
Atsisiųskite naujausias „Arduino_GFX“bibliotekas: (paspauskite „Klonuoti arba atsisiųsti“-> „Atsisiųsti ZIP“)
github.com/moononournation/Arduino_GFX
Importuokite bibliotekas „Arduino IDE“. („Arduino IDE“eskizo meniu -> „Įtraukti biblioteką“-> „Pridėti. ZIP biblioteką“-> pasirinkite atsisiųstą ZIP failą)
ESP8266Garsas
Atsisiųskite naujausias ESP8266 garso įrašų bibliotekas: (paspauskite „Klonuoti arba atsisiųsti“-> „Atsisiųsti ZIP“)
github.com/earlephilhower/ESP8266Audio
Importuokite bibliotekas „Arduino IDE“. („Arduino IDE“eskizo meniu -> „Įtraukti biblioteką“-> „Pridėti. ZIP biblioteką“-> pasirinkite atsisiųstą ZIP failą)
RGB565_video kodo pavyzdys
Atsisiųskite naujausią RGB565_video pavyzdžio kodą: (paspauskite „Klonuoti arba atsisiųsti“-> „Atsisiųsti ZIP“)
github.com/moononournation/RGB565_video
SD kortelės duomenys
Nukopijuokite konvertuotus failus į SD kortelę ir įdėkite į LCD kortelės angą
Kompiliavimas ir įkėlimas
- Atidarykite SDMMC_MJPEG_video_PCM_audio_dualSPI_multitask.ino „Arduino IDE“
- Jei nenaudojate ILI9225, pakeiskite naują klasės kodą (maždaug 35 eilutėje) ir pakeiskite klasės pavadinimą
- Paspauskite „Arduino IDE“mygtuką „Įkelti“
- Jei nepavyko įkelti programos, pabandykite atjungti ryšį tarp ESP32 GPIO 2 ir SD D0/MISO
- Jei manote, kad orientacija neteisinga, pakeiskite „sukimosi“reikšmę (0-3) naujame klasės kode
- Jei programa veikia gerai, galite pabandyti kitą pavyzdį, pradedant nuo SDMMC_*
- Jei neturite SD kortelės lizdo arba neįdiegėte „FFmpeg“, vis tiek galite išbandyti SPIFFS_* pavyzdį
9 žingsnis: etalonas
Čia pateikiama skirtingų vaizdo (220x176) ir garso (44100 MHz) formatų našumo santrauka:
Formatas | Kadras per sekundę (fps) |
MJPEG + PCM | 30 |
15 | |
RGB565 + PCM | 9 |
MJPEG + MP3 | 24 |
Pastaba:
- „MJPEG + PCM“gali pasiekti didesnį kadrų per sekundę greitį, tačiau tai nereikalingas grojimas mažame ekrane, didesniame nei 30 kadrų per sekundę
- RGB565 nereikia dekodavimo proceso, tačiau duomenų dydis yra per didelis ir daug laiko sugaišta įkeliant duomenis iš SD, 4 bitų SD magistralės ir greitesnės SD kortelės, tai gali šiek tiek patobulinti (laukinis spėjimas gali pasiekti apie 12 kadrų per sekundę)
- MP3 dekodavimo procesas dar nėra optimizuotas, dabar jis skirtas 0 branduoliui MP3 dekodavimui ir 1 branduoliui vaizdo įrašams leisti
10 žingsnis: laimingas žaidimas
Dabar galite atkurti vaizdo ir garso įrašus naudodami savo ESP32, jis atvėrė daugybę galimybių!
Manau, vėliau padarysiu mažą senovinį televizorių …
Rekomenduojamas:
Leiskite dainas naudodami „Arduino“naudodami ADC – PWM „Flyback“transformatoriuje arba garsiakalbyje: 4 veiksmai
Leiskite dainas su „Arduino“naudodami ADC į PWM „Flyback“transformatoriuje arba garsiakalbyje: Sveiki, vaikinai, tai yra antroji mano kito pamokomo dalyko dalis (tai buvo daug sunku). Iš esmės šiame projekte aš naudoju ADC ir laikmačius savo „Arduino“konvertuoti garso signalą į PWM signalą. Tai daug lengviau nei mano ankstesnė instrukcija
Leiskite dainas (MP3) naudodami „Arduino“naudodami PWM garsiakalbyje arba „Flyback Transformer“: 6 žingsniai (su paveikslėliais)
Leiskite dainas (MP3) naudodami „Arduino“naudodami PWM garsiakalbyje arba „Flyback Transformer“: Sveiki, vaikinai, tai yra mano pirmasis pamokomas dalykas, tikiuosi, kad jums tai patiks !! Iš esmės šiame projekte naudojau nuoseklųjį ryšį tarp mano „Arduino“ir nešiojamojo kompiuterio, perduoti muzikos duomenis iš nešiojamojo kompiuterio į „Arduino“. Ir naudojant „Arduino TIMERS t
Leiskite dainas naudodami žingsninį variklį !!: 11 žingsnių (su nuotraukomis)
Groti dainas naudojant žingsninį variklį !!: Šis projektas skirtas paprastos dinaminės sąsajos sukūrimui, kuri leis dviem būdais sąveikauti su žingsniniu varikliu. Pirmoji sąsaja valdys žingsninio variklio kryptį ir greitį, naudojant paprasta GUI, kuri
Leiskite vaizdo įrašus atgal naudodami „Quicktime Player“: 5 žingsniai
Groti vaizdo įrašus atgal naudojant „Quicktime Player“: tai yra pats nuostabiausias šimtmečio triukas. Šis instrukcinis rodo paprastą būdą, kaip atkurti vaizdo įrašus atgal neatsisiunčiant gudrių programų (jei neturite greito laiko, jums to reikės.) daryti su projektu, bet man reikėjo
Pridėkite vaizdo įrašą ir garso įrašą prie savo mikrovaldiklio projekto: 7 žingsniai
Pridėkite vaizdo įrašą ir garso įrašą prie savo mikrovaldiklio projekto: 7 segmentų LED ekranai yra naudingi rodant skaičius, o bitmap LCD gali padaryti paprastą grafiką, tačiau kartais paprasčiausias būdas yra tikras spalvotas vaizdo išvestis: sudėtinis vaizdo įrašas (dar žinomas kaip RCA Jack) visur paplitęs ir veikia su 3 " - 60 ir