Taula de continguts:
- Pas 1: Funcions i limitacions de l'ESP32
- Pas 2: format de vídeo
- Pas 3: format d'àudio
- Pas 4: formatar la conversió
- Pas 5: Preparació del maquinari
- Pas 6: interfície SD
- Pas 7: uniu-lo
- Pas 8: programa
- Pas 9: punt de referència
- Pas 10: Feliç joc
Vídeo: Reprodueix vídeo amb ESP32: 10 passos (amb imatges)
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-31 10:17
Aquest document instructiu mostra alguna cosa sobre la reproducció de vídeo i àudio amb ESP32.
Pas 1: Funcions i limitacions de l'ESP32
Característiques
- 4 bus SPI, 2 bus SPI disponibles per a l’espai de l’usuari, són SPI2 i SPI3 o s’anomenen HSPI i VSPI. Tots dos autobusos SPI poden funcionar com a màxim a 80 MHz. Teòricament pot impulsar 320x240 píxels de color de 16 bits a SPI LCD a 60 fps, però encara no ha comptat el temps de despesa necessari per llegir i descodificar les dades de vídeo.
- El bus SD d’1 bit / 4 bits pot connectar la targeta SD en protocol natiu
- Sortida d’àudio DAC interna I2S
- més de 100 KB de RAM disponibles per a memòria intermèdia de vídeo i àudio
- Potència de processament suficient per descodificar JPEG (reproduir Motion JPEG) i compressió de dades LZW (reproduir-g.webp" />
- La versió de doble nucli pot dividir les dades de lectura de la targeta SD, descodificar-les i enviar-les a SPI LCD en múltiples tasques paral·leles i augmentar el rendiment de la reproducció
Limitacions
- no hi ha prou memòria RAM interna per tenir doble memòria intermèdia per a 320x240 en color de 16 bits, limitava el disseny multitarea. Es pot superar una mica amb PSRAM extern, tot i que és més lent que la RAM interna
- no hi ha prou potència de processament per descodificar el vídeo mp4
- no totes les versions ESP32 tenen 2 nuclis, la mostra de múltiples tasques només es beneficia en la versió de doble nucli
Ref.:
Pas 2: format de vídeo
RGB565
O anomenat color de 16 bits és un format de dades en brut que s’utilitza habitualment en la comunicació entre la MCU i la visualització en color. Cada píxel de color representat per un valor de 16 bits, el primer de 5 bits és de color vermell, després de 6 bits és de color verd i després de 5 bits de color blau. El valor de 16 bits pot fer una variació de color 65536, de manera que també s’anomena colors de 64K. Així, el vídeo de 1 minut 320x240 @ 30 fps tindrà una mida: 16 * 320 * 240 * 30 * 60 = 2211840000 bits = 276480000 bytes o més de 260 MB
Es tracta d’un format de fitxer habitual al web des dels anys noranta. Limita la variació de color per a cada pantalla fins a 256 colors i no repeteix emmagatzemar el píxel amb el mateix color que el marc anterior. Per tant, pot reduir la mida del fitxer, sobretot quan cada marc d’animació no canvia massa detalls. La compressió LZW està dissenyada per a la descodificació de l'ordinador dels anys 90, de manera que ESP32 també té una potència de processament suficient per descodificar-la en temps real.
Motion JPEG
O anomenat M-JPEG / MJPEG és un format de compressió de vídeo comú per al maquinari de captura de vídeo amb una potència de processament limitada. En realitat, és simplement una concatenació de fotogrames JPEG. Compareu-lo amb MPEG o MP4, Motion JPEG no necessita una tècnica computacional intensiva de predicció d’interframe, cada fotograma és independent. Per tant, requereix menys recursos per codificar i descodificar.
Ref.:
ca.wikipedia.org/wiki/List_of_monochrome_a…
ca.wikipedia.org/wiki/GIF
ca.wikipedia.org/wiki/Motion_JPEG
Pas 3: format d'àudio
PCM
Un format de dades en brut per a àudio digital. El DAC ESP32 utilitza una profunditat de bits de 16 bits, és a dir, cada dada de 16 bits representa un senyal analògic mostrejat digitalment. La majoria de l'àudio de vídeo i cançó solen utilitzar una freqüència de mostreig a 44100 MHz, és a dir, 44100 de senyal analògic mostrat per cada segon. Per tant, les dades brutes PCM d’àudio mono d’1 minut tindran una mida: 16 * 44100 * 60 = 42336000 bits = 5292000 bytes o més de 5 MB. La mida de l’àudio estèreo serà doble, és a dir, superarà els 10 MB
MP3
MPEG Layer 3 és un format d’àudio comprimit molt utilitzat per a la compressió de cançons des dels anys noranta. Pot reduir dràsticament la mida del fitxer a menys d’una desena part del format PCM en brut
Ref.:
en.wikipedia.org/wiki/Pulse-code_modulatio…
ca.wikipedia.org/wiki/MP3
Pas 4: formatar la conversió
Aquest projecte utilitza FFmpeg per convertir el vídeo en format llegible ESP32.
Si us plau, descarregueu i instal·leu FFmpeg al seu lloc oficial:
Converteix a àudio PCM
ffmpeg -i input.mp4 -f u16be -acodec pcm_u16le -ar 44100 -ac 1 44100_u16le.pcm
Converteix a àudio MP3
ffmpeg -i input.mp4 -ar 44100 -ac 1 -q: a 9 44100.mp3
Converteix a 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
Converteix a-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
Converteix a 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
Nota:
Algunes eines web poden optimitzar el-g.webp" />
Pas 5: Preparació del maquinari
ESP32 Dev Board
Qualsevol placa de desenvolupament ESP32 de doble nucli hauria d’estar bé, aquesta vegada estic fent servir un TTGO ESP32-Micro.
Pantalla en color
Qualsevol pantalla en color que admeti Arduino_GFX hauria d’estar bé, aquesta vegada estic fent servir una placa de ruptura ILI9225 amb ranura per a targeta SD.
Podeu trobar la llista de visualització de color compatible amb Arduino_GFX a Github:
github.com/moononournation/Arduino_GFX
Targeta SD
Qualsevol targeta SD hauria d’estar bé, aquesta vegada estic fent servir un microSD SanDisk de “velocitat normal” de 8 GB amb adaptador SD.
Àudio
Si voleu utilitzar només auriculars, simplement connecteu els pins dels auriculars al pin 26 i GND pot escoltar l'àudio. O podeu utilitzar un petit amplificador per reproduir àudio amb altaveus.
Altres
Algunes taules de fil i cables de taulers
Pas 6: interfície SD
El tauler de ruptura LCD ILI9225 també incloïa pins de ruptura de ranura SD. Es pot utilitzar com a bus SPI o bus SD de 1 bit. Com es va esmentar a les meves instruccions anteriors, prefereixo utilitzar bus SD d'1 bit, de manera que aquest projecte es basarà en bus SD d'1 bit.
Pas 7: uniu-lo
Les imatges anteriors mostren la plataforma de proves que estic fent servir en aquest projecte. La pissarra blanca està impresa en 3D, podeu descarregar-la i imprimir-la a thingiverse:
La connexió real depèn del maquinari que tingueu entre mans.
Aquí teniu el resum de la connexió:
ESP32
Vcc -> LCD Vcc GND -> LCD GND GPIO 2 -> SD D0 / MISO -> 1k resistència -> 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.:
Pas 8: programa
IDE Arduino
Descarregueu i instal·leu Arduino IDE si encara no ho feu:
www.arduino.cc/ca/main/software
Suport ESP32
Seguiu les instruccions d'instal·lació per afegir suport ESP32 si encara no ho feu:
github.com/espressif/arduino-esp32
Biblioteca Arduino_GFX
Descarregueu les darreres biblioteques Arduino_GFX: (premeu "Clona o descarrega" -> "Descarrega ZIP")
github.com/moononournation/Arduino_GFX
Importeu biblioteques a Arduino IDE. (Arduino IDE "Sketch" Menu -> "Include Library" -> "Add. ZIP Library" -> select ZIP downloaded file)
ESP8266 Àudio
Descarregueu les darreres biblioteques d'Àudio ESP8266: (premeu "Clona o Baixa" -> "Baixa ZIP")
github.com/earlephilhower/ESP8266Audio
Importeu biblioteques a Arduino IDE. (Arduino IDE "Sketch" Menu -> "Include Library" -> "Add. ZIP Library" -> select ZIP downloaded file)
RGB565_codi de mostra de vídeo
Descarregueu el codi de mostra RGB565_video més recent: (premeu "Clona o descarrega" -> "Descarrega ZIP")
github.com/moononournation/RGB565_video
Dades de la targeta SD
Copieu els fitxers convertits a la targeta SD i inseriu-los a la ranura de la targeta LCD
Compila i penja
- Obriu SDMMC_MJPEG_video_PCM_audio_dualSPI_multitask.ino a Arduino IDE
- Si no utilitzeu ILI9225, canvieu el nou codi de classe (al voltant de la línia 35) per corregir el nom de la classe
- Premeu el botó Arduino IDE "Puja"
- Si no heu pogut carregar el programa, proveu de separar la connexió entre ESP32 GPIO 2 i SD D0 / MISO
- Si l'orientació no és correcta, canvieu el valor de "rotació" (0-3) al codi de classe nou
- Si el programa funciona correctament, podeu provar un altre exemple de començament amb SDMMC_ *
- Si no teniu ranura per a targeta SD o no teniu instal·lat FFmpeg, podeu provar l'exemple SPIFFS_ *
Pas 9: punt de referència
Aquí teniu el resum del rendiment per a diferents formats de vídeo (220x176) i àudio (44100 MHz):
Format | Fotograma per segon (fps) |
MJPEG + PCM | 30 |
15 | |
RGB565 + PCM | 9 |
MJPEG + MP3 | 24 |
Nota:
- MJPEG + PCM pot assolir fps més alts, però no és necessari jugar en una pantalla petita superior a 30 fps
- RGB565 no requereix un procés de descodificació, però la mida de les dades és massa gran i es consumeix molt de temps en carregar les dades des de la targeta SD, el bus SD de 4 bits i la targeta SD més ràpida.
- Procés de descodificació MP3 encara no optimitzat, ara dedica el nucli 0 a la descodificació MP3 i el nucli 1 a la reproducció de vídeo
Pas 10: Feliç joc
Ara podeu reproduir vídeo i àudio amb el vostre ESP32, ja que desbloqueja moltes possibilitats.
Crec que faré un petit televisor vintage més endavant …
Recomanat:
Reprodueix dades de Fulls de càlcul de Google a un tauler: 6 passos
Reprodueix dades de Fulls de càlcul de Google a un tauler: els fulls de càlcul són excel·lents en la manipulació de dades però no en la visualització. És per això que van començar a aparèixer tantes empreses especialitzades en visualització de dades i taulers de BI. El problema amb la majoria d’aquests productes és que solen ser cars i
Reprodueix cançons amb Arduino mitjançant ADC a PWM a Flyback Transformer o Speaker: 4 passos
Reproduir cançons amb Arduino Utilitzant ADC per PWM en Flyback Transformer o Speaker: Hola nois, aquesta és la segona part del meu altre instructable (que era molt difícil). Bàsicament, en aquest projecte he utilitzat ADC i TIMERS del meu Arduino per converteix el senyal d'àudio en un senyal PWM. Això és molt més fàcil que la meva anterior Instrucció
Reprodueix Bluetooth a Sonos mitjançant Raspberry Pi: 25 passos
Reproduir Bluetooth a Sonos amb Raspberry Pi: anteriorment vaig escriure una instrucció que descrivia com afegir una línia auxiliar o analògica a Sonos mitjançant un Raspberry Pi. Un lector va preguntar si seria possible transmetre àudio bluetooth des del seu telèfon a Sonos. És fàcil fer-ho amb un dongle bluetooth
Reprodueix música amb Arduino !: 5 passos (amb imatges)
Reproduir música amb Arduino !: En aquest instructiu, us mostraré com toco música amb un mòdul Arduino UNO i una targeta SD. Utilitzarem la comunicació SPI. Comencem
Afegiu un botó Reprodueix / Omet a la vostra unitat de CD-ROM autònoma: 4 passos
Afegiu un botó Reprodueix / Omet a la vostra unitat de CD-ROM autònoma: si voleu fer un reproductor de CD a partir d’una antiga unitat de CD-ROM (vegeu-la aquí), però la unitat que teniu no té un botó PLAY / SKIP a la part frontal ….. No desaparegui, podeu afegir-ne una a la majoria de les unitats de CD, > > > > segueix llegint