Sadržaj:

Reproducirajte video zapis s ESP32: 10 koraka (sa slikama)
Reproducirajte video zapis s ESP32: 10 koraka (sa slikama)

Video: Reproducirajte video zapis s ESP32: 10 koraka (sa slikama)

Video: Reproducirajte video zapis s ESP32: 10 koraka (sa slikama)
Video: ESP32 Cam: программирование камеры ESP32 с использованием Arduino, AI Thinker, исправлены проблемы, проект esp32 IoT 2024, Srpanj
Anonim
Reproducirajte video zapis s ESP32
Reproducirajte video zapis s ESP32

Ove upute pokazuju nešto o reprodukciji videa i zvuka s ESP32.

Korak 1: Značajke i ograničenja ESP32

Značajke

  • 4 SPI sabirnice, 2 SPI sabirnice dostupne za korisnički prostor, one su SPI2 i SPI3 ili se nazivaju HSPI i VSPI. Obje SPI sabirnice mogu raditi najviše 80 MHz. Teoretski, može gurnuti 320x240 16-bitne piksele u boji na SPI LCD pri 60 fps, ali još nije računao vrijeme potrebno za čitanje i dekodiranje video podataka.
  • 1-bitna / 4-bitna SD sabirnica može spojiti SD karticu u izvornom protokolu
  • I2S interni DAC audio izlaz
  • više od 100 KB RAM -a dostupno za video i audio međuspremnik
  • Dovoljno poštena procesorska snaga za dekodiranje JPEG -a (reprodukcija Motion JPEG -a) i LZW kompresije podataka (reprodukcija animiranog-g.webp" />
  • Dvojezgrena verzija može podijeliti pročitane podatke sa SD kartice, dekodirati i pritisnuti na SPI LCD u paralelne više zadataka te povećati performanse reprodukcije

Ograničenja

  • nema dovoljno interne memorije da ima međuspremnik s dvostrukim okvirom za 320x240 u 16-bitnoj boji, to je ograničilo dizajn više zadataka. Može pomalo prevladati s vanjskim PSRAM -om iako je sporiji od unutarnjeg RAM -a
  • nema dovoljno procesorske snage za dekodiranje mp4 videa
  • nemaju sve verzije ESP32 dvije jezgre, uzorak s više zadataka koristi samo na dvojezgrenoj verziji

Ref.:

Korak 2: Video format

RGB565

Ili nazvana 16-bitna boja, sirovi je format podataka koji se obično koristi za komunikaciju između MCU-a i zaslona u boji. Svaki piksel u boji predstavljen je 16-bitnom vrijednošću, prvih 5-bitna je crvena vrijednost, slijedeća 6-bitna je zelena vrijednost, a zatim 5-bitna plava vrijednost. 16-bitna vrijednost može napraviti varijaciju boje 65536 pa se naziva i 64K boja. Tako će 1 minuta 320x240@30 fps videozapis biti veličine: 16 * 320 * 240 * 30 * 60 = 2211840000 bita = 276480000 bajtova ili više od 260 MB

Animirani GIF

Ovo je uobičajeni format datoteke na webu od 1990 -ih. Ograničava varijacije boja za svaki zaslon do 256 boja i ne ponavlja se, pohranite piksel u istoj boji kao prethodni okvir. Dakle, može znatno smanjiti veličinu datoteke, osobito ako svaki okvir animacije ne promijeni previše detalja. LZW kompresija dizajnirana je za dekodiranje od strane računala iz 1990 -ih, pa ESP32 također ima dovoljno poštene procesorske snage za dekodiranje u stvarnom vremenu.

Motion JPEG

Ili nazvan M-JPEG / MJPEG uobičajeni je format kompresije videa za hardver za snimanje videa s ograničenom procesorskom snagom. To je zapravo jednostavno spajanje mirnih JPEG okvira. Usporedite s MPEG -om ili MP4 -om, Motion JPEG nema potrebe za računalno intenzivnom tehnikom među kadarnog predviđanja, svaki je kadar neovisan. Stoga je potrebno manje resursa za kodiranje i dekodiranje.

Ref.:

en.wikipedia.org/wiki/List_of_monochrome_a…

en.wikipedia.org/wiki/GIF

en.wikipedia.org/wiki/Motion_JPEG

Korak 3: Audio format

PCM

Sirovi format podataka za digitalni zvuk. ESP32 DAC koristi 16-bitnu dubinu bita, što znači da svaki 16-bitni podatak predstavlja digitalni uzorkovani analogni signal. Većina video zapisa i zvukova pjesama obično koristi frekvenciju uzorkovanja na 44100 MHz, što znači 44100 uzorkovanog analognog signala za svaku sekundu. Dakle, 1 minutni mono audio PCM sirovi podaci bit će veličine: 16 * 44100 * 60 = 42336000 bita = 5292000 bajtova ili više od 5 MB. Veličina stereo zvuka bit će dvostruka, odnosno preko 10 MB

MP3

MPEG Layer 3 je komprimirani audio format koji se široko koristi za kompresiju pjesama od 1990 -ih. Može dramatično smanjiti veličinu datoteke na manje od jedne desetine neobrađenog PCM formata

Ref.:

en.wikipedia.org/wiki/Pulse-code_modulatio…

en.wikipedia.org/wiki/MP3

Korak 4: Pretvorba formata

Ovaj projekt koristi FFmpeg pretvoriti video u ESP32 čitljiv format.

Molimo preuzmite i instalirajte FFmpeg na njihovu službenu stranicu ako još nije dostupna:

Pretvorite u PCM audio

ffmpeg -i ulaz.mp4 -f u16be -acodec pcm_u16le -ar 44100 -ac 1 44100_u16le.pcm

Pretvorite u MP3 zvuk

ffmpeg -i ulaz.mp4 -ar 44100 -ac 1 -q: a 9 44100.mp3

Pretvorite u 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

Pretvori u animirani GIF

ffmpeg -i input.mp4 -vf "fps = 15, scale = -1: 176: zastavice = lanczos, obrezivanje = 220: in_h: (in_w -220)/2: 0, split [s0] [s1]; [s0] palettegen [p]; [s1] [p] paletteuse "-loop -1 220_15fps.gif

Pretvori u Motion JPEG

ffmpeg -i input.mp4 -vf "fps = 30, scale = -1: 176: zastavice = lanczos, obrezivanje = 220: in_h: (in_w -220)/2: 0" -q: v 9 220_30fps.mjpeg

Bilješka:

Animirani-g.webp" />

Korak 5: Priprema hardvera

Priprema hardvera
Priprema hardvera

ESP32 ploča za razvoj

Bilo koja dvojezgrena ESP32 ploča za razvoj trebala bi biti u redu, ovaj put koristim TTGO ESP32-Micro.

Zaslon u boji

Bilo koji zaslon u boji koji Arduino_GFX podržava trebao bi biti u redu, ovaj put koristim ILI9225 probojnu ploču sa utorom za SD karticu.

Popis boja u boji koji podržava Arduino_GFX možete pronaći na Githubu:

github.com/moononournation/Arduino_GFX

SD kartica

Bilo koja SD kartica bi trebala biti u redu, ovaj put koristim SanDisk "normalne brzine" 8 GB micro SD sa SD adapterom.

Audio

Ako želite koristiti samo slušalice, jednostavno spojite iglice slušalica na pin 26 i GND može slušati zvuk. Ili možete koristiti maleno pojačalo za reprodukciju zvuka sa zvučnikom.

Drugi

Neke ploče i žice

Korak 6: SD sučelje

SD sučelje
SD sučelje
SD sučelje
SD sučelje

ILI9225 LCD razvodna ploča također uključuje igle za probijanje SD crd utora. Može se koristiti kao SPI sabirnica ili 1-bitna SD sabirnica. Kao što je spomenuto u mojim prethodnim uputama, radije koristim 1-bitnu SD sabirnicu, pa će se ovaj projekt temeljiti na 1-bitnoj SD sabirnici.

Korak 7: Sastavite to

Sastavite to
Sastavite to
Sastavite to
Sastavite to
Sastavite to
Sastavite to

Gornje slike prikazuju platformu za testiranje koju koristim u ovom projektu. Bijela ploča je 3D ispisana, možete je preuzeti i ispisati na thingiverse:

Stvarna veza ovisi o tome koji hardver imate pri ruci.

Evo sažetka veze:

ESP32

Vcc -> LCD Vcc GND -> LCD GND GPIO 2 -> SD D0/MISO -> 1k otpornik -> 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.:

Korak 8: Program

Program
Program

Arduino IDE

Preuzmite i instalirajte Arduino IDE ako to još niste učinili:

www.arduino.cc/en/main/software

Podrška za ESP32

Slijedite upute za instalaciju da biste dodali podršku za ESP32 ako to još niste učinili:

github.com/espressif/arduino-esp32

Knjižnica Arduino_GFX

Preuzmite najnovije Arduino_GFX knjižnice: (pritisnite "Kloniraj ili preuzmi" -> "Preuzmi ZIP")

github.com/moononournation/Arduino_GFX

Uvezite knjižnice u Arduino IDE. (Arduino IDE "Sketch" izbornik -> "Uključi biblioteku" -> "Dodaj. ZIP knjižnicu" -> odaberite preuzetu ZIP datoteku)

ESP8266Audio

Preuzmite najnovije ESP8266Audio biblioteke: (pritisnite "Kloniraj ili preuzmi" -> "Preuzmi ZIP")

github.com/earlephilhower/ESP8266Audio

Uvezite knjižnice u Arduino IDE. (Arduino IDE "Sketch" izbornik -> "Uključi knjižnicu" -> "Dodaj. ZIP knjižnicu" -> odaberite preuzetu ZIP datoteku)

RGB565_video Uzorak koda

Preuzmite najnoviji uzorak koda RGB565_video: (pritisnite "Kloniraj ili preuzmi" -> "Preuzmi ZIP")

github.com/moononournation/RGB565_video

Podaci SD kartice

Kopirajte pretvorene datoteke na SD karticu i umetnite ih u utor za LCD karticu

Kompilacija i prijenos

  1. Otvorite SDMMC_MJPEG_video_PCM_audio_dualSPI_multitask.ino u Arduino IDE
  2. Ako ne koristite ILI9225, promijenite novi kôd razreda (oko retka 35) kako biste ispravili naziv klase
  3. Pritisnite Arduino IDE gumb "Upload"
  4. Ako niste uspjeli prenijeti program, pokušajte prekinuti vezu između ESP32 GPIO 2 i SD D0/MISO
  5. Ako smatrate da orijentacija nije točna, promijenite vrijednost "rotacije" (0-3) u novom kodu klase
  6. Ako se program dobro pokreće, možete isprobati drugi uzorak početka sa SDMMC_*
  7. Ako nemate utor za SD karticu ili nemate instaliran FFmpeg, još uvijek možete isprobati primjer SPIFFS_*

Korak 9: Mjerilo

Mjerilo
Mjerilo

Evo sažetka izvedbe za različite video (220x176) i audio (44100 MHz) formate:

Format Okvir u sekundi (fps)
MJPEG + PCM 30
15
RGB565 + PCM 9
MJPEG + MP3 24

Bilješka:

  • MJPEG + PCM može doseći veće fps, ali nije potrebno igrati na malom ekranu većem od 30 fps
  • RGB565 ne zahtijeva postupak dekodiranja, ali je veličina podataka prevelika i puno se vremena troši pri učitavanju podataka sa SD-a, 4-bitne SD sabirnice i brže SD kartice može je malo poboljšati (za pretpostavku je da može doseći oko 12 fps)
  • Postupak dekodiranja MP3 -a još nije optimiziran, sada je posvećen jezgri 0 za dekodiranje MP3 -a i jezgri 1 za reprodukciju videa

Korak 10: Sretno igranje

Sretna igra!
Sretna igra!

Sada možete reproducirati video i audio sa svojim ESP32, otključao je mnoge mogućnosti!

Mislim da ću kasnije napraviti mali vintage televizor …

Preporučeni: