Cuprins:
- Pasul 1: Caracteristici și limitări ESP32
- Pasul 2: Format video
- Pasul 3: Format audio
- Pasul 4: Formatarea conversiei
- Pasul 5: Pregătirea hardware-ului
- Pasul 6: Interfață SD
- Pasul 7: puneți-l împreună
- Pasul 8: Program
- Pasul 9: benchmark
- Pasul 10: Joc fericit
Video: Redați videoclipuri cu ESP32: 10 pași (cu imagini)
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-31 10:24
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
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
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ă
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
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
- Deschideți SDMMC_MJPEG_video_PCM_audio_dualSPI_multitask.ino în IDE Arduino
- Dacă nu utilizați ILI9225, modificați noul cod de clasă (în jurul liniei 35) pentru a corecta numele clasei
- Apăsați butonul „Încărcare” Arduino IDE
- 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
- Dacă orientarea nu este corectă, modificați valoarea „rotației” (0-3) în noul cod de clasă
- Dacă programul rulează bine, puteți încerca un alt exemplu de pornire cu SDMMC_ *
- Dacă nu aveți slot pentru card SD sau nu aveți instalat FFmpeg, puteți încerca în continuare exemplul SPIFFS_ *
Pasul 9: benchmark
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
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:
Redați melodii (MP3) cu Arduino folosind PWM pe difuzor sau Flyback Transformer: 6 pași (cu imagini)
Redați melodii (MP3) Cu Arduino folosind PWM pe difuzor sau Flyback Transformer: Bună băieți, acesta este primul meu instructable, sper să vă placă !! Practic, în acest proiect am folosit comunicarea în serie între Arduino și laptopul meu, să transmit date muzicale de pe laptopul meu către Arduino. Și folosind Arduino TIMERS t
Redați CD-uri fără CD Player, folosind AI și YouTube: 10 pași (cu imagini)
Redați CD-uri fără CD Player, folosind AI și YouTube: doriți să redați CD-urile dvs., dar nu mai aveți CD player? Nu ați avut timp să vă rupeți CD-urile? Le-ați rupt, dar fișierele nu sunt disponibile când este necesar? Nicio problemă. Lasă AI (inteligența artificială) să-ți identifice CD-ul și YouTube să-l redea! Am scris o aplicație Android făcând
Redați muzică cu Arduino !: 5 pași (cu imagini)
Joacă muzică cu Arduino !: În acest instructiv, îți voi arăta cum joc muzică folosind un modul Arduino UNO și un modul SD Card. Vom folosi comunicarea SPI. Să începem
Redați imagini 3D ale PCB-urilor dvs. utilizând Eagle3D și POV-Ray: 5 pași (cu imagini)
Redați imagini 3D ale PCB-urilor dvs. utilizând Eagle3D și POV-Ray: Folosind Eagle3D și POV-Ray, puteți face redări 3D realiste ale PCB-urilor. Eagle3D este un script pentru EAGLE Layout Editor. Acest lucru va genera un fișier de urmărire a razelor, care va fi trimis către POV-Ray, care la rândul său va apărea în cele din urmă im
Redați videoclipuri înapoi utilizând Quicktime Player: 5 pași
Redați videoclipuri înapoi folosind Quicktime Player: Acesta este cel mai grozav truc al secolului. Acest instructable vă arată modul ușor de a reda videoclipuri înapoi fără a descărca programe dodgy (dacă nu aveți quicktime, veți avea nevoie de asta.) Imaginea nu are nimic de făcut. fac cu proiectul, dar aveam nevoie