Мазмуну:

ESP32 менен видеону ойнотуу: 10 кадам (сүрөттөр менен)
ESP32 менен видеону ойнотуу: 10 кадам (сүрөттөр менен)

Video: ESP32 менен видеону ойнотуу: 10 кадам (сүрөттөр менен)

Video: ESP32 менен видеону ойнотуу: 10 кадам (сүрөттөр менен)
Video: Free Text to Speech AI: клонируйте свой голос и заставьте его петь! 2024, Ноябрь
Anonim
ESP32 менен видеону ойнотуу
ESP32 менен видеону ойнотуу

Бул Instructables ESP32 менен видео жана аудио ойнотуу жөнүндө бир нерсени көрсөтөт.

1 -кадам: ESP32 өзгөчөлүктөрү жана чектөөлөрү

Өзгөчөлүктөрү

  • 4 SPI автобус, 2 SPI автобус колдонуучу мейкиндиги үчүн жеткиликтүү, алар SPI2 жана SPI3 же HSPI жана VSPI деп аталат. Эки SPI автобусу эң көп 80 МГц чуркай алат. Теориялык жактан алганда, ал 320x240 16-бит түстүү пикселдерди SPI ЖКга 60 кадр / сек ылдамдыкта түртүп кое алат, бирок ал видео маалыматтарын окуу жана декоддоо үчүн керектүү болгон убакытты эсептей элек.
  • 1-бит / 4-бит SD автобус SD протоколдо туташа алат
  • I2S ички DAC аудио чыгаруу
  • видео жана аудио буфер үчүн жеткиликтүү 100 КБдан ашык RAM
  • JPEG (Motion JPEGти ойнотуу) жана LZW маалыматын кысуу (анимацияланган GIFти ойнотуу) үчүн жетиштүү иштетүү күчү
  • Эки ядролук версия SD картадан окулган маалыматты бөлүп, декоддоп жана SPI ЖКга параллелдүү көп тапшырмаларга түртө алат жана ойнотуунун аткарылышын жогорулатат.

Чектөөлөр

  • 16-бит түстүү 320x240 үчүн эки кадрдык буферге ээ болуу үчүн ички оперативдүү RAM жетишсиз, ал көп функциялуу дизайнды чектеген. Бул тышкы PSRAM менен бир аз жеңе алат, бирок ал ички RAMга караганда жайыраак
  • mp4 видеонун кодун чечүү үчүн иштетүү күчү жетишсиз
  • бардык ESP32 версиясында 2 ядро жок, көп тапшырмалуу үлгү эки ядролук версияда гана пайда алып келет

Шилтеме:

2 -кадам: Видео форматы

RGB565

Же 16-бит түс деп аталат, бул MCU менен түстүү дисплейдин ортосундагы байланышта кеңири колдонулат. Ар бир түстүү пиксель 16-бит мааниси менен көрсөтүлөт, биринчи 5-бит кызыл, 6-биттен кийин жашыл, андан кийин 5-бит көк мааниге ээ. 16-бит мааниси 65536 түстү өзгөртө алат, ошондуктан аны 64K түстөр деп да аташат. Ошентип, 1 мүнөт 320x240@30 кадр / сек видео көлөмү болот: 16 * 320 * 240 * 30 * 60 = 2211840000 бит = 276480000 байт же 260 МБ

Анимацияланган GIF

Бул 1990 -жылдан бери интернетте таралган файл форматы. Ал 256 түскө чейин ар бир экрандын түсүнүн өзгөрүшүн чектейт жана пикселди мурунку кадрдагыдай түстө сактабайт. Ошентип, ал файлдын көлөмүн бир топ кыскартат, айрыкча, ар бир анимация кадры өтө майда -чүйдөсүнө чейин өзгөрбөйт. LZW кысуу 1990 -жылдардын компьютери аркылуу декоддолгон жөндөмдүү болуп иштелип чыккан, ошондуктан ESP32 реалдуу убакытта аны чечмелөө үчүн жетиштүү кайра иштетүүчү күчкө ээ.

Motion JPEG

Же M-JPEG / MJPEG деп аталган чектелген иштетүү күчү менен видео тартуу жабдыктары үчүн жалпы видео кысуу форматы деп аталат. Бул чындыгында дагы эле JPEG алкактарынын бириктирилиши. MPEG же MP4 менен салыштырыңыз, Motion JPEGге кадр аралык болжолдоонун эсептөөчү интенсивдүү техникасынын кереги жок, ар бир кадр көз карандысыз. Ошентип, коддоо жана кодду чечүү үчүн азыраак ресурс талап кылынат.

Шилтеме:

en.wikipedia.org/wiki/List_of_monochrome_a…

en.wikipedia.org/wiki/GIF

en.wikipedia.org/wiki/Motion_JPEG

3 -кадам: Аудио форматы

PCM

Санарип аудио үчүн чийки маалымат форматы. ESP32 DAC 16 биттик тереңдикти колдонот, башкача айтканда, ар бир 16 биттик маалымат санариптик аналогдук сигналды билдирет. Көпчүлүк видео жана ыр аудиосу 44100 МГц ылдамдыкта колдонулат, бул ар бир секунд үчүн 44100 аналогдук сигналды билдирет. Ошентип, 1 мүнөттүк моно аудио PCM чийки маалыматтарынын өлчөмү: 16 * 44100 * 60 = 42336000 бит = 5292000 байт же 5 Мб ашык. Стерео аудионун көлөмү эки эсе, башкача айтканда 10 Мбдан ашат

MP3

MPEG Layer 3 - 1990 -жылдардан бери ырды кысуу үчүн кеңири колдонулган кысылган аудио формат. Ал кескин түрдө PCM форматынын ондон бир бөлүгүнө чейин файлдын көлөмүн азайта алат

Шилтеме:

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

en.wikipedia.org/wiki/MP3

4 -кадам: Формат Конверсиясы

Бул долбоор FFmpegтин жардамы менен видеону ESP32 окула турган форматка айландырат.

Сураныч, азырынча FFmpegти расмий сайтына жүктөп алып, орнотуңуз:

PCM аудиого айландыруу

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

MP3 аудиого айландыруу

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

RGB565ке айландыруу

ffmpeg -i input.mp4 -vf "fps = 9, масштаб = -1: 176: желектер = lanczos, түшүм = 220: in_h: (in_w -220)/2: 0" -c: v rawvideo -pix_fmt rgb565be 220_9fps. rgb

Жандуу GIFке айландыруу

ffmpeg -i input.mp4 -vf "fps = 15, масштаб = -1: 176: желектер = lanczos, түшүм = 220: in_h: (in_w -220)/2: 0, бөлүнүү [s0] [s1]; [s0] palettegen [p]; [s1] [p] paletteuse "-loop -1 220_15fps.gif

Motion JPEGке айландыруу

ffmpeg -i input.mp4 -vf "fps = 30, масштаб = -1: 176: желектер = lanczos, түшүм = 220: in_h: (in_w -220)/2: 0" -q: v 9 220_30fps.mjpeg

Эскертүү:

FFmpeg анимацияланган GIFти кээ бир веб -куралдар аркылуу оптималдаштырса болот, сиз аны табуу үчүн-g.webp" />

5 -кадам: Аппараттык даярдоо

Аппараттык даярдоо
Аппараттык даярдоо

ESP32 Dev Board

Бардык эки ядролуу ESP32 иштеп чыгуучу тактасы жакшы болушу керек, бул жолу мен TTGO ESP32-Micro колдонуп жатам.

Түстүү дисплей

Arduino_GFX колдогон ар кандай түстүү дисплей жакшы болушу керек, бул жолу мен SDI картанын уячасы бар ILI9225 тактасын колдонуп жатам.

Сиз Githubдан Arduino_GFX колдоого алынган түстүү дисплей тизмесин таба аласыз:

github.com/moononournation/Arduino_GFX

SD карта

Бардык SD карта жакшы болушу керек, бул жолу мен SD адаптери бар SanDisk "кадимки ылдамдыкта" 8 ГБ микро SD колдонуп жатам.

Аудио

Эгерде сиз гарнитураны гана колдонууну кааласаңыз, гарнитура төөнөгүчтөрүн 26 -пинге туташтырыңыз жана GND аудиону уга алат. Же кичинекей күчөткүчтү колдонуп, аудио менен динамикти ойното аласыз.

Башкалар

Кээ бир столдор жана нан зымдары

6 -кадам: SD интерфейси

SD интерфейси
SD интерфейси
SD интерфейси
SD интерфейси

ILI9225 LCD сындыруучу тактасына SD crd слотунун үзүлүү казыктары да кирген. Бул SPI шинасы же 1-бит SD шинасы катары колдонулушу мүмкүн. Мурунку көрсөтмөлөрүмдө айтылгандай, мен 1-бит SD автобусун колдонууну артык көрөм, андыктан бул долбоор 1-бит SD шинасына негизделет.

7 -кадам: Аны бирге кой

Аны бирге кой
Аны бирге кой
Аны бирге кой
Аны бирге кой
Аны бирге кой
Аны бирге кой

Жогорудагы сүрөттөр бул долбоордо колдонгон тестирлөө платформасын көрсөтөт. Ак нан 3 өлчөмдүү басылган, аны каалаган жерден жүктөп жана басып чыгара аласыз:

Чыныгы байланыш сиздин колуңузда болгон жабдуулардан көз каранды.

Бул жерде туташуунун резюмеси:

ESP32

Vcc -> LCD Vcc GND -> LCD GND GPIO 2 -> SD D0/MISO -> 1k каршылыгы -> Vcc GPIO 14 -> SD CLK GPIO 15 -> SD CMD/MOSI GPIO 18 -> ЖК SCK GPIO 19 -> ЖК MISO GPIO 22 -> LCD LED GPIO 23 -> LCD MOSI GPIO 27 -> LCD DC/RS GPIO 33 -> LCD RST

Шилтеме:

8 -кадам: Программа

Программа
Программа

Arduino IDE

Ардуино IDEди жүктөңүз жана орнотуңуз, эгер сиз муну кыла элек болсоңуз:

www.arduino.cc/en/main/software

ESP32 колдоо

Эгерде сиз азырынча кыла элек болсоңуз, ESP32 колдоосун кошуу үчүн Орнотуу Нускамаларын аткарыңыз:

github.com/espressif/arduino-esp32

Arduino_GFX китепканасы

Акыркы Arduino_GFX китепканаларын жүктөп алыңыз: ("Clone or Download" -> "ZIP Download" баскычын басыңыз)

github.com/moononournation/Arduino_GFX

Китепканаларды Arduino IDEге импорттоо. (Arduino IDE "Sketch" Менюсу -> "Китепкананы кошуу" -> "ZIP Китепкана кошуу" -> жүктөлүп алынган ZIP файлын тандоо)

ESP8266Аудио

Эң акыркы ESP8266Audio китепканаларын түшүрүү: ("Clone or Download" -> "ZIP Download" баскычын басыңыз)

github.com/earlephilhower/ESP8266Audio

Китепканаларды Arduino IDEге импорттоо. (Arduino IDE "Sketch" Менюсу -> "Китепкананы кошуу" -> "ZIP Китепкана кошуу" -> жүктөлүп алынган ZIP файлын тандоо)

RGB565_video үлгү коду

Акыркы RGB565_video үлгү кодун түшүрүңүз: ("Clone or Download" -> "ZIP Download" баскычын басыңыз)

github.com/moononournation/RGB565_video

SD картанын маалыматы

Которулган файлдарды SD картага көчүрүп, ЖК картанын уясына салыңыз

Түзүү жана Жүктөө

  1. Arduino IDEде SDMMC_MJPEG_video_PCM_audio_dualSPI_multitask.ino ачуу
  2. Эгерде сиз ILI9225 колдонбосоңуз, класстын атын оңдоо үчүн жаңы класс кодун (35 -саптын тегерегинде) өзгөртүңүз
  3. Arduino IDE "Жүктөө" баскычын басыңыз
  4. Эгерде сиз программаны жүктөй албасаңыз, ESP32 GPIO 2 менен SD D0/MISO ортосундагы байланышты үзүп көрүңүз.
  5. Эгер ориентация туура эмес деп тапсаңыз, жаңы класстын кодундагы "айлануу" маанисин (0-3) өзгөртүңүз
  6. Эгерде программа жакшы иштесе, SDMMC_ менен башталган башка үлгүнү колдонуп көрсөңүз болот*
  7. Эгерде сизде SD картанын уячасы жок болсо же сизде FFmpeg орнотулбаса, дагы эле SPIFFS_* мисалын колдонуп көрсөңүз болот

9 -кадам: Бенчмарк

Benchmark
Benchmark

Бул жерде ар кандай видео (220x176) жана аудио (44100 МГц) форматындагы аткаруу резюмеси:

Формат Секундуна кадр (секундасына)
MJPEG + PCM 30
15
RGB565 + PCM 9
MJPEG + MP3 24

Эскертүү:

  • MJPEG + PCM жогорку ылдамдыкка жете алат, бирок кичинекей экранда 30 кадрдан ашпашы керек
  • RGB565 декоддоо процессин талап кылбайт, бирок маалыматтын өлчөмү өтө чоң жана SD, 4-биттик SD автобусу жана тезирээк SD картадан маалыматтарды жүктөөдө бир аз жакшырта алат (жапайы божомол 12 кадрдын тегерегине жетиши мүмкүн)
  • MP3 декоддоо процесси азырынча оптималдаштырыла элек, ал азыр MP3 декоддоо үчүн 0 жана видеону ойнотуу үчүн ядро 1ге арналат

10 -кадам: бактылуу ойноо

Бактылуу Ойноңуз!
Бактылуу Ойноңуз!

Эми сиз ESP32 менен видео жана аудио ойной аласыз, бул көптөгөн мүмкүнчүлүктөрдү ачты!

Кийинчерээк кичинекей винтаждык телевизор жасайм деп ойлойм …

Сунушталууда: