Sommario:
- Passaggio 1: funzionalità e limitazioni di ESP32
- Passaggio 2: formato video
- Passaggio 3: formato audio
- Passaggio 4: conversione del formato
- Passaggio 5: preparazione dell'hardware
- Passaggio 6: interfaccia SD
- Passaggio 7: mettilo insieme
- Passaggio 8: programma
- Passaggio 9: benchmark
- Passaggio 10: buon gioco
Video: Riproduci video con ESP32: 10 passaggi (con immagini)
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-31 10:21
Questo Instructables mostra qualcosa sulla riproduzione di video e audio con ESP32.
Passaggio 1: funzionalità e limitazioni di ESP32
Caratteristiche
- 4 bus SPI, 2 bus SPI disponibili per spazio utente, sono SPI2 e SPI3 o chiamati HSPI e VSPI. Entrambi i bus SPI possono funzionare al massimo a 80 MHz. Teoricamente può trasferire 320x240 pixel di colore a 16 bit a SPI LCD a 60 fps, ma non ha ancora conteggiato il tempo necessario per leggere e decodificare i dati video.
- Il bus SD a 1 bit / 4 bit può collegare la scheda SD nel protocollo nativo
- Uscita audio DAC interna I2S
- oltre 100 KB di RAM disponibili per buffer video e audio
- Potenza di elaborazione sufficiente per decodificare JPEG (riproduzione di Motion JPEG) e compressione dati LZW (riproduzione di-g.webp" />
- La versione dual-core può dividere i dati di lettura dalla scheda SD, decodificare e inviare al display LCD SPI in multi-task paralleli e aumentare le prestazioni di riproduzione
Limitazioni
- non abbastanza RAM interna per avere un doppio frame buffer per 320x240 a colori a 16 bit, limitava il design multitasking. Può superare un po' con la PSRAM esterna anche se è più lenta della RAM interna
- potenza di elaborazione insufficiente per decodificare video mp4
- non tutte le versioni di ESP32 hanno 2 core, il campione multi-task beneficia solo della versione dual-core
Rif.:
Passaggio 2: formato video
RGB565
O chiamato colore a 16 bit è un formato di dati grezzi comunemente utilizzato nella comunicazione tra MCU e display a colori. Ogni pixel di colore rappresentato da un valore a 16 bit, il primo a 5 bit è il valore rosso, i successivi 6 bit sono il valore verde e poi il valore blu a 5 bit. Il valore a 16 bit può creare 65536 variazioni di colore, quindi è anche chiamato 64K colori. Quindi il video di 1 minuto 320x240@30 fps sarà dimensionato: 16 * 320 * 240 * 30 * 60 = 2211840000 bit = 276480000 byte o oltre 260 MB
Questo è un formato di file comune sul Web dagli anni '90. Limita la variazione di colore per ogni schermo fino a 256 colori e non ripete la memorizzazione del pixel con lo stesso colore del fotogramma precedente. Quindi può ridurre molto la dimensione del file, specialmente quando ogni fotogramma dell'animazione non cambia troppi dettagli. La compressione LZW è progettata in grado di essere decodificata dal computer degli anni '90, quindi ESP32 ha anche una potenza di elaborazione sufficiente per decodificarla in tempo reale.
Motion JPEG
O chiamato M-JPEG / MJPEG è un formato di compressione video comune per l'hardware di acquisizione video con potenza di elaborazione limitata. In realtà è semplicemente una concatenazione di fotogrammi JPEG fermi. Confronta con MPEG o MP4, Motion JPEG non è necessaria una tecnica computazionalmente intensiva di previsione interframe, ogni fotogramma è indipendente. Quindi richiede meno risorse per codificare e decodificare.
Rif.:
en.wikipedia.org/wiki/List_of_monochrome_a…
en.wikipedia.org/wiki/GIF
en.wikipedia.org/wiki/Motion_JPEG
Passaggio 3: formato audio
PCM
Un formato di dati grezzi per l'audio digitale. Il DAC ESP32 utilizza una profondità di bit a 16 bit, il che significa che ogni dato a 16 bit rappresenta un segnale analogico campionato digitale. La maggior parte dell'audio di video e canzoni utilizza comunemente una frequenza di campionamento a 44100 MHz, il che significa 44100 segnale analogico campionato per ogni secondo. Quindi, i dati grezzi PCM audio mono di 1 minuto verranno dimensionati: 16 * 44100 * 60 = 42336000 bit = 5292000 byte o oltre 5 MB. La dimensione dell'audio stereo sarà doppia, ovvero superiore a 10 MB
MP3
MPEG Layer 3 è un formato audio compresso ampiamente utilizzato per la compressione delle canzoni dagli anni '90. Può ridurre drasticamente le dimensioni del file a meno di un decimo del formato PCM grezzo
Rif.:
en.wikipedia.org/wiki/Pulse-code_modulatio…
en.wikipedia.org/wiki/MP3
Passaggio 4: conversione del formato
Questo progetto utilizza FFmpeg per convertire il video in formato leggibile ESP32.
Si prega di scaricare e installare FFmpeg sul loro sito ufficiale se non ancora:
Converti in audio PCM
ffmpeg -i input.mp4 -f u16be -acodec pcm_u16le -ar 44100 -ac 1 44100_u16le.pcm
Converti in audio MP3
ffmpeg -i input.mp4 -ar 44100 -ac 1 -q:a 9 44100.mp3
Converti in 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 in-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 in 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:
La-g.webp" />
Passaggio 5: preparazione dell'hardware
Scheda di sviluppo ESP32
Qualsiasi scheda di sviluppo ESP32 dual-core dovrebbe andare bene, questa volta sto usando un TTGO ESP32-Micro.
Display a colori
Qualsiasi display a colori che supporta Arduino_GFX dovrebbe essere ok, questa volta sto usando una scheda breakout ILI9225 con slot per schede SD.
Puoi trovare l'elenco dei display a colori supportati da Arduino_GFX su Github:
github.com/moononournation/Arduino_GFX
Scheda SD
Qualsiasi scheda SD dovrebbe andare bene, questa volta sto usando una micro SD SanDisk da 8 GB a "velocità normale" con adattatore SD.
Audio
Se si desidera utilizzare solo le cuffie, è sufficiente collegare i pin delle cuffie al pin 26 e GND può ascoltare l'audio. Oppure puoi usare un piccolo amplificatore per riprodurre l'audio con l'altoparlante.
Altri
Alcune breadboard e fili per breadboard
Passaggio 6: interfaccia SD
La scheda breakout LCD ILI9225 includeva anche un pin di breakout per slot crd SD. Può essere utilizzato come bus SPI o bus SD a 1 bit. Come menzionato nelle mie precedenti istruzioni, preferisco utilizzare il bus SD a 1 bit, quindi questo progetto si baserà sul bus SD a 1 bit.
Passaggio 7: mettilo insieme
Le immagini sopra mostrano la piattaforma di test che sto utilizzando in questo progetto. La breadboard bianca è stampata in 3D, puoi scaricarla e stamparla su whativerse:
La connessione effettiva dipende dall'hardware che hai in mano.
Ecco il riepilogo dei collegamenti:
ESP32
Vcc -> LCD Vcc GND -> LCD GND GPIO 2 -> SD D0/MISO -> Resistenza 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
Rif.:
Passaggio 8: programma
Arduino IDE
Scarica e installa Arduino IDE se non lo sei ancora fatto:
www.arduino.cc/en/main/software
Supporto ESP32
Segui le istruzioni di installazione per aggiungere il supporto ESP32 se non lo hai ancora fatto:
github.com/espressif/arduino-esp32
Libreria Arduino_GFX
Scarica le ultime librerie Arduino_GFX: (premi "Clone or Download" -> "Download ZIP")
github.com/moononournation/Arduino_GFX
Importa librerie in Arduino IDE. (Menu "Sketch" dell'IDE Arduino -> "Includi libreria" -> "Aggiungi libreria. ZIP" -> seleziona il file ZIP scaricato)
ESP8266Audio
Scarica le ultime librerie ESP8266Audio: (premi "Clone or Download" -> "Download ZIP")
github.com/earlephilhower/ESP8266Audio
Importa librerie in Arduino IDE. (Menu "Sketch" dell'IDE Arduino -> "Includi libreria" -> "Aggiungi libreria. ZIP" -> seleziona il file ZIP scaricato)
Codice di esempio RGB565_video
Scarica l'ultimo codice di esempio RGB565_video: (premi "Clona o scarica" -> "Scarica ZIP")
github.com/moononournation/RGB565_video
Dati della scheda SD
Copia i file convertiti sulla scheda SD e inseriscili nello slot per schede LCD
Compila e carica
- Apri SDMMC_MJPEG_video_PCM_audio_dualSPI_multitask.ino nell'IDE di Arduino
- Se non stai usando ILI9225, cambia il nuovo codice classe (intorno alla riga 35) per correggere il nome della classe
- Premi il pulsante "Carica" dell'IDE Arduino
- Se non sei riuscito a caricare il programma, prova a scollegare la connessione tra ESP32 GPIO 2 e SD D0/MISO
- Se trovi che l'orientamento non è corretto, cambia il valore di "rotazione" (0-3) nel nuovo codice di classe
- Se il programma funziona bene puoi provare altri esempi di avvio con SDMMC_*
- Se non hai uno slot per schede SD o non hai FFmpeg installato, puoi comunque provare SPIFFS_* esempio
Passaggio 9: benchmark
Ecco il riepilogo delle prestazioni per diversi formati video (220x176) e audio (44100 MHz):
Formato | Fotogramma al secondo (fps) |
MJPEG + PCM | 30 |
15 | |
RGB565 + PCM | 9 |
MJPEG + MP3 | 24 |
Nota:
- MJPEG + PCM può raggiungere fps più alti ma non è necessario giocare su uno schermo piccolo superiore a 30 fps
- RGB565 non richiede il processo di decodifica, ma la dimensione dei dati è troppo grande e il tempo impiegato per caricare i dati da SD, bus SD a 4 bit e scheda SD più veloce può migliorarlo un po' (l'ipotesi azzardata può raggiungere circa 12 fps)
- Processo di decodifica MP3 non ancora ottimizzato, ora è dedicato il core 0 per la decodifica MP3 e il core 1 per la riproduzione di video
Passaggio 10: buon gioco
Ora puoi riprodurre video e audio con il tuo ESP32, ha sbloccato molte possibilità!
Penso che più tardi realizzerò una piccola TV vintage…
Consigliato:
Riproduci brani con Arduino utilizzando ADC a PWM su trasformatore flyback o altoparlante: 4 passaggi
Riproduci brani con Arduino usando ADC su PWM su trasformatore o altoparlante Flyback: Ciao ragazzi, questa è la seconda parte del mio altro istruttivo (che è stato molto difficile), in sostanza, in questo progetto, ho usato l'ADC e i TIMER sul mio Arduino per converti il segnale audio in un segnale PWM. Questo è molto più semplice del mio precedente Instructa
Riproduci brani (MP3) con Arduino utilizzando PWM su altoparlante o trasformatore flyback: 6 passaggi (con immagini)
Riproduci brani (MP3) con Arduino usando PWM su altoparlante o trasformatore flyback: Ciao ragazzi, questo è il mio primo istruttore, spero che ti piaccia!! Fondamentalmente, in questo progetto ho usato la comunicazione seriale tra il mio Arduino e il mio laptop, per trasmettere dati musicali dal mio laptop ad Arduino. E usando i TIMER di Arduino t
Riproduci CD senza lettore CD, utilizzando AI e YouTube: 10 passaggi (con immagini)
Riproduci CD senza lettore CD, utilizzando AI e YouTube: vuoi riprodurre i tuoi CD ma non hai più un lettore CD? Non hai avuto il tempo di copiare i tuoi CD? Li ho strappati ma i file non sono disponibili quando necessario? Nessun problema. Lascia che l'AI (intelligenza artificiale) identifichi il tuo CD e YouTube lo riproduca! Ho scritto un'app per Android facendo
Riproduci musica con Arduino!: 5 passaggi (con immagini)
Riproduci musica con Arduino!: In questo tutorial ti mostrerò come suono la musica usando un Arduino UNO e un modulo SD Card. Useremo la comunicazione SPI. Cominciamo
Riproduci canzoni usando il motore passo-passo!!: 11 passaggi (con immagini)
Riproduci canzoni usando il motore passo-passo!!: Questo progetto riguarda la progettazione di una semplice interfaccia dinamica, che consentirà di interagire con un motore passo-passo in due modi diversi. La prima interfaccia controllerà la direzione e la velocità del motore passo-passo attraverso l'uso di un semplice GUI, che h