INHOUDSOPGAWE:

Speel video met ESP32: 10 stappe (met foto's)
Speel video met ESP32: 10 stappe (met foto's)

Video: Speel video met ESP32: 10 stappe (met foto's)

Video: Speel video met ESP32: 10 stappe (met foto's)
Video: ESP32-CAM - Guide to making YOUR first DIY Security Camera 2024, November
Anonim
Speel video met ESP32
Speel video met ESP32

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

Voorbereiding van hardeware
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

SD -koppelvlak
SD -koppelvlak
SD -koppelvlak
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

Sit dit saam
Sit dit saam
Sit dit saam
Sit dit saam
Sit dit saam
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

Program
Program

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

  1. Maak SDMMC_MJPEG_video_PCM_audio_dualSPI_multitask.ino oop in Arduino IDE
  2. As u nie ILI9225 gebruik nie, verander die nuwe klaskode (rondom reël 35) om die klasnaam korrek te maak
  3. Druk die "Upload" -knoppie van Arduino IDE
  4. As u nie die program opgelaai het nie, probeer om die verbinding tussen ESP32 GPIO 2 en SD D0/MISO los te maak
  5. As u die oriëntasie nie korrek vind nie, verander die 'rotasie'-waarde (0-3) in die nuwe klaskode
  6. As die program goed verloop, kan u 'n ander voorbeeld begin met SDMMC_*
  7. 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

Norm
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

Lekker speel!
Lekker 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: