İçindekiler:

ESP32 ile Video Oynat: 10 Adım (Resimlerle)
ESP32 ile Video Oynat: 10 Adım (Resimlerle)

Video: ESP32 ile Video Oynat: 10 Adım (Resimlerle)

Video: ESP32 ile Video Oynat: 10 Adım (Resimlerle)
Video: Semih Varol | En Yeni Tiktok Videosu | #shorts 2024, Kasım
Anonim
ESP32 ile Video Oynat
ESP32 ile Video Oynat

Bu Instructables, ESP32 ile video ve ses oynatma hakkında bir şeyler gösterir.

Adım 1: ESP32 Özellikleri ve Sınırlamaları

Özellikleri

  • 4 SPI bus, 2 SPI bus kullanıcı alanı için kullanılabilir, bunlar SPI2 ve SPI3'tür veya HSPI ve VSPI olarak adlandırılır. Her iki SPI veri yolu da en fazla 80 MHz'de çalışabilir. Teorik olarak 320x240 16 bit renkli pikselleri 60 fps'de SPI LCD'ye aktarabilir, ancak video verilerinin okunması ve kodunun çözülmesi için gereken süreyi henüz saymamıştır.
  • 1 bit / 4 bit SD veri yolu, SD kartı yerel protokole bağlayabilir
  • I2S dahili DAC ses çıkışı
  • video ve ses arabelleği için 100 KB'den fazla RAM
  • JPEG (Hareketli JPEG oynat) ve LZW veri sıkıştırma (Animasyonlu-g.webp" />
  • Çift çekirdekli sürüm, SD karttan okuma verilerini bölebilir, kodu çözebilir ve SPI LCD'ye aktarabilir ve paralel çoklu görevlere aktarabilir ve oynatma performansını artırabilir

sınırlamalar

  • 16 bit renkte 320x240 için çift çerçeve arabelleğine sahip olmak için yeterli dahili RAM olmaması, çoklu görev tasarımını sınırladı. Dahili RAM'den daha yavaş olmasına rağmen harici PSRAM ile biraz üstesinden gelebilir
  • mp4 videonun kodunu çözmek için yeterli işlem gücü yok
  • tüm ESP32 sürümlerinde 2 çekirdek bulunmaz, çoklu görev örneği yalnızca çift çekirdekli sürümde fayda sağlar

Referans:

2. Adım: Video Formatı

RGB565

Veya 16 bit renk olarak adlandırılan, MCU ve renkli ekran arasındaki iletişimde yaygın olarak kullanılan bir ham veri formatıdır. 16 bitlik bir değerle temsil edilen her renk pikseli, ilk 5 bitlik kırmızı değer, ardından 6 bitlik yeşil değer ve ardından 5 bitlik mavi değerdir. 16 bitlik değer 65536 renk değişimi yapabildiğinden 64K renk olarak da adlandırılır. Yani 1 dakikalık 320x240@30 fps video boyutlandırılacaktır: 16 * 320 * 240 * 30 * 60 = 2211840000 bit = 276480000 bayt veya 260 MB'ın üzerinde

Animasyonlu GIF

Bu, 1990'lardan beri web'de yaygın bir dosya biçimidir. Her ekran için renk varyasyonunu 256 renge kadar sınırlar ve önceki kareyle aynı renkte olan pikseli tekrarlamaz. Bu nedenle, özellikle her animasyon karesi çok fazla ayrıntı değiştirmediğinde, dosya boyutunu çok azaltabilir. LZW sıkıştırması 1990'ların bilgisayarı tarafından kodu çözülebilecek şekilde tasarlanmıştır, bu nedenle ESP32 ayrıca gerçek zamanlı olarak kodunu çözmek için yeterince adil işlem gücüne sahiptir.

Hareketli JPEG

Veya M-JPEG / MJPEG olarak adlandırılan, sınırlı işlem gücüne sahip video yakalama donanımı için yaygın bir video sıkıştırma formatıdır. Aslında sadece hareketsiz JPEG karelerinin bir birleşimidir. MPEG veya MP4, Motion JPEG ile karşılaştırın, hesaplama açısından yoğun interframe tahmin tekniğine gerek yok, her kare bağımsızdır. Bu nedenle, kodlamak ve kodunu çözmek için daha az kaynak gerektirir.

Referans:

en.wikipedia.org/wiki/List_of_monochrome_a…

en.wikipedia.org/wiki/GIF

en.wikipedia.org/wiki/Motion_JPEG

3. Adım: Ses Formatı

PCM

Dijital ses için ham veri formatı. ESP32 DAC, 16 bitlik bit derinliği kullanır; bu, her 16 bitlik verinin dijital örneklenmiş bir analog sinyali temsil ettiği anlamına gelir. Çoğu video ve şarkı sesi, yaygın olarak 44100 MHz'de örnekleme hızını kullanır; bu, her saniye için 44100 örneklenmiş analog sinyal anlamına gelir. Böylece, 1 dakikalık mono ses PCM ham verileri boyutlandırılacaktır: 16 * 44100 * 60 = 42336000 bit = 5292000 bayt veya 5 MB'ın üzerinde. Stereo sesin boyutu iki katı, yani 10 MB'ın üzerinde olacaktır.

MP3

MPEG Layer 3, 1990'lardan beri şarkı sıkıştırması için yaygın olarak kullanılan sıkıştırılmış bir ses formatıdır. Dosya boyutunu önemli ölçüde ham PCM formatının onda birinin altına indirebilir

Referans:

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

en.wikipedia.org/wiki/MP3

4. Adım: Dönüştürmeyi Biçimlendirin

Bu proje, videoyu ESP32 okunabilir biçimine dönüştürmek için FFmpeg kullanır.

Henüz değilse, lütfen FFmpeg'i resmi sitelerinden indirip yükleyin:

PCM sesine dönüştür

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

MP3 sese dönüştür

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

RGB565'e Dönüştür

ffmpeg -i input.mp4 -vf "fps=9, ölçek=-1:176:flags=lanczos, kırpma=220:in_h:(in_w-220)/2:0" -c:v rawvideo -pix_fmt rgb565be 220_9fps. rgb

Animasyonlu GIF'e Dönüştür

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]palet kullanımı" -loop -1 220_15fps.gif

Motion JPEG'e Dönüştür

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:

FFmpeg dönüştürülmüş Animasyonlu GIF, bazı web araçları tarafından daha da optimize edilebilir, bir tane bulmak için-g.webp" />

Adım 5: Donanım Hazırlığı

Donanım Hazırlığı
Donanım Hazırlığı

ESP32 Geliştirme Kartı

Herhangi bir çift çekirdekli ESP32 geliştirme kartı iyi olmalı, bu sefer bir TTGO ESP32-Micro kullanıyorum.

Renkli ekran

Arduino_GFX'in desteklediği herhangi bir renkli ekran iyi olmalı, bu sefer SD kart yuvalı bir ILI9225 devre kartı kullanıyorum.

Arduino_GFX destekli renkli ekran listesini Github'da bulabilirsiniz:

github.com/moononournation/Arduino_GFX

Hafıza kartı

Herhangi bir SD kart iyi olmalı, bu sefer SD adaptörlü bir SanDisk "normal hızlı" 8 GB mikro SD kullanıyorum.

Ses

Yalnızca kulaklık kullanmak istiyorsanız, kulaklık pinlerini pin 26'ya bağlamanız yeterlidir; GND sesi dinleyebilir. Veya hoparlörle ses çalmak için küçük bir amplifikatör kullanabilirsiniz.

Diğerleri

Bazı breadboard'lar ve breadboard telleri

Adım 6: SD Arayüzü

SD Arayüzü
SD Arayüzü
SD Arayüzü
SD Arayüzü

ILI9225 LCD devre kartı ayrıca bir SD crd yuvası koparma pimleri içeriyordu. SPI veri yolu veya 1-bit SD veri yolu olarak kullanılabilir. Önceki talimatlarımda belirtildiği gibi, 1 bit SD veri yolunu kullanmayı tercih ediyorum, bu nedenle bu proje 1 bit SD veri yolunu temel alacak.

7. Adım: Bir araya getirin

Bir araya koy
Bir araya koy
Bir araya koy
Bir araya koy
Bir araya koy
Bir araya koy

Yukarıdaki resimler bu projede kullandığım test platformunu göstermektedir. Beyaz devre tahtası 3D yazdırılmıştır, bunuthingiverse'den indirebilir ve yazdırabilirsiniz:

Gerçek bağlantı, elinizde hangi donanıma sahip olduğunuza bağlıdır.

İşte bağlantı özeti:

ESP32

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

Referans:

Adım 8: Program

programı
programı

Arduino IDE'si

Henüz yapmadıysanız Arduino IDE'yi indirin ve yükleyin:

www.arduino.cc/en/main/software

ESP32 Desteği

Henüz yapmadıysanız, ESP32 desteği eklemek için Kurulum Talimatlarını izleyin:

github.com/espressif/arduino-esp32

Arduino_GFX Kitaplığı

En son Arduino_GFX kitaplıklarını indirin: ("Klonla veya İndir" -> "ZIP İndir"e basın)

github.com/moononournation/Arduino_GFX

Arduino IDE'deki kütüphaneleri içe aktarın. (Arduino IDE "Sketch" Menüsü -> "Kitaplığı Dahil Et" -> ". ZIP Kitaplığı Ekle" -> indirilen ZIP dosyasını seçin)

ESP8266Ses

En son ESP8266Audio kitaplıklarını indirin: ("Klonla veya İndir" -> "ZIP İndir"e basın)

github.com/earlephilhower/ESP8266Ses

Arduino IDE'deki kütüphaneleri içe aktarın. (Arduino IDE "Sketch" Menüsü -> "Kitaplığı Dahil Et" -> ". ZIP Kitaplığı Ekle" -> indirilen ZIP dosyasını seçin)

RGB565_video Örnek Kod

En son RGB565_video örnek kodunu indirin: ("Klonla veya İndir" -> "ZIP İndir"e basın)

github.com/moononournation/RGB565_video

SD Kart Verileri

Dönüştürülen dosyaları SD karta kopyalayın ve LCD kart yuvasına takın

Derle ve Yükle

  1. Arduino IDE'de SDMMC_MJPEG_video_PCM_audio_dualSPI_multitask.ino'yu açın
  2. ILI9225 kullanmıyorsanız, sınıf adını düzeltmek için yeni sınıf kodunu (35. satır civarında) değiştirin.
  3. Arduino IDE "Yükle" düğmesine basın
  4. Programı yükleyemediyseniz, ESP32 GPIO 2 ile SD D0/MISO arasındaki bağlantıyı kesmeyi deneyin.
  5. Yönlendirmenin doğru olmadığını fark ederseniz, yeni sınıf kodunda "döndürme" değerini (0-3) değiştirin.
  6. Program iyi çalışıyorsa, SDMMC_* ile başka bir örnek başlatmayı deneyebilirsiniz.
  7. SD kart yuvanız yoksa veya FFmpeg kurulu değilse, yine de SPIFFS_* örneğini deneyebilirsiniz

9. Adım: Karşılaştırma

Kalite Testi
Kalite Testi

İşte farklı video (220x176) ve ses (44100 MHz) formatı için performans özeti:

Biçim Saniyede kare (fps)
MJPEG + PCM 30
15
RGB565 + PCM 9
MJPEG + MP3 24

Not:

  • MJPEG + PCM daha yüksek fps'ye ulaşabilir ancak 30 fps'den büyük küçük bir ekranda gereksiz oynama
  • RGB565 kod çözme işlemi gerektirmez, ancak veri boyutu çok büyüktür ve SD, 4 bit SD veriyolu ve daha hızlı SD karttan veri yüklerken çok fazla zaman harcanır, onu biraz iyileştirebilir (yabani tahmin yaklaşık 12 fps'ye ulaşabilir)
  • MP3 kod çözme işlemi henüz optimize edilmedi, artık MP3 kod çözme için çekirdek 0 ve video oynatmak için çekirdek 1 ayrılmıştır

Adım 10: Mutlu Oynama

Mutlu Oynama!
Mutlu Oynama!

Artık ESP32'nizle video ve ses oynatabilirsiniz, birçok olasılığın kilidini açtı!

Sanırım daha sonra minik bir vintage TV yapacağım…

Önerilen: