Satura rādītājs:

Video atskaņošana ar ESP32: 10 soļi (ar attēliem)
Video atskaņošana ar ESP32: 10 soļi (ar attēliem)

Video: Video atskaņošana ar ESP32: 10 soļi (ar attēliem)

Video: Video atskaņošana ar ESP32: 10 soļi (ar attēliem)
Video: Управляем адресными светодиодами на ESP32, прошивка WLED, применение в Home Assistant 2024, Novembris
Anonim
Atskaņojiet video, izmantojot ESP32
Atskaņojiet video, izmantojot ESP32

Šī instrukcija parāda kaut ko par video un audio atskaņošanu, izmantojot ESP32.

1. darbība: ESP32 funkcijas un ierobežojumi

Iespējas

  • 4 SPI kopnes, 2 SPI kopnes, kas pieejamas lietotāja vietai, tās ir SPI2 un SPI3 vai sauktas par HSPI un VSPI. Abas SPI kopnes var darboties ne vairāk kā 80 MHz. Teorētiski tas var nospiest 320x240 16 bitu krāsu pikseļus uz SPI LCD ar ātrumu 60 kadri sekundē, bet vēl nav uzskaitījis laiku, kas vajadzīgs, lai nolasītu un atšifrētu video datus.
  • 1 bitu / 4 bitu SD kopne var savienot SD karti vietējā protokolā
  • I2S iekšējā DAC audio izeja
  • video un audio buferim ir pieejama vairāk nekā 100 KB RAM
  • Pietiekama apstrādes jauda, lai atšifrētu JPEG (atskaņot Motion JPEG) un LZW datu saspiešanu (atskaņot animētu GIF)
  • Divkodolu versija var sadalīt lasāmos datus no SD kartes, atšifrēt un nospiest uz SPI LCD paralēlos daudzuzdevumos un uzlabot atskaņošanas veiktspēju

Ierobežojumi

  • nav pietiekami daudz iekšējās RAM, lai būtu divkārša kadra buferis 320x240 formātā 16 bitu krāsās, tas ierobežoja daudzuzdevumu dizainu. To var nedaudz pārvarēt ar ārējo PSRAM, lai gan tas ir lēnāks nekā iekšējā RAM
  • Nepietiek apstrādes jaudas, lai atšifrētu mp4 video
  • ne visām ESP32 versijām ir 2 kodoli, vairāku uzdevumu paraugs gūst labumu tikai no divkodolu versijas

Atsauce:

2. darbība: video formāts

RGB565

Vai arī sauc par 16 bitu krāsu ir neapstrādātu datu formāts, ko parasti izmanto saziņai starp MCU un krāsu displeju. Katru krāsu pikseļu attēlo 16 bitu vērtība, pirmie 5 biti ir sarkanā vērtība, pēc 6 bitu ir zaļā vērtība un pēc tam 5 bitu zilā vērtība. 16 bitu vērtība var radīt 65536 krāsu variācijas, tāpēc to sauc arī par 64K krāsām. Tātad 1 minūte 320x240@30 kadri / s video tiks izmērīts: 16 * 320 * 240 * 30 * 60 = 2211840000 biti = 276480000 baiti vai vairāk nekā 260 MB

Animēts GIF

Šis ir izplatīts failu formāts tīmeklī kopš deviņdesmitajiem gadiem. Tas ierobežo katra ekrāna krāsu variācijas līdz 256 krāsām un neatkārto to, ka pikseļi tiek saglabāti tādā pašā krāsā kā iepriekšējais kadrs. Tātad tas var ievērojami samazināt faila lielumu, it īpaši, ja katrs animācijas rāmis nemaina pārāk daudz detaļu. LZW kompresija ir izstrādāta, lai to varētu atšifrēt 1990. gadu dators, tāpēc ESP32 ir arī pietiekami liela apstrādes jauda, lai to atšifrētu reālā laikā.

Kustības JPEG

Vai arī sauc par M-JPEG / MJPEG ir parasts video saspiešanas formāts video uztveršanas aparatūrai ar ierobežotu apstrādes jaudu. Patiesībā tas ir vienkārši nekustīgu JPEG kadru savienojums. Salīdzinot ar MPEG vai MP4, Motion JPEG nav nepieciešama skaitļošanas ziņā intensīva starp kadru paredzēšanas tehnika, katrs kadrs ir neatkarīgs. Tātad kodēšanai un atšifrēšanai ir nepieciešami mazāk resursu.

Atsauce:

en.wikipedia.org/wiki/List_of_monochrome_a…

en.wikipedia.org/wiki/GIF

en.wikipedia.org/wiki/Motion_JPEG

3. darbība: audio formāts

PCM

Neapstrādātu datu formāts digitālajam audio. ESP32 DAC izmanto 16 bitu dziļumu, kas nozīmē, ka katrs 16 bitu dati attēlo ciparu paraugu analogo signālu. Lielākajā daļā video un dziesmu audio parasti tiek izmantots izlases ātrums 44100 MHz, tas nozīmē 44100 parauga analogo signālu katrā sekundē. Tātad 1 minūtes mono audio PCM izejas dati tiks izmērīti: 16 * 44100 * 60 = 42336000 biti = 5292000 baiti vai vairāk nekā 5 MB. Stereo audio izmērs būs dubultā, t.i., vairāk nekā 10 MB

MP3

MPEG Layer 3 ir saspiests audio formāts, ko plaši izmanto dziesmu saspiešanai kopš 1990. gadiem. Tas var ievērojami samazināt faila lielumu līdz vienai desmitdaļai neapstrādāta PCM formāta

Atsauce:

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

en.wikipedia.org/wiki/MP3

4. darbība: konvertēšanas formāts

Šis projekts izmanto FFmpeg, lai pārvērstu video ESP32 lasāmā formātā.

Lūdzu, lejupielādējiet un instalējiet FFmpeg savā oficiālajā vietnē, ja vēl neesat:

Konvertēt uz PCM audio

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

Konvertēt uz MP3 audio

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

Pārvērst par 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

Konvertēt uz animētu GIF

ffmpeg -i input.mp4 -vf "fps = 15, skala = -1: 176: karodziņi = lanczos, crop = 220: in_h: (in_w -220)/2: 0, split [s0] [s1]; [s0] paletegen [p]; [s1] [p] paletteuse "-loop -1 220_15fps.gif

Pārvērst par 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

Piezīme:

FFmpeg konvertētu animētu-g.webp" />

5. solis: aparatūras sagatavošana

Aparatūras sagatavošana
Aparatūras sagatavošana

ESP32 izstrādātāju padome

Jebkurai divkodolu ESP32 dev plāksnei vajadzētu būt kārtībā, šoreiz es izmantoju TTGO ESP32-Micro.

Krāsu displejs

Jebkuram krāsu displejam, kuru Arduino_GFX atbalsta, vajadzētu būt kārtībā, šoreiz es izmantoju ILI9225 sadalīšanas paneli ar SD kartes slotu.

Arduino_GFX atbalstīto krāsu displeju sarakstu varat atrast vietnē Github:

github.com/moononournation/Arduino_GFX

SD karte

Jebkurai SD kartei vajadzētu būt kārtībā, šoreiz es izmantoju SanDisk "normālā ātruma" 8 GB micro SD ar SD adapteri.

Audio

Ja vēlaties izmantot tikai austiņas, vienkārši pievienojiet austiņu tapas 26. tapai, un GND var klausīties audio. Vai arī varat izmantot nelielu pastiprinātāju, lai atskaņotu audio ar skaļruni.

Citi

Daži maizes dēļi un maizes dēļu vadi

6. darbība: SD saskarne

SD interfeiss
SD interfeiss
SD saskarne
SD saskarne

ILI9225 LCD sadalīšanas panelī bija arī SD crd slota sadalīšanas tapas. To var izmantot kā SPI kopni vai 1 bitu SD kopni. Kā minēts iepriekšējos norādījumos, es labprātāk izmantoju 1 bitu SD kopni, tāpēc šis projekts balstīsies uz 1 bitu SD kopni.

7. solis: salieciet to kopā

Salieciet to kopā
Salieciet to kopā
Salieciet to kopā
Salieciet to kopā
Salieciet to kopā
Salieciet to kopā

Iepriekš redzamajos attēlos ir redzama testēšanas platforma, kuru izmantoju šajā projektā. Baltā maize ir iespiesta 3D formātā, to varat lejupielādēt un izdrukāt vietnē thingiverse:

Faktiskais savienojums ir atkarīgs no tā, kāda aparatūra jums ir rokās.

Šeit ir savienojuma kopsavilkums:

ESP32

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

Atsauce:

8. solis: programma

Programma
Programma

Arduino IDE

Lejupielādējiet un instalējiet Arduino IDE, ja vēl neesat to izdarījis:

www.arduino.cc/en/main/software

ESP32 atbalsts

Izpildiet instalēšanas instrukcijas, lai pievienotu ESP32 atbalstu, ja vēl neesat to izdarījis:

github.com/espressif/arduino-esp32

Arduino_GFX bibliotēka

Lejupielādējiet jaunākās Arduino_GFX bibliotēkas: (nospiediet "Klonēt vai lejupielādēt" -> "Lejupielādēt ZIP")

github.com/moononournation/Arduino_GFX

Importējiet bibliotēkas Arduino IDE. (Izvēlne Arduino IDE "Skice" -> "Iekļaut bibliotēku" -> "Pievienot. ZIP bibliotēku" -> atlasiet lejupielādēto ZIP failu)

ESP8266Audio

Lejupielādēt jaunākās ESP8266Audio bibliotēkas: (nospiediet "Klonēt vai lejupielādēt" -> "Lejupielādēt ZIP")

github.com/earlephilhower/ESP8266Audio

Importējiet bibliotēkas Arduino IDE. (Izvēlne Arduino IDE "Skice" -> "Iekļaut bibliotēku" -> "Pievienot. ZIP bibliotēku" -> atlasiet lejupielādēto ZIP failu)

RGB565_video koda paraugs

Lejupielādējiet jaunāko RGB565_video parauga kodu: (nospiediet "Klonēt vai lejupielādēt" -> "Lejupielādēt ZIP")

github.com/moononournation/RGB565_video

SD kartes dati

Kopējiet konvertētos failus uz SD karti un ievietojiet LCD kartes slotā

Apkopot un augšupielādēt

  1. Atveriet SDMMC_MJPEG_video_PCM_audio_dualSPI_multitask.ino Arduino IDE
  2. Ja neizmantojat ILI9225, nomainiet jauno klases kodu (ap 35. rindu), lai tas būtu pareizs
  3. Nospiediet pogu Arduino IDE "Augšupielādēt"
  4. Ja jums neizdevās augšupielādēt programmu, mēģiniet atvienot savienojumu starp ESP32 GPIO 2 un SD D0/MISO
  5. Ja jums šķiet, ka orientācija nav pareiza, nomainiet "rotācijas" vērtību (0-3) jaunā klases kodā
  6. Ja programma darbojas labi, varat izmēģināt citu paraugu, sākot ar SDMMC_*
  7. Ja jums nav SD kartes slota vai neesat instalējis FFmpeg, joprojām varat izmēģināt SPIFFS_* piemēru

9. solis: etalons

Etalons
Etalons

Šeit ir veiktspējas kopsavilkums dažādiem video (220x176) un audio (44100 MHz) formātiem:

Formāts Kadrs sekundē (kadri sekundē)
MJPEG + PCM 30
15
RGB565 + PCM 9
MJPEG + MP3 24

Piezīme:

  • MJPEG + PCM var sasniegt augstāku kadru nomaiņas ātrumu sekundē, taču nav nepieciešama atskaņošana nelielā ekrānā, kas ir lielāks par 30 kadriem sekundē
  • RGB565 nav nepieciešams atšifrēšanas process, taču datu apjoms ir pārāk liels, un datu ielādēšanai no SD, 4 bitu SD kopnes un ātrākas SD kartes tiek patērēts daudz laika (to var nedaudz uzlabot (savvaļas minējums var sasniegt aptuveni 12 kadrus sekundē))
  • MP3 atšifrēšanas process vēl nav optimizēts, tagad tas atvēl kodolu 0 MP3 dekodēšanai un kodolu 1 video atskaņošanai

10. solis: laimīgu spēli

Priecīgu spēli!
Priecīgu spēli!

Tagad jūs varat atskaņot video un audio ar savu ESP32, tas pavēra daudzas iespējas!

Es domāju, ka vēlāk es uztaisīšu nelielu vintage televizoru …

Ieteicams: