İçindekiler:
- Adım 1: ESP32 Özellikleri ve Sınırlamaları
- 2. Adım: Video Formatı
- 3. Adım: Ses Formatı
- 4. Adım: Dönüştürmeyi Biçimlendirin
- Adım 5: Donanım Hazırlığı
- Adım 6: SD Arayüzü
- 7. Adım: Bir araya getirin
- Adım 8: Program
- 9. Adım: Karşılaştırma
- Adım 10: Mutlu Oynama
Video: ESP32 ile Video Oynat: 10 Adım (Resimlerle)
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-31 10:26
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ığı
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ü
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
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
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
- Arduino IDE'de SDMMC_MJPEG_video_PCM_audio_dualSPI_multitask.ino'yu açın
- 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.
- Arduino IDE "Yükle" düğmesine basın
- Programı yükleyemediyseniz, ESP32 GPIO 2 ile SD D0/MISO arasındaki bağlantıyı kesmeyi deneyin.
- Yönlendirmenin doğru olmadığını fark ederseniz, yeni sınıf kodunda "döndürme" değerini (0-3) değiştirin.
- Program iyi çalışıyorsa, SDMMC_* ile başka bir örnek başlatmayı deneyebilirsiniz.
- SD kart yuvanız yoksa veya FFmpeg kurulu değilse, yine de SPIFFS_* örneğini deneyebilirsiniz
9. Adım: Karşılaştırma
İş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
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:
Uno ile ESP8266 WeMos D1 R1 Wifi İşlemci Kullanarak ESP32-Cam ile Görüntü Yakalama ve Gönderme: 7 Adım
ESP8266 WeMos D1 R1 Uno ile Wifi İşlemci Kullanarak ESP32-Cam ile Görüntü Yakalayın ve Gönderin: Uno ile ESP8266 WeMos D1 R1 WiFI İşlemci kullanarak ESP32-Cam (OV2640) kullanarak görüntü yakalayın ve e-postaya gönderin, Google Drive'a kaydedin ve gönderin Twilio'yu kullanan Whatsapp.Requirements: Uno'lu ESP8266 WeMos D1 R1 WiFI İşlemci (https://protosupplies
Shadow Light Box - Arduino ile IR Uzaktan Kumanda ile Kontrol: 8 Adım (Resimlerle)
Gölge Işık Kutusu - Arduino ile IR Uzaktan Kumanda ile Kontrol: Bu talimat, bir sonraki Noel için gölge ışık kutusunun nasıl yapılacağına rehberlik edecektir. Kendi odanızı dekore edebilir veya arkadaşınıza hediye olarak yapabilirsiniz. Bu gölge kutusu, Kırmızı, Mavi, Yeşil renklerle karıştırarak çeşitli renkler yapabilir
ESP32 ile PWM - Arduino IDE ile ESP 32'de PWM ile LED Karartma: 6 Adım
ESP32 ile PWM | Arduino IDE ile ESP 32'de PWM ile LED Karartma: Bu talimatta Arduino IDE & PWM temel olarak herhangi bir MCU'dan analog çıkış üretmek için kullanılır ve bu analog çıkış 0V ile 3.3V (esp32 durumunda) arasında herhangi bir şey olabilir & itibaren
100 Abone Youtube Oynat Butonu !: 8 Adım
100 Abone Youtube Oynat Düğmesi !: Başlığın dediği gibi, Youtube kanalım 100 Aboneyi geçtiğinden, bazı kutlamaların zamanı geldi, Ben de kendi 100 Abonelik Oynat Düğmemi almaya karar verdim! O halde daha fazla gecikmeden Başlayalım
Bağımsız CD-ROM Sürücünüze Oynat/Atla Düğmesi Ekleyin: 4 Adım
Bağımsız CD-ROM Sürücünüze Oynat/Atla Düğmesi Ekleyin: Eski bir CD-ROM sürücüsünden bir CD çalar yapmak istiyorsanız (buraya bakın) ancak sahip olduğunuz sürücüde ön tarafta OYNAT/SKIP düğmesi yoksa …..Boşvermeyin, çoğu Cd sürücüsüne bir tane ekleyebilirsiniz,>>>> Okumaya devam etmek