Turinys:

Leiskite vaizdo įrašą naudodami ESP32: 10 žingsnių (su nuotraukomis)
Leiskite vaizdo įrašą naudodami ESP32: 10 žingsnių (su nuotraukomis)

Video: Leiskite vaizdo įrašą naudodami ESP32: 10 žingsnių (su nuotraukomis)

Video: Leiskite vaizdo įrašą naudodami ESP32: 10 žingsnių (su nuotraukomis)
Video: Learn Arduino in 30 Minutes: Examples and projects 2024, Lapkritis
Anonim
Leiskite vaizdo įrašą naudodami ESP32
Leiskite vaizdo įrašą naudodami ESP32

Š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

Techninės įrangos paruošimas
Techninė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

SD sąsaja
SD sąsaja
SD sąsaja
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

Sudėkite jį kartu
Sudėkite jį kartu
Sudėkite jį kartu
Sudėkite jį kartu
Sudėkite jį kartu
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

Programa
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

  1. Atidarykite SDMMC_MJPEG_video_PCM_audio_dualSPI_multitask.ino „Arduino IDE“
  2. Jei nenaudojate ILI9225, pakeiskite naują klasės kodą (maždaug 35 eilutėje) ir pakeiskite klasės pavadinimą
  3. Paspauskite „Arduino IDE“mygtuką „Įkelti“
  4. Jei nepavyko įkelti programos, pabandykite atjungti ryšį tarp ESP32 GPIO 2 ir SD D0/MISO
  5. Jei manote, kad orientacija neteisinga, pakeiskite „sukimosi“reikšmę (0-3) naujame klasės kode
  6. Jei programa veikia gerai, galite pabandyti kitą pavyzdį, pradedant nuo SDMMC_*
  7. Jei neturite SD kortelės lizdo arba neįdiegėte „FFmpeg“, vis tiek galite išbandyti SPIFFS_* pavyzdį

9 žingsnis: etalonas

Etalonas
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

Laimingo žaidimo!
Laimingo žaidimo!

Dabar galite atkurti vaizdo ir garso įrašus naudodami savo ESP32, jis atvėrė daugybę galimybių!

Manau, vėliau padarysiu mažą senovinį televizorių …

Rekomenduojamas: