Cuprins:

Redați videoclipuri cu ESP32: 10 pași (cu imagini)
Redați videoclipuri cu ESP32: 10 pași (cu imagini)

Video: Redați videoclipuri cu ESP32: 10 pași (cu imagini)

Video: Redați videoclipuri cu ESP32: 10 pași (cu imagini)
Video: How to use ESP32 WiFi and Bluetooth with Arduino IDE full details with examples and code 2024, Noiembrie
Anonim
Redați videoclipuri cu ESP32
Redați videoclipuri cu ESP32

Acest Instructables arată ceva despre redarea video și audio cu ESP32.

Pasul 1: Caracteristici și limitări ESP32

Caracteristici

  • 4 magistrale SPI, 2 magistrale SPI disponibile pentru spațiul utilizatorului, sunt SPI2 și SPI3 sau numite HSPI și VSPI. Ambele autobuze SPI pot rula cel mult 80 MHz. Teoretic poate împinge 320x240 pixeli de culoare pe 16 biți pe SPI LCD la 60 fps, dar nu a numărat încă timpul necesar pentru citirea și decodarea datelor video.
  • Magistrala SD de 1 bit / 4 biți poate conecta cardul SD în protocol nativ
  • I2S ieșire audio DAC internă
  • peste 100 KB RAM disponibil pentru buffer video și audio
  • Putere de procesare suficientă pentru a decoda JPEG (redare Motion JPEG) și compresie de date LZW (redare-g.webp" />
  • Versiunea dual-core poate împărți datele citite de pe cardul SD, decoda și împinge la SPI LCD în mai multe sarcini paralele și crește performanța de redare

Limitări

  • RAM insuficient intern pentru a avea un buffer de cadru dublu pentru 320x240 în culoare pe 16 biți, a limitat designul multitask. Poate depăși puțin cu PSRAM extern, deși este mai lent decât RAM intern
  • nu este suficientă putere de procesare pentru decodarea videoclipurilor mp4
  • nu toate versiunile ESP32 au 2 nuclee, eșantionul multi-task beneficiază doar de versiunea dual-core

Ref.:

Pasul 2: Format video

RGB565

Sau numit culoare pe 16 biți este un format de date brute utilizat în mod obișnuit la comunicarea dintre MCU și afișajul color. Fiecare pixel de culoare reprezentat de o valoare de 16 biți, primul 5 biți este valoarea roșie, după 6 biți valoarea verde și apoi valoarea albastră 5 biți. Valoarea pe 16 biți poate face 65536 variații de culoare, așa că se numește și 64K culori. Deci, video de 1 minut 320x240 @ 30 fps va avea dimensiunea: 16 * 320 * 240 * 30 * 60 = 2211840000 biți = 276480000 octeți sau peste 260 MB

Acesta este un format de fișier comun pe web din anii 1990. Limită variația culorilor pentru fiecare ecran până la 256 de culori și nu repetă stocarea pixelului la aceeași culoare ca și cadrul anterior. Deci, poate reduce dimensiunea fișierului, mai ales când fiecare cadru de animație nu schimbă prea multe detalii. Compresia LZW este proiectată să fie decodificată de computerul din anii 1990, astfel încât ESP32 are, de asemenea, o putere de procesare suficientă pentru a o decoda în timp real.

Motion JPEG

Sau numit M-JPEG / MJPEG este un format comun de compresie video pentru hardware-ul de captură video cu putere de procesare limitată. De fapt, este pur și simplu o concatenare de cadre JPEG. Comparați cu MPEG sau MP4, Motion JPEG nu necesită o tehnică intensă din punct de vedere al calculului de predicție interframe, fiecare cadru este independent. Deci, necesită mai puține resurse pentru a codifica și decoda.

Ref.:

en.wikipedia.org/wiki/List_of_monochrome_a…

en.wikipedia.org/wiki/GIF

en.wikipedia.org/wiki/Motion_JPEG

Pasul 3: Format audio

PCM

Un format de date brute pentru audio digital. ESP32 DAC utilizează adâncimea de 16 biți, ceea ce înseamnă că fiecare date pe 16 biți reprezintă un semnal analogic eșantionat digital. Majoritatea sunetelor video și melodii utilizează frecvent rata de eșantionare la 44100 MHz, ceea ce înseamnă 44100 semnal analogic eșantionat pentru fiecare secundă. Deci, datele brute PCM mono 1 minut vor fi dimensionate: 16 * 44100 * 60 = 42336000 biți = 5292000 octeți sau peste 5 MB. Dimensiunea audio stereo va fi dublă, adică peste 10 MB

MP3

MPEG Layer 3 este un format audio comprimat utilizat pe scară largă pentru compresia melodiilor din anii 1990. Poate reduce dramatic dimensiunea fișierului sub o zecime din formatul brut PCM

Ref.:

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

en.wikipedia.org/wiki/MP3

Pasul 4: Formatarea conversiei

Acest proiect folosește FFmpeg pentru a converti videoclipul în format lizibil ESP32.

Vă rugăm să descărcați și să instalați FFmpeg pe site-ul lor oficial, dacă nu încă:

Convertiți în audio PCM

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

Convertiți în audio MP3

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

Convertiți în 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

Convertiți în-g.webp

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

Convertiți în 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

Notă:

FIFmpeg convertit-g.webp" />

Pasul 5: Pregătirea hardware-ului

Pregătirea hardware-ului
Pregătirea hardware-ului

ESP32 Dev Board

Orice placă de dezvoltare ESP32 dual-core ar trebui să fie ok, de data aceasta folosesc un TTGO ESP32-Micro.

Afișare color

Orice afișaj color acceptat de Arduino_GFX ar trebui să fie ok, de data aceasta folosesc o placă ILI9225 cu slot pentru card SD.

Puteți găsi lista de afișare color acceptată Arduino_GFX la Github:

github.com/moononournation/Arduino_GFX

Card SD

Orice card SD ar trebui să fie ok, de data aceasta folosesc un microSD SanDisk „viteză normală” de 8 GB cu adaptor SD.

Audio

Dacă doriți să utilizați numai căști, conectați pur și simplu pinii căștilor la pinul 26 și GND poate asculta sunetul. Sau puteți utiliza un amplificator mic pentru a reda audio cu difuzor.

Alții

Câteva panouri și fire de panouri

Pasul 6: Interfață SD

Interfață SD
Interfață SD
Interfață SD
Interfață SD

Placa LCD ILI9225 a inclus, de asemenea, un pin SD Breakout slot. Poate fi folosit ca magistrală SPI sau magistrală SD pe 1 biți. Așa cum am menționat în instructabilele mele anterioare, prefer să folosesc magistrala SD pe 1 biți, astfel încât acest proiect se va baza pe magistrala SD pe 1 biți.

Pasul 7: puneți-l împreună

Pune-l împreună
Pune-l împreună
Pune-l împreună
Pune-l împreună
Pune-l împreună
Pune-l împreună

Imaginile de mai sus arată platforma de testare pe care o folosesc în acest proiect. Panoul alb este imprimat 3D, îl puteți descărca și imprima de la thingiverse:

Conexiunea efectivă depinde de hardware-ul pe care îl aveți la îndemână.

Iată rezumatul conexiunii:

ESP32

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

Pasul 8: Program

Program
Program

IDE Arduino

Descărcați și instalați Arduino IDE dacă încă nu faceți acest lucru:

www.arduino.cc/en/main/software

Suport ESP32

Urmați instrucțiunile de instalare pentru a adăuga asistență ESP32 dacă nu o faceți încă:

github.com/espressif/arduino-esp32

Biblioteca Arduino_GFX

Descărcați cele mai recente biblioteci Arduino_GFX: (apăsați „Clonați sau descărcați” -> „Descărcați ZIP”)

github.com/moononournation/Arduino_GFX

Importați biblioteci în Arduino IDE. (Arduino IDE "Sketch" Menu -> "Include Library" -> "Add. ZIP Library" -> selectați fișierul ZIP descărcat)

ESP8266 Audio

Descărcați cele mai recente biblioteci ESP8266Audio: (apăsați pe „Clonează sau Descarcă” -> „Descarcă ZIP”)

github.com/earlephilhower/ESP8266Audio

Importați biblioteci în Arduino IDE. (Arduino IDE "Sketch" Menu -> "Include Library" -> "Add. ZIP Library" -> selectați fișierul ZIP descărcat)

RGB565_video Exemplu de cod

Descărcați cel mai recent cod de probă RGB565_video: (apăsați pe „Clonează sau Descarcă” -> „Descarcă ZIP”)

github.com/moononournation/RGB565_video

Date card SD

Copiați fișierele convertite pe cardul SD și introduceți-le în slotul pentru card LCD

Compilați și încărcați

  1. Deschideți SDMMC_MJPEG_video_PCM_audio_dualSPI_multitask.ino în IDE Arduino
  2. Dacă nu utilizați ILI9225, modificați noul cod de clasă (în jurul liniei 35) pentru a corecta numele clasei
  3. Apăsați butonul „Încărcare” Arduino IDE
  4. Dacă nu ați reușit să încărcați programul, încercați să detașați conexiunea dintre ESP32 GPIO 2 și SD D0 / MISO
  5. Dacă orientarea nu este corectă, modificați valoarea „rotației” (0-3) în noul cod de clasă
  6. Dacă programul rulează bine, puteți încerca un alt exemplu de pornire cu SDMMC_ *
  7. Dacă nu aveți slot pentru card SD sau nu aveți instalat FFmpeg, puteți încerca în continuare exemplul SPIFFS_ *

Pasul 9: benchmark

Etalon
Etalon

Iată rezumatul performanței pentru diferite formate video (220x176) și audio (44100 MHz):

Format Cadru pe secundă (fps)
MJPEG + PCM 30
15
RGB565 + PCM 9
MJPEG + MP3 24

Notă:

  • MJPEG + PCM poate atinge fps mai mari, dar este redarea inutilă pe un ecran mic mai mare de 30 fps
  • RGB565 nu necesită proces de decodare, dar dimensiunea datelor este prea mare și consumă mult timp la încărcarea datelor din SD, autobuzul SD pe 4 biți și cardul SD mai rapid îl poate îmbunătăți puțin (presupunerea sălbatică poate ajunge la aproximativ 12 fps)
  • Procesul de decodare MP3 nu este încă optimizat, acum este dedicat nucleul 0 pentru decodarea MP3 și nucleul 1 pentru redarea videoclipurilor

Pasul 10: Joc fericit

Joc fericit!
Joc fericit!

Acum puteți reda video și audio cu ESP32, acesta a deblocat multe posibilități!

Cred că voi face mai târziu un mic TV de epocă …

Recomandat: