Mündəricat:

ESP32 ilə Video Oynayın: 10 Adım (Şəkillərlə birlikdə)
ESP32 ilə Video Oynayın: 10 Adım (Şəkillərlə birlikdə)

Video: ESP32 ilə Video Oynayın: 10 Adım (Şəkillərlə birlikdə)

Video: ESP32 ilə Video Oynayın: 10 Adım (Şəkillərlə birlikdə)
Video: ESP32 Tutorial 5 - LED Fade, control brightness of an LED -ESP32 IoT Learnig kit 2024, Noyabr
Anonim
ESP32 ilə video oynat
ESP32 ilə video oynat

Bu Təlimatlar, ESP32 ilə video və audio oynatmaqla bağlı bir şey göstərir.

Addım 1: ESP32 Xüsusiyyətləri və Məhdudiyyətləri

Xüsusiyyətləri

  • 4 SPI avtobusu, 2 SPI avtobusu istifadəçi üçün mövcuddur, bunlar SPI2 və SPI3 və ya HSPI və VSPI adlanır. Hər iki SPI avtobusu ən çox 80 MHz -də işləyə bilər. Teorik olaraq 320x240 16-bit rəngli pikselləri SPI LCD-ə 60 kadr sürətində itələyə bilər, lakin hələ də video məlumatların oxunması və deşifr edilməsi üçün lazım olan əlavə vaxtı hesablamayıb.
  • 1-bit / 4-bit SD avtobusu SD kartı yerli protokola qoşa bilər
  • I2S daxili DAC audio çıxışı
  • video və audio tampon üçün 100 KB -dən çox RAM mövcuddur
  • JPEG (oyun Motion JPEG) və LZW məlumat sıxılma (Animasiya-g.webp" />
  • İki nüvəli versiya, oxunan məlumatları SD kartdan ayıra, deşifr edə və SPI LCD-yə paralel çox vəzifələrə köçürə və oynatma performansını artıra bilər.

Məhdudiyyətlər

  • 16 bit rəngli 320x240 ölçülü ikiqat çərçivə tamponuna sahib olmaq üçün kifayət qədər daxili RAM yoxdur, çoxlu dizaynı məhdudlaşdırır. Daxili RAM -dan daha yavaş olsa da, xarici PSRAM ilə bir az öhdəsindən gələ bilər
  • mp4 videonun kodunu açmaq üçün kifayət qədər işləmə gücü yoxdur
  • bütün ESP32 versiyasının 2 nüvəsi yoxdur, çox tapşırıq nümunəsi yalnız ikili nüvəli versiyada faydalanır

İstinad:

Addım 2: Video Formatı

RGB565

Və ya 16 bit rəng adlanır, MCU və rəngli ekran arasındakı ünsiyyətdə istifadə olunan xam bir məlumat formatıdır. Hər bir rəng pikseli 16 bitlik dəyərlə təmsil olunur, ilk 5 bit qırmızı, 6 bitdən sonra yaşıl, sonra 5 bit mavi rəngdir. 16 bitlik dəyər 65536 rəng dəyişikliyi edə bilər, buna görə də 64K rənglər adlanır. Beləliklə, 1 dəqiqəlik 320x240@30 kadr saniyədə video ölçülü olacaq: 16 * 320 * 240 * 30 * 60 = 2211840000 bit = 276480000 bayt və ya 260 MB -dən çox

Cizgi GIF

Bu, 1990 -cı illərdən bəri internetdə yayılmış bir fayl formatıdır. Hər bir ekran üçün rəng dəyişikliyini 256 rəngə qədər məhdudlaşdırır və əvvəlki çərçivə ilə eyni rəngdə olan pikselləri təkrarlamır. Xüsusilə hər bir animasiya çərçivəsi çox detalları dəyişmədikdə, fayl ölçüsünü çox azalda bilər. LZW sıxılma, 1990 -cı illərin kompüterləri tərəfindən deşifr edilə bilən bir dizaynla hazırlanmışdır, buna görə də ESP32 də onu real vaxtda deşifr etmək üçün kifayət qədər ədalətli işləmə gücünə malikdir.

Hərəkət JPEG

Və ya M-JPEG / MJPEG adlandırılan, məhdud işləmə gücünə malik video çəkmə aparatı üçün ümumi bir video sıxılma formatıdır. Bu əslində hələ də JPEG çərçivələrinin birləşməsidir. MPEG və ya MP4, Motion JPEG ilə müqayisə edin, hesablama baxımından sıx bir çərçivə proqnozlaşdırma texnikasına ehtiyac yoxdur, hər bir çərçivə müstəqildir. Beləliklə, kodlaşdırmaq və deşifr etmək üçün daha az resurs tələb olunur.

İstinad:

en.wikipedia.org/wiki/List_of_monochrome_a…

az.wikipedia.org/wiki/GIF

en.wikipedia.org/wiki/Motion_JPEG

Addım 3: Səs Formatı

PCM

Rəqəmsal audio üçün xam məlumat formatı. ESP32 DAC, 16 bitlik bit dərinliyindən istifadə edir, yəni hər 16 bitlik məlumat rəqəmsal nümunəli analoq siqnalını təmsil edir. Əksər video və mahnı səsi 44100 MHz tezliyində istifadə edir, yəni hər saniyə üçün 44100 nümunə götürülmüş analoq siqnal deməkdir. Beləliklə, 1 dəqiqəlik mono səsli PCM xam məlumatları ölçülü olacaq: 16 * 44100 * 60 = 42336000 bit = 5292000 bayt və ya 5 MB -dan çox. Stereo səsin həcmi ikiqat, yəni 10 MB -dan çox olacaq

MP3

MPEG Layer 3, 1990 -cı illərdən bəri mahnıların sıxılması üçün geniş istifadə olunan sıxılmış səs formatıdır. Fayl ölçüsünü xam PCM formatının onda birindən çox azalda bilər

İstinad:

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

az.wikipedia.org/wiki/MP3

Addım 4: Dönüşümü Formatlayın

Bu layihə FFmpeg istifadə edərək videonu ESP32 oxunaqlı formata çevirir.

Zəhmət olmasa hələ FFmpegi rəsmi saytına yükləyin və quraşdırın:

PCM səsinə çevirin

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

MP3 audioya çevirin

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

RGB565 -ə çevirin

ffmpeg -i input.mp4 -vf "fps = 9, miqyas = -1: 176: bayraqlar = lanczos, məhsul = 220: in_h: (in_w -220)/2: 0" -c: v rawvideo -pix_fmt rgb565be 220_9fps. rgb

Animasiya-g.webp

ffmpeg -i input.mp4 -vf "fps = 15, miqyas = -1: 176: bayraqlar = lanczos, məhsul = 220: in_h: (in_w -220)/2: 0, bölünmüş [s0] [s1]; [s0] palettegen [p]; [s1] [p] paletteuse "-loop -1 220_15fps.gif

Motion JPEG formatına çevirin

ffmpeg -i input.mp4 -vf "fps = 30, miqyas = -1: 176: bayraqlar = lanczos, məhsul = 220: in_h: (in_w -220)/2: 0" -q: v 9 220_30fps.mjpeg

Qeyd:

FFmpeg çevrilmiş Animasiya GIF, bəzi veb vasitələri ilə daha da optimallaşdırıla bilər, birini tapmaq üçün-g.webp" />

Addım 5: Avadanlıqların Hazırlanması

Avadanlıq Hazırlanması
Avadanlıq Hazırlanması

ESP32 inkişaf lövhəsi

Hər iki cüt nüvəli ESP32 inkişaf etdirici lövhəsi yaxşı olmalıdır, bu dəfə TTGO ESP32-Micro istifadə edirəm.

Rəngli Ekran

Arduino_GFX dəstəyinin yaxşı olması lazım olan hər hansı bir rəngli ekran, bu dəfə SD kart yuvası olan ILI9225 qırılma lövhəsindən istifadə edirəm.

Github -da Arduino_GFX tərəfindən dəstəklənən rəngli ekran siyahısını tapa bilərsiniz:

github.com/moononournation/Arduino_GFX

SD Kart

Hər hansı bir SD kart yaxşı olmalıdır, bu dəfə SD adapterli SanDisk "normal sürət" 8 GB micro SD istifadə edirəm.

Səs

Yalnız qulaqlıq istifadə etmək istəyirsinizsə, qulaqlıq pinlərini 26 pininə bağlayın və GND səsi dinləyə bilər. Və ya dinamiklə səs çalmaq üçün kiçik bir gücləndiricidən istifadə edə bilərsiniz.

Digərləri

Bəzi çörək lövhələri və taxta telləri

Addım 6: SD Arayüzü

SD İnterfeysi
SD İnterfeysi
SD İnterfeysi
SD İnterfeysi

ILI9225 LCD qırılma lövhəsində bir SD crd yuvası qırma pinləri də var. SPI avtobusu və ya 1 bitlik SD avtobus kimi istifadə edilə bilər. Əvvəlki təlimatlarda qeyd edildiyi kimi, 1 bitlik SD avtobusdan istifadə etməyi üstün tuturam, buna görə də bu layihə 1 bitlik SD avtobusuna əsaslanacaq.

Addım 7: Birlikdə qoyun

Birlikdə qoyun
Birlikdə qoyun
Birlikdə qoyun
Birlikdə qoyun
Birlikdə qoyun
Birlikdə qoyun

Yuxarıdakı şəkillər bu layihədə istifadə etdiyim test platformasını göstərir. Ağ çörək taxtası 3D çapdır, hər yerdə yükləyə və çap edə bilərsiniz:

Həqiqi əlaqə, əlinizdə olan avadanlıqdan asılıdır.

Budur əlaqə xülasəsi:

ESP32

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

İstinad:

Addım 8: Proqram

Proqram
Proqram

Arduino IDE

Hələ etməsəniz Arduino IDE -ni yükləyin və quraşdırın:

www.arduino.cc/en/main/software

ESP32 dəstəyi

Hələ etməsəniz ESP32 dəstəyi əlavə etmək üçün Quraşdırma Təlimatlarına əməl edin:

github.com/espressif/arduino-esp32

Arduino_GFX Kitabxanası

Ən son Arduino_GFX kitabxanalarını yükləyin: ("Klonla və ya Yüklə" -> "ZIP Yüklə" düyməsini basın)

github.com/moononournation/Arduino_GFX

Arduino IDE kitabxanalarını idxal edin. (Arduino IDE "Sketch" Menyu -> "Kitabxana Daxil et" -> "ZIP Kitabxana Əlavə et" -> endirilmiş ZIP faylını seçin)

ESP8266 Səs

Ən son ESP8266Audio kitabxanalarını yükləyin: ("Klonla və ya Yüklə" -> "ZIP Yüklə" düyməsini basın)

github.com/earlephilhower/ESP8266Audio

Arduino IDE kitabxanalarını idxal edin. (Arduino IDE "Sketch" Menyu -> "Kitabxana Daxil et" -> "ZIP Kitabxana Əlavə et" -> endirilmiş ZIP faylını seçin)

RGB565_video nümunə kodu

Ən son RGB565_video nümunə kodunu yükləyin: ("Klonla və ya Yüklə" -> "ZIP Yüklə" düyməsini basın)

github.com/moononournation/RGB565_video

SD Kart Məlumatları

Dönüştürülmüş faylları SD karta kopyalayın və LCD kart yuvasına daxil edin

Tərtib edin və Yükləyin

  1. Arduino IDE -də SDMMC_MJPEG_video_PCM_audio_dualSPI_multitask.ino açın
  2. ILI9225 istifadə etmirsinizsə, sinif adını düzəltmək üçün yeni sinif kodunu (35 -ci sətir ətrafında) dəyişdirin
  3. Arduino IDE "Yüklə" düyməsini basın
  4. Proqramı yükləyə bilmədinizsə, ESP32 GPIO 2 ilə SD D0/MISO arasındakı əlaqəni kəsməyə çalışın.
  5. İstiqamətin düzgün olmadığını görürsünüzsə, yeni sinif kodundakı "fırlanma" dəyərini (0-3) dəyişdirin
  6. Proqram yaxşı işləyirsə, SDMMC_* ilə digər nümunə başlanğıcını sınaya bilərsiniz.
  7. SD kart yuvanız yoxdursa və ya FFmpeg yüklü deyilsə, yenə də SPIFFS_* nümunəsini sınaya bilərsiniz.

Addım 9: Qiymətləndirmə

Qiymətləndirmə
Qiymətləndirmə

Fərqli video (220x176) və audio (44100 MHz) formatı üçün performans xülasəsi:

Format Saniyədə kadr (saniyədə)
MJPEG + PCM 30
15
RGB565 + PCM 9
MJPEG + MP3 24

Qeyd:

  • MJPEG + PCM daha yüksək kadr sürətinə çata bilər, ancaq 30 kadrdan çox kiçik bir ekranda lazımsız oynatma
  • RGB565, deşifrləmə prosesi tələb etmir, lakin məlumat ölçüsü çox böyükdür və SD, 4-bit SD avtobus və daha sürətli SD kartdan məlumat yüklənərkən çox vaxt sərf edir və onu bir az da yaxşılaşdıra bilər (vəhşi tahmin təxminən 12 fps-ə çata bilər)
  • MP3 deşifr etmə prosesi hələ optimallaşdırılmamışdır, indi MP3 deşifr etmək üçün 0 nüvəsini və video oynatmaq üçün 1 nüvəsini ayırır

Addım 10: Xoşbəxt Oyun

Xoşbəxt Oynama!
Xoşbəxt Oynama!

İndi ESP32 ilə video və audio oynaya bilərsiniz, bir çox imkanları açdı!

Düşünürəm ki, daha sonra kiçik bir vintage televizor hazırlayacağam …

Tövsiyə: