สารบัญ:
- ขั้นตอนที่ 1: คุณลักษณะและข้อจำกัดของ ESP32
- ขั้นตอนที่ 2: รูปแบบวิดีโอ
- ขั้นตอนที่ 3: รูปแบบเสียง
- ขั้นตอนที่ 4: รูปแบบการแปลง
- ขั้นตอนที่ 5: การเตรียมฮาร์ดแวร์
- ขั้นตอนที่ 6: อินเทอร์เฟซ SD
- ขั้นตอนที่ 7: รวมเข้าด้วยกัน
- ขั้นตอนที่ 8: โปรแกรม
- ขั้นตอนที่ 9: เกณฑ์มาตรฐาน
- ขั้นตอนที่ 10: เล่นอย่างมีความสุข
วีดีโอ: เล่นวิดีโอด้วย ESP32: 10 ขั้นตอน (พร้อมรูปภาพ)
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-31 10:25
คำแนะนำนี้แสดงบางอย่างเกี่ยวกับการเล่นวิดีโอและเสียงด้วย 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
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
รวบรวมและอัปโหลด
- เปิด SDMMC_MJPEG_video_PCM_audio_dualSPI_multitask.ino ใน Arduino IDE
- หากคุณไม่ได้ใช้ ILI9225 ให้เปลี่ยนรหัสคลาสใหม่ (ประมาณบรรทัดที่ 35) เพื่อแก้ไขชื่อคลาส
- กดปุ่ม "อัปโหลด" ของ Arduino IDE
- หากคุณไม่สามารถอัปโหลดโปรแกรมได้ ให้ลองถอดการเชื่อมต่อระหว่าง ESP32 GPIO 2 และ SD D0/MISO
- หากคุณพบว่าการวางแนวไม่ถูกต้อง ให้เปลี่ยนค่า "การหมุน" (0-3) ในรหัสคลาสใหม่
- หากโปรแกรมทำงานได้ดี คุณสามารถลองใช้ตัวอย่างอื่นเริ่มต้นด้วย SDMMC_*
- หากคุณไม่มีช่องเสียบการ์ด 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 ได้แล้ว มันปลดล็อกความเป็นไปได้มากมาย!
ฉันคิดว่าฉันจะทำทีวีวินเทจเล็ก ๆ ในภายหลัง…
แนะนำ:
สถานีตรวจอากาศระดับมืออาชีพโดยใช้ ESP8266 และ ESP32 DIY: 9 ขั้นตอน (พร้อมรูปภาพ)
สถานีตรวจอากาศระดับมืออาชีพโดยใช้ ESP8266 และ ESP32 DIY: LineaMeteoStazione เป็นสถานีตรวจอากาศที่สมบูรณ์แบบซึ่งสามารถเชื่อมต่อกับเซ็นเซอร์ระดับมืออาชีพจาก Sensirion รวมถึงส่วนประกอบ Davis Instrument (Rain Gauge, เครื่องวัดความเร็วลม) โปรเจ็กต์นี้มีจุดมุ่งหมายเพื่อเป็นสถานีตรวจอากาศแบบ DIY แต่ต้องใช้
ความแรงของสัญญาณ ESP32 TTGO WiFi: 8 ขั้นตอน (พร้อมรูปภาพ)
ความแรงของสัญญาณ WiFi ESP32 TTGO: ในบทช่วยสอนนี้ เราจะเรียนรู้วิธีแสดงความแรงของสัญญาณเครือข่าย WiFi โดยใช้บอร์ด ESP32 TTGO ดูวิดีโอ
MQTT Mood Lights พร้อม ESP32: 4 ขั้นตอน (พร้อมรูปภาพ)
MQTT Mood Lights พร้อม ESP32: ฉันถูกล่อลวงมาเป็นเวลานานแล้วที่จะกระโดดขึ้นไปบนแถบ LED ดังนั้นฉันจึงวิ่งออกไปหยิบแถบ LED ขึ้นมาเพื่อเล่น ฉันลงเอยด้วยการสร้างแสงอารมณ์เหล่านี้ สามารถควบคุมได้ด้วย MQTT ทำให้สามารถเพิ่มสมาร์ทได้ทุกประเภท นี่คือ
ESP32 Scraper-parser-mailer และ Live Mapper: 4 ขั้นตอน (พร้อมรูปภาพ)
ESP32 Scraper-parser-mailer และ Live Mapper: สวัสดีชาวโลก! นี่เป็นคำสั่งสอนครั้งแรกของฉัน! ฉัน Marco จากกรอสเซโตในอิตาลี ฉันไม่ใช่นักพัฒนา ฉันไม่ใช่วิศวกรอิเล็กทรอนิกส์ แต่ฉันเป็นไกด์ด้านสิ่งแวดล้อมในอุทยานธรรมชาติในท้องถิ่นของเรา (อุทยานธรรมชาติมาเรมมา) ในความร่วมมือของฉัน เราทำงานหลายอย่างกับเรือแคนู
เริ่มต้นใช้งาน ESP32 - การติดตั้งบอร์ด ESP32 ใน Arduino IDE - ESP32 Blink Code: 3 ขั้นตอน
เริ่มต้นใช้งาน ESP32 | การติดตั้งบอร์ด ESP32 ใน Arduino IDE | รหัสการกะพริบของ ESP32: ในคำแนะนำนี้ เราจะดูวิธีการเริ่มทำงานกับ esp32 และวิธีการติดตั้งบอร์ด esp32 ลงใน Arduino IDE และเราจะตั้งโปรแกรม esp 32 เพื่อเรียกใช้โค้ดกะพริบโดยใช้ arduino ide