Table des matières:

Lire la vidéo avec ESP32 : 10 étapes (avec photos)
Lire la vidéo avec ESP32 : 10 étapes (avec photos)

Vidéo: Lire la vidéo avec ESP32 : 10 étapes (avec photos)

Vidéo: Lire la vidéo avec ESP32 : 10 étapes (avec photos)
Vidéo: DEBUTER AVEC l'ESP32 - CAM 2024, Juillet
Anonim
Lire la vidéo avec ESP32
Lire la vidéo avec ESP32

Ces Instructables montrent quelque chose sur la lecture vidéo et audio avec ESP32.

Étape 1: Fonctionnalités et limitations de l'ESP32

Caractéristiques

  • 4 bus SPI, 2 bus SPI disponibles pour l'espace utilisateur, ce sont SPI2 et SPI3 ou appelés HSPI et VSPI. Les deux bus SPI peuvent fonctionner au maximum à 80 MHz. Théoriquement, il peut envoyer 320 x 240 pixels de couleur 16 bits vers l'écran LCD SPI à 60 ips, mais il n'a pas encore compté le temps nécessaire à la lecture et au décodage des données vidéo.
  • Le bus SD 1 bit/4 bits peut connecter une carte SD en protocole natif
  • Sortie audio DAC interne I2S
  • plus de 100 Ko de RAM disponibles pour la mémoire tampon vidéo et audio
  • Puissance de traitement suffisante pour décoder le JPEG (lire le Motion JPEG) et la compression de données LZW (lire le-g.webp" />
  • La version double cœur peut diviser les données de lecture de la carte SD, décoder et pousser vers l'écran LCD SPI en multi-tâches parallèles et améliorer les performances de lecture

Limites

  • pas assez de RAM interne pour avoir un double frame buffer pour 320x240 en couleur 16 bits, cela a limité la conception multitâche. Il peut surmonter un peu avec la PSRAM externe bien qu'il soit plus lent que la RAM interne
  • pas assez de puissance de traitement pour décoder la vidéo mp4
  • toutes les versions ESP32 n'ont pas 2 cœurs, l'échantillon multitâche ne profite que sur la version double cœur

Réf.:

Étape 2: Format vidéo

RVB565

Ou appelé couleur 16 bits est un format de données brutes couramment utilisé sur la communication entre le MCU et l'affichage couleur. Chaque pixel de couleur représenté par une valeur de 16 bits, le premier 5 bits est la valeur rouge, les 6 bits suivants sont la valeur verte, puis la valeur bleue 5 bits. La valeur 16 bits peut créer une variation de couleur de 65536, elle est donc également appelée couleurs 64K. Donc 1 minute de vidéo 320x240@30 fps sera dimensionnée: 16 * 320 * 240 * 30 * 60 = 2211840000 bits = 276480000 octets ou plus de 260 Mo

Il s'agit d'un format de fichier courant sur le Web depuis les années 1990. Il limite la variation de couleur pour chaque écran jusqu'à 256 couleurs et ne répète pas le stockage du pixel de la même couleur que l'image précédente. Cela peut donc réduire considérablement la taille du fichier, surtout lorsque chaque image d'animation ne change pas trop de détails. La compression LZW est conçue pour être décodée par un ordinateur des années 1990, de sorte que l'ESP32 dispose également d'une puissance de traitement suffisante pour la décoder en temps réel.

Motion JPEG

Ou appelé M-JPEG / MJPEG est un format de compression vidéo courant pour le matériel de capture vidéo avec une puissance de traitement limitée. Il s'agit en fait simplement d'une concaténation d'images JPEG fixes. Comparez avec MPEG ou MP4, Motion JPEG n'a pas besoin de technique de prédiction inter-images gourmande en calculs, chaque image est indépendante. Il nécessite donc moins de ressources pour coder et décoder.

Réf.:

en.wikipedia.org/wiki/List_of_monochrome_a…

en.wikipedia.org/wiki/GIF

en.wikipedia.org/wiki/Motion_JPEG

Étape 3: Format audio

PCM

Un format de données brutes pour l'audio numérique. Le DAC ESP32 utilise une profondeur de bits de 16 bits, ce qui signifie que chaque donnée de 16 bits représente un signal analogique échantillonné numériquement. La plupart des vidéos et des morceaux audio utilisent généralement une fréquence d'échantillonnage de 44 100 MHz, ce qui signifie un signal analogique échantillonné à 44 100 par seconde. Ainsi, 1 minute de données brutes PCM audio mono sera dimensionnée: 16 * 44100 * 60 = 42336000 bits = 5292000 octets ou plus de 5 Mo. La taille de l'audio stéréo sera double, soit plus de 10 Mo

MP3

MPEG Layer 3 est un format audio compressé largement utilisé pour la compression de chansons depuis les années 1990. Il peut réduire considérablement la taille du fichier à moins d'un dixième du format PCM brut

Réf.:

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

en.wikipedia.org/wiki/MP3

Étape 4: Conversion de format

Ce projet utilise FFmpeg pour convertir la vidéo au format lisible ESP32.

Veuillez télécharger et installer FFmpeg sur leur site officiel si ce n'est pas encore fait:

Convertir en audio PCM

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

Convertir en audio MP3

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

Convertir en 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. RVB

Convertir en-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

Convertir en 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

Noter:

Le-g.webp" />

Étape 5: Préparation du matériel

Préparation du matériel
Préparation du matériel

Carte de développement ESP32

Toute carte de développement ESP32 double cœur devrait être ok, cette fois j'utilise un TTGO ESP32-Micro.

Affichage couleur

Tout écran couleur pris en charge par Arduino_GFX devrait être ok, cette fois j'utilise une carte de dérivation ILI9225 avec un emplacement pour carte SD.

Vous pouvez trouver la liste d'affichage des couleurs prise en charge par Arduino_GFX sur Github:

github.com/moononournation/Arduino_GFX

Carte SD

N'importe quelle carte SD devrait être ok, cette fois j'utilise une micro SD SanDisk "à vitesse normale" de 8 Go avec adaptateur SD.

l'audio

Si vous souhaitez utiliser uniquement un casque, connectez simplement les broches du casque à la broche 26 et GND peut écouter l'audio. Ou vous pouvez utiliser un petit amplificateur pour lire de l'audio avec un haut-parleur.

Autres

Certaines planches à pain et fils de planche à pain

Étape 6: Interface SD

Interface SD
Interface SD
Interface SD
Interface SD

La carte de dérivation LCD ILI9225 comprend également des broches de dérivation pour fente SD. Il peut être utilisé comme bus SPI ou bus SD 1 bit. Comme mentionné dans mes instructables précédentes, je préfère utiliser un bus SD 1 bit, donc ce projet sera basé sur un bus SD 1 bit.

Étape 7: Assemblez-le

Mettre ensemble
Mettre ensemble
Mettre ensemble
Mettre ensemble
Mettre ensemble
Mettre ensemble

Les images ci-dessus montrent la plate-forme de test que j'utilise dans ce projet. La planche à pain blanche est imprimée en 3D, vous pouvez la télécharger et l'imprimer sur thingverse:

La connexion réelle dépend du matériel que vous avez en main.

Voici le résumé de la connexion:

ESP32

Vcc -> LCD Vcc GND -> LCD GND GPIO 2 -> SD D0/MISO -> résistance 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

Réf.:

Étape 8: programmer

Programme
Programme

IDE Arduino

Téléchargez et installez Arduino IDE si vous ne l'êtes pas encore:

www.arduino.cc/en/main/software

Prise en charge ESP32

Suivez les instructions d'installation pour ajouter le support ESP32 si vous ne le faites pas encore:

github.com/espressif/arduino-esp32

Bibliothèque Arduino_GFX

Téléchargez les dernières bibliothèques Arduino_GFX: (appuyez sur "Cloner ou Télécharger" -> "Télécharger ZIP")

github.com/moononournation/Arduino_GFX

Importez des bibliothèques dans Arduino IDE. (Menu "Sketch" de l'IDE Arduino -> "Inclure la bibliothèque" -> "Ajouter une bibliothèque. ZIP" -> sélectionnez le fichier ZIP téléchargé)

ESP8266Audio

Téléchargez les dernières bibliothèques ESP8266Audio: (appuyez sur "Cloner ou Télécharger" -> "Télécharger ZIP")

github.com/earlephilhower/ESP8266Audio

Importez des bibliothèques dans Arduino IDE. (Menu "Sketch" Arduino IDE -> "Inclure la bibliothèque" -> "Ajouter une bibliothèque. ZIP" -> sélectionnez le fichier ZIP téléchargé)

Exemple de code RGB565_video

Téléchargez le dernier exemple de code RGB565_video: (appuyez sur "Cloner ou Télécharger" -> "Télécharger ZIP")

github.com/moononournation/RGB565_video

Données de la carte SD

Copiez les fichiers convertis sur la carte SD et insérez-les dans la fente pour carte LCD

Compiler et télécharger

  1. Ouvrez SDMMC_MJPEG_video_PCM_audio_dualSPI_multitask.ino dans Arduino IDE
  2. Si vous n'utilisez pas ILI9225, modifiez le nouveau code de classe (autour de la ligne 35) pour corriger le nom de la classe
  3. Appuyez sur le bouton "Télécharger" de l'IDE Arduino
  4. Si vous n'avez pas réussi à télécharger le programme, essayez de détacher la connexion entre ESP32 GPIO 2 et SD D0/MISO
  5. Si vous trouvez que l'orientation n'est pas correcte, modifiez la valeur de "rotation" (0-3) dans le nouveau code de classe
  6. Si le programme fonctionne bien, vous pouvez essayer d'autres exemples en commençant par SDMMC_*
  7. Si vous n'avez pas d'emplacement pour carte SD ou si FFmpeg n'est pas installé, vous pouvez toujours essayer l'exemple SPIFFS_*

Étape 9: Analyse comparative

Référence
Référence

Voici le résumé des performances pour différents formats vidéo (220x176) et audio (44100 MHz):

Format Image par seconde (fps)
MJPEG + PCM 30
15
RGB565 + PCM 9
MJPEG + MP3 24

Noter:

  • MJPEG + PCM peut atteindre des fps plus élevés mais il est inutile de jouer dans un petit écran supérieur à 30 fps
  • RGB565 ne nécessite pas de processus de décodage, mais la taille des données est trop importante et beaucoup de temps est consommé pour charger les données à partir d'une carte SD, un bus SD 4 bits et une carte SD plus rapide peuvent l'améliorer un peu (la supposition peut atteindre environ 12 fps)
  • Processus de décodage MP3 pas encore optimisé, il est désormais dédié au core 0 pour le décodage MP3 et au core 1 pour la lecture de vidéo

Étape 10: Bon jeu

Bon jeu !
Bon jeu !

Vous pouvez désormais lire de la vidéo et de l'audio avec votre ESP32, cela a débloqué de nombreuses possibilités !

Je pense que je ferai une petite télé vintage plus tard…

Conseillé: