สารบัญ:

เล่นวิดีโอด้วย ESP32: 10 ขั้นตอน (พร้อมรูปภาพ)
เล่นวิดีโอด้วย ESP32: 10 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: เล่นวิดีโอด้วย ESP32: 10 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: เล่นวิดีโอด้วย ESP32: 10 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: การใช้งาน ESP32-CAM เพียงแค่ 20 นาที ก็สร้างกล้องถ่ายภาพแล้วเก็บภาพไว้บน serverได้แล้ว 2024, กรกฎาคม
Anonim
เล่นวิดีโอด้วย ESP32
เล่นวิดีโอด้วย ESP32

คำแนะนำนี้แสดงบางอย่างเกี่ยวกับการเล่นวิดีโอและเสียงด้วย ESP32

ขั้นตอนที่ 1: คุณลักษณะและข้อจำกัดของ ESP32

คุณสมบัติ

  • 4 SPI บัส 2 SPI บัสสำหรับพื้นที่ผู้ใช้คือ SPI2 และ SPI3 หรือเรียกว่า HSPI และ VSPI บัส SPI ทั้งสองสามารถวิ่งได้สูงสุด 80 MHz ในทางทฤษฎี มันสามารถผลักพิกเซลสีขนาด 320x240 16 บิตไปที่ SPI LCD ที่ 60 fps แต่ยังไม่นับเวลาที่ใช้สำหรับอ่านและถอดรหัสข้อมูลวิดีโอ
  • บัส SD 1 บิต / 4 บิตสามารถเชื่อมต่อการ์ด SD ในโปรโตคอลดั้งเดิมได้
  • เอาต์พุตเสียง DAC ภายใน I2S
  • มี RAM มากกว่า 100 KB สำหรับบัฟเฟอร์วิดีโอและเสียง
  • พลังการประมวลผลที่ยุติธรรมเพียงพอในการถอดรหัส JPEG (เล่น Motion JPEG) และการบีบอัดข้อมูล LZW (เล่น Animated GIF)
  • เวอร์ชันดูอัลคอร์สามารถแยกข้อมูลการอ่านจากการ์ด SD ถอดรหัสและกดไปยัง SPI LCD เป็นมัลติทาสก์แบบคู่ขนานและเพิ่มประสิทธิภาพการเล่น

ข้อจำกัด

  • RAM ภายในไม่เพียงพอที่จะมีบัฟเฟอร์เฟรมคู่สำหรับ 320x240 ในสี 16 บิต มันจำกัดการออกแบบมัลติทาสก์ สามารถเอาชนะ PSRAM ภายนอกได้เล็กน้อยแม้ว่าจะช้ากว่า RAM ภายใน
  • พลังประมวลผลไม่เพียงพอที่จะถอดรหัสวิดีโอ mp4
  • ไม่ใช่ทุกเวอร์ชันของ ESP32 ที่มี 2 คอร์ แต่ตัวอย่างมัลติทาสก์จะมีประโยชน์เฉพาะกับเวอร์ชันดูอัลคอร์เท่านั้น

อ้างอิง:

ขั้นตอนที่ 2: รูปแบบวิดีโอ

RGB565

หรือเรียกว่าสี 16 บิต เป็นรูปแบบข้อมูลดิบที่ใช้กันทั่วไปในการสื่อสารระหว่าง MCU และการแสดงสี แต่ละพิกเซลสีแสดงด้วยค่า 16 บิต โดย 5 บิตแรกเป็นค่าสีแดง ต่อจาก 6 บิตเป็นค่าสีเขียว และค่าสีน้ำเงิน 5 บิต ค่า 16 บิตสามารถสร้างรูปแบบสีได้ 65536 จึงเรียกว่าสี 64K ดังนั้นวิดีโอ 1 นาที 320x240@30 fps จะมีขนาด: 16 * 320 * 240 * 30 * 60 = 2211840000 บิต = 276480000 ไบต์หรือมากกว่า 260 MB

นี่เป็นรูปแบบไฟล์ทั่วไปบนเว็บตั้งแต่ปี 1990 โดยจำกัดความแปรผันของสีสำหรับแต่ละหน้าจอสูงสุด 256 สี และไม่เก็บพิกเซลที่เป็นสีเดียวกับเฟรมก่อนหน้าซ้ำ จึงสามารถย่อขนาดไฟล์ได้มาก โดยเฉพาะอย่างยิ่งเมื่อแต่ละเฟรมของแอนิเมชั่นไม่ได้เปลี่ยนรายละเอียดมากเกินไป การบีบอัด LZW ได้รับการออกแบบให้สามารถถอดรหัสได้โดยคอมพิวเตอร์ในยุค 1990 ดังนั้น ESP32 จึงมีพลังการประมวลผลที่เพียงพอในการถอดรหัสแบบเรียลไทม์

ภาพเคลื่อนไหว JPEG

หรือเรียกว่า M-JPEG / MJPEG เป็นรูปแบบการบีบอัดวิดีโอทั่วไปสำหรับฮาร์ดแวร์การจับภาพวิดีโอที่มีกำลังประมวลผลที่จำกัด อันที่จริงมันเป็นเพียงแค่การต่อกันของเฟรม JPEG ที่ยังคงนิ่งอยู่ เมื่อเปรียบเทียบกับ MPEG หรือ MP4 แล้ว Motion JPEG ไม่จำเป็นต้องใช้เทคนิคการทำนายระหว่างเฟรมอย่างเข้มข้น ทุกเฟรมเป็นอิสระจากกัน ดังนั้นจึงต้องการทรัพยากรน้อยลงในการเข้ารหัสและถอดรหัส

อ้างอิง:

th.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 MHz ซึ่งหมายความว่าสัญญาณอะนาล็อกสุ่มตัวอย่าง 44100 ในแต่ละวินาที ดังนั้นข้อมูลดิบ PCM เสียงโมโน 1 นาทีจะมีขนาด: 16 * 44100 * 60 = 42336000 บิต = 5292000 ไบต์หรือมากกว่า 5 MB ขนาดของเสียงสเตอริโอจะเพิ่มเป็นสองเท่า กล่าวคือ มากกว่า 10 MB

MP3

MPEG Layer 3 เป็นรูปแบบเสียงบีบอัดที่ใช้กันอย่างแพร่หลายสำหรับการบีบอัดเพลงตั้งแต่ปี 1990 สามารถลดขนาดไฟล์ลงได้อย่างมากถึงหนึ่งในสิบของรูปแบบ PCM ดิบ

อ้างอิง:

th.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, scale=-1:176:flags=lanczos, crop=220:in_h:(in_w-220)/2:0" -c:v rawvideo -pix_fmt rgb565be 220_9fps. rgb

แปลงเป็น-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]จานสี[p];[s1][p]จานสี" -loop -1 220_15fps.gif

แปลงเป็น 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

บันทึก:

FFmpeg แปลง-g.webp" />

ขั้นตอนที่ 5: การเตรียมฮาร์ดแวร์

การเตรียมฮาร์ดแวร์
การเตรียมฮาร์ดแวร์

บอร์ดพัฒนา ESP32

บอร์ด dev แบบ dual-core ESP32 ใด ๆ ก็ใช้ได้ คราวนี้ฉันใช้ TTGO ESP32-Micro

หน้าจอสี

จอแสดงผลสีใดๆ ที่ Arduino_GFX รองรับก็น่าจะใช้ได้ คราวนี้ฉันใช้บอร์ดฝ่าวงล้อม ILI9225 พร้อมช่องเสียบการ์ด SD

คุณสามารถค้นหารายการแสดงสีที่รองรับ Arduino_GFX ได้ที่ Github:

github.com/moononournation/Arduino_GFX

การ์ด SD

การ์ด SD ใด ๆ ก็ใช้ได้ คราวนี้ฉันใช้ SanDisk "ความเร็วปกติ" 8 GB micro SD พร้อมอะแดปเตอร์ SD

เครื่องเสียง

หากคุณต้องการใช้หูฟังเท่านั้น เพียงเชื่อมต่อหมุดหูฟังเข้ากับพิน 26 และ GND ก็สามารถฟังเสียงได้ หรือคุณสามารถใช้แอมพลิฟายเออร์ขนาดเล็กเพื่อเล่นเสียงกับลำโพง

คนอื่น

เขียงหั่นขนมและสายเขียงหั่นขนมบางชนิด

ขั้นตอนที่ 6: อินเทอร์เฟซ SD

อินเทอร์เฟซ SD
อินเทอร์เฟซ SD
อินเทอร์เฟซ SD
อินเทอร์เฟซ SD

ILI9225 บอร์ดฝ่าวงล้อม LCD รวมถึงหมุดฝ่าวงล้อมช่องเสียบ SD crd สามารถใช้เป็นบัส SPI หรือ SD บัส 1 บิต ตามที่กล่าวไว้ในคำแนะนำก่อนหน้าของฉัน ฉันชอบใช้บัส SD 1 บิต ดังนั้นโปรเจ็กต์นี้จะใช้ SD บัส 1 บิต

ขั้นตอนที่ 7: รวมเข้าด้วยกัน

ใส่กัน
ใส่กัน
ใส่กัน
ใส่กัน
ใส่กัน
ใส่กัน

รูปภาพด้านบนแสดงแพลตฟอร์มการทดสอบที่ฉันใช้ในโปรเจ็กต์นี้ เขียงหั่นขนมสีขาวเป็นแบบ 3 มิติ คุณสามารถดาวน์โหลดและพิมพ์ได้ที่ thingiverse:

การเชื่อมต่อจริงขึ้นอยู่กับฮาร์ดแวร์ที่คุณมี

นี่คือบทสรุปการเชื่อมต่อ:

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 -> LCD SCK GPIO 19 -> LCD MISO GPIO 22 -> LCD LED GPIO 23 -> LCD MOSI GPIO 27 -> LCD DC/RS GPIO 33 -> LCD RST

Ref.:

ขั้นตอนที่ 8: โปรแกรม

โปรแกรม
โปรแกรม

Arduino IDE

ดาวน์โหลดและติดตั้ง Arduino IDE หากคุณยังไม่ได้ทำ:

www.arduino.cc/en/main/software

รองรับ ESP32

ทำตามคำแนะนำในการติดตั้งเพื่อเพิ่มการรองรับ ESP32 หากคุณยังไม่ได้ดำเนินการ:

github.com/espressif/arduino-esp32

Arduino_GFX Library

ดาวน์โหลดไลบรารี Arduino_GFX ล่าสุด: (กด "Clone หรือ Download" -> "Download ZIP")

github.com/moononournation/Arduino_GFX

นำเข้าไลบรารีใน Arduino IDE (เมนู "ร่าง" ของ Arduino IDE -> "รวมไลบรารี" -> "เพิ่ม. ZIP Library" -> เลือกไฟล์ ZIP ที่ดาวน์โหลด)

ESP8266เสียง

ดาวน์โหลดไลบรารี่ล่าสุดของ ESP8266Audio: (กด "โคลนหรือดาวน์โหลด" -> "ดาวน์โหลด ZIP")

github.com/earlephilhower/ESP8266Audio

นำเข้าไลบรารีใน Arduino IDE (เมนู "ร่าง" ของ Arduino IDE -> "รวมไลบรารี" -> "เพิ่ม. ZIP Library" -> เลือกไฟล์ ZIP ที่ดาวน์โหลด)

RGB565_video ตัวอย่างโค้ด

ดาวน์โหลดโค้ดตัวอย่าง RGB565_video ล่าสุด: (กด "Clone หรือ Download" -> "Download ZIP")

github.com/moononournation/RGB565_video

ข้อมูลการ์ด SD

คัดลอกไฟล์ที่แปลงแล้วไปยังการ์ด SD และใส่ลงในช่องเสียบการ์ด LCD

รวบรวมและอัปโหลด

  1. เปิด SDMMC_MJPEG_video_PCM_audio_dualSPI_multitask.ino ใน Arduino IDE
  2. หากคุณไม่ได้ใช้ ILI9225 ให้เปลี่ยนรหัสคลาสใหม่ (ประมาณบรรทัดที่ 35) เพื่อแก้ไขชื่อคลาส
  3. กดปุ่ม "อัปโหลด" ของ Arduino IDE
  4. หากคุณไม่สามารถอัปโหลดโปรแกรมได้ ให้ลองถอดการเชื่อมต่อระหว่าง ESP32 GPIO 2 และ SD D0/MISO
  5. หากคุณพบว่าการวางแนวไม่ถูกต้อง ให้เปลี่ยนค่า "การหมุน" (0-3) ในรหัสคลาสใหม่
  6. หากโปรแกรมทำงานได้ดี คุณสามารถลองใช้ตัวอย่างอื่นเริ่มต้นด้วย SDMMC_*
  7. หากคุณไม่มีช่องเสียบการ์ด SD หรือไม่ได้ติดตั้ง FFmpeg คุณยังสามารถลองใช้ตัวอย่าง SPIFFS_*

ขั้นตอนที่ 9: เกณฑ์มาตรฐาน

เกณฑ์มาตรฐาน
เกณฑ์มาตรฐาน

ต่อไปนี้คือข้อมูลสรุปประสิทธิภาพสำหรับรูปแบบวิดีโอ (220x176) และเสียง (44100 MHz) ที่แตกต่างกัน:

รูปแบบ เฟรมต่อวินาที (fps)
MJPEG + PCM 30
15
RGB565 + PCM 9
MJPEG + MP3 24

บันทึก:

  • MJPEG + PCM สามารถเข้าถึง fps ที่สูงขึ้นได้ แต่ไม่จำเป็นต้องเล่นในหน้าจอขนาดเล็กที่มากกว่า 30 fps
  • RGB565 ไม่ต้องการกระบวนการถอดรหัส แต่ขนาดข้อมูลใหญ่เกินไปและใช้เวลามากในการโหลดข้อมูลจาก SD บัส SD 4 บิตและการ์ด SD ที่เร็วกว่าสามารถปรับปรุงได้เล็กน้อย (เดาคร่าวๆ สามารถเข้าถึงได้ประมาณ 12 fps)
  • กระบวนการถอดรหัส MP3 ที่ยังไม่ได้ปรับให้เหมาะสม ตอนนี้ได้ทุ่มเทคอร์ 0 สำหรับการถอดรหัส MP3 และคอร์ 1 สำหรับการเล่นวิดีโอ

ขั้นตอนที่ 10: เล่นอย่างมีความสุข

มีความสุขในการเล่น!
มีความสุขในการเล่น!

ตอนนี้คุณสามารถเล่นวิดีโอและเสียงด้วย ESP32 ได้แล้ว มันปลดล็อกความเป็นไปได้มากมาย!

ฉันคิดว่าฉันจะทำทีวีวินเทจเล็ก ๆ ในภายหลัง…

แนะนำ: