Mục lục:
- Bước 1: Tính năng & Hạn chế của ESP32
- Bước 2: Định dạng video
- Bước 3: Định dạng âm thanh
- Bước 4: Định dạng chuyển đổi
- Bước 5: Chuẩn bị phần cứng
- Bước 6: Giao diện SD
- Bước 7: Kết hợp nó lại với nhau
- Bước 8: Chương trình
- Bước 9: Điểm chuẩn
- Bước 10: Chơi vui vẻ
Video: Phát video với ESP32: 10 bước (có hình ảnh)
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-31 10:26
Tài liệu hướng dẫn này cho thấy điều gì đó về phát video và âm thanh với ESP32.
Bước 1: Tính năng & Hạn chế của ESP32
Đặc trưng
- 4 SPI bus, 2 SPI bus có sẵn cho không gian người dùng, chúng là SPI2 và SPI3 hoặc được gọi là HSPI và VSPI. Cả hai xe buýt SPI có thể chạy tối đa 80 MHz. Về mặt lý thuyết, nó có thể đẩy 320x240 pixel màu 16-bit lên SPI LCD ở tốc độ 60 khung hình / giây, nhưng nó chưa tính thời gian cần thiết để đọc và giải mã dữ liệu video.
- Bus SD 1-bit / 4-bit có thể kết nối thẻ SD trong giao thức gốc
- Đầu ra âm thanh DAC bên trong I2S
- hơn 100 KB RAM có sẵn cho bộ đệm video và âm thanh
- Công suất xử lý đủ tốt để giải mã JPEG (phát JPEG chuyển động) và nén dữ liệu LZW (phát-g.webp" />
- Phiên bản lõi kép có thể chia dữ liệu đã đọc từ thẻ SD, giải mã và đẩy sang SPI LCD thành các tác vụ đa nhiệm song song và tăng hiệu suất phát lại
Hạn chế
- không đủ RAM bên trong để có bộ đệm khung đôi cho 320x240 ở màu 16-bit, điều này làm hạn chế thiết kế đa nhiệm. Nó có thể khắc phục một chút với PSRAM bên ngoài mặc dù nó chậm hơn RAM bên trong
- không đủ sức mạnh xử lý để giải mã video mp4
- không phải tất cả phiên bản ESP32 đều có 2 lõi, mẫu đa tác vụ chỉ có lợi trên phiên bản lõi kép
Tham khảo:
Bước 2: Định dạng video
RGB565
Hay được gọi là 16-bit màu là một định dạng dữ liệu thô thường được sử dụng trên giao tiếp giữa MCU và màn hình màu. Mỗi pixel màu được biểu thị bằng giá trị 16 bit, 5 bit đầu tiên là giá trị màu đỏ, 6 bit tiếp theo là giá trị xanh lá cây và sau đó là giá trị 5 bit màu xanh lam. Giá trị 16-bit có thể tạo ra 65536 biến thể màu nên nó còn được gọi là 64K màu. Vì vậy, video 1 phút 320x240 @ 30 khung hình / giây sẽ có kích thước: 16 * 320 * 240 * 30 * 60 = 2211840000 bit = 276480000 byte hoặc hơn 260 MB
Đây là định dạng tệp phổ biến trên web từ những năm 1990. Nó giới hạn sự biến đổi màu sắc cho mỗi màn hình lên đến 256 màu và không lặp lại lưu trữ pixel có cùng màu với khung hình trước đó. Vì vậy, nó có thể làm giảm kích thước tập tin đi rất nhiều, đặc biệt là khi mỗi khung hình ảnh động không thay đổi quá nhiều chi tiết. Nén LZW được thiết kế có khả năng giải mã bởi máy tính những năm 1990, do đó, ESP32 cũng có sức mạnh xử lý đủ công bằng để giải mã nó trong thời gian thực.
JPEG chuyển động
Hay được gọi là M-JPEG / MJPEG là một định dạng nén video phổ biến cho phần cứng quay video có khả năng xử lý hạn chế. Nó thực sự chỉ đơn giản là sự ghép nối các khung hình JPEG tĩnh. So với MPEG hoặc MP4, Motion JPEG không cần kỹ thuật tính toán chuyên sâu về dự đoán giữa các khung hình, mọi khung hình đều độc lập. Vì vậy, nó yêu cầu ít tài nguyên hơn để mã hóa và giải mã.
Tham chiếu:
en.wikipedia.org/wiki/List_of_monochrome_a…
en.wikipedia.org/wiki/GIF
en.wikipedia.org/wiki/Motion_JPEG
Bước 3: Định dạng âm thanh
PCM
Một định dạng dữ liệu thô cho âm thanh kỹ thuật số. ESP32 DAC sử dụng độ sâu bit 16 bit, có nghĩa là mỗi dữ liệu 16 bit đại diện cho một tín hiệu tương tự được lấy mẫu kỹ thuật số. Hầu hết âm thanh video và bài hát thường sử dụng tốc độ lấy mẫu ở 44100 MHz, có nghĩa là 44100 tín hiệu tương tự được lấy mẫu cho mỗi giây. Vì vậy, dữ liệu thô PCM âm thanh đơn âm 1 phút sẽ có kích thước: 16 * 44100 * 60 = 42336000 bit = 5292000 byte hoặc hơn 5 MB. Kích thước của âm thanh nổi sẽ tăng gấp đôi, tức là hơn 10 MB
MP3
MPEG Layer 3 là một định dạng âm thanh nén được sử dụng rộng rãi để nén bài hát từ những năm 1990. Nó có thể giảm đáng kể kích thước tệp xuống dưới 1/10 định dạng PCM thô
Tham chiếu:
en.wikipedia.org/wiki/Pulse-code_modulatio…
en.wikipedia.org/wiki/MP3
Bước 4: Định dạng chuyển đổi
Dự án này sử dụng FFmpeg chuyển đổi video thành định dạng có thể đọc được ESP32.
Vui lòng tải xuống và cài đặt FFmpeg tại trang web chính thức của họ nếu chưa có:
Chuyển đổi sang âm thanh PCM
ffmpeg -i input.mp4 -f u16be -acodec pcm_u16le -ar 44100 -ac 1 44100_u16le.pcm
Chuyển đổi sang âm thanh MP3
ffmpeg -i input.mp4 -ar 44100 -ac 1 -q: a 9 44100.mp3
Chuyển đổi sang 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
Chuyển đổi sang-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] Palette [p]; [s1] [p] Palette "-loop -1 220_15fps.gif
Chuyển đổi sang 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
Ghi chú:
Một số công cụ web có thể tối ưu hóa thêm-g.webp" />
Bước 5: Chuẩn bị phần cứng
Bảng nhà phát triển ESP32
Bất kỳ bảng nhà phát triển ESP32 lõi kép nào cũng được, lần này tôi đang sử dụng TTGO ESP32-Micro.
Màn hình màu
Bất kỳ màn hình màu nào hỗ trợ Arduino_GFX đều ổn, lần này tôi đang sử dụng bảng đột phá ILI9225 có khe cắm thẻ nhớ SD.
Bạn có thể tìm thấy danh sách hiển thị màu được hỗ trợ Arduino_GFX tại Github:
github.com/moononournation/Arduino_GFX
Thẻ SD
Bất kỳ thẻ SD nào cũng được, lần này tôi đang sử dụng micro SD 8 GB "tốc độ bình thường" của SanDisk với bộ chuyển đổi SD.
Âm thanh
Nếu bạn chỉ muốn sử dụng tai nghe, chỉ cần kết nối chân tai nghe với chân 26 và GND có thể nghe âm thanh. Hoặc bạn có thể sử dụng một bộ khuếch đại nhỏ để phát âm thanh với loa.
Khác
Một số breadboard và dây breadboard
Bước 6: Giao diện SD
Bảng đột phá LCD ILI9225 cũng bao gồm một chân đột phá khe cắm SD crd. Nó có thể được sử dụng như bus SPI hoặc bus SD 1-bit. Như đã đề cập trong các hướng dẫn trước đây của tôi, tôi thích sử dụng bus SD 1 bit, vì vậy dự án này sẽ dựa trên bus SD 1 bit.
Bước 7: Kết hợp nó lại với nhau
Những hình ảnh trên cho thấy nền tảng thử nghiệm tôi đang sử dụng trong dự án này. Breadboard trắng được in 3D, bạn có thể tải về và in tại thingiverse:
Kết nối thực tế phụ thuộc vào phần cứng bạn có trong tay.
Dưới đây là tóm tắt kết nối:
ESP32
Vcc -> LCD Vcc GND -> LCD GND GPIO 2 -> SD D0 / MISO -> 1k điện trở -> 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
Tham khảo:
Bước 8: Chương trình
Arduino IDE
Tải xuống và cài đặt Arduino IDE nếu bạn chưa thực hiện:
www.arduino.cc/en/main/software
Hỗ trợ ESP32
Làm theo Hướng dẫn cài đặt để thêm hỗ trợ ESP32 nếu bạn chưa thực hiện:
github.com/espressif/arduino-esp32
Thư viện Arduino_GFX
Tải xuống các thư viện Arduino_GFX mới nhất: (nhấn "Sao chép hoặc Tải xuống" -> "Tải xuống ZIP")
github.com/moononournation/Arduino_GFX
Nhập thư viện trong Arduino IDE. (Menu Arduino IDE "Sketch" -> "Bao gồm Thư viện" -> "Thêm Thư viện. ZIP" -> chọn tệp ZIP đã tải xuống)
ESP8266Audio
Tải xuống thư viện ESP8266Audio mới nhất: (nhấn "Sao chép hoặc Tải xuống" -> "Tải xuống ZIP")
github.com/earlephilhower/ESP8266Audio
Nhập thư viện trong Arduino IDE. (Menu Arduino IDE "Sketch" -> "Bao gồm Thư viện" -> "Thêm Thư viện. ZIP" -> chọn tệp ZIP đã tải xuống)
Mã mẫu RGB565_video
Tải xuống mã mẫu RGB565_video mới nhất: (nhấn "Sao chép hoặc Tải xuống" -> "Tải xuống ZIP")
github.com/moononournation/RGB565_video
Dữ liệu thẻ SD
Sao chép các tập tin đã chuyển đổi sang thẻ SD và lắp vào khe cắm thẻ LCD
Biên dịch & Tải lên
- Mở SDMMC_MJPEG_video_PCM_audio_dualSPI_multitask.ino trong Arduino IDE
- Nếu bạn không sử dụng ILI9225, hãy thay đổi mã lớp mới (khoảng dòng 35) để sửa tên lớp
- Nhấn nút "Tải lên" Arduino IDE
- Nếu bạn không tải lên được chương trình, hãy thử ngắt kết nối giữa ESP32 GPIO 2 và SD D0 / MISO
- Nếu bạn thấy hướng không chính xác, hãy thay đổi giá trị "xoay" (0-3) trong mã lớp mới
- Nếu chương trình chạy tốt, bạn có thể thử bắt đầu mẫu khác với SDMMC_ *
- Nếu bạn không có khe cắm thẻ SD hoặc bạn chưa cài đặt FFmpeg, bạn vẫn có thể thử SPIFFS_ * example
Bước 9: Điểm chuẩn
Dưới đây là tóm tắt hiệu suất cho các định dạng video (220x176) và âm thanh (44100 MHz) khác nhau:
Sự sắp xếp | Khung hình trên giây (fps) |
MJPEG + PCM | 30 |
15 | |
RGB565 + PCM | 9 |
MJPEG + MP3 | 24 |
Ghi chú:
- MJPEG + PCM có thể đạt fps cao hơn nhưng không cần thiết phải phát trong màn hình nhỏ hơn 30 fps
- RGB565 không yêu cầu quá trình giải mã nhưng kích thước dữ liệu quá lớn và tiêu tốn nhiều thời gian khi tải dữ liệu từ SD, bus SD 4-bit và thẻ SD nhanh hơn có thể cải thiện nó một chút (dự đoán có thể đạt khoảng 12 khung hình / giây)
- Quá trình giải mã MP3 chưa được tối ưu hóa, nó hiện dành lõi 0 cho giải mã MP3 và lõi 1 để phát video
Bước 10: Chơi vui vẻ
Giờ đây, bạn có thể phát video và âm thanh với ESP32 của mình, nó mở ra nhiều khả năng!
Tôi nghĩ sau này tôi sẽ làm một chiếc TV cổ điển nhỏ bé…
Đề xuất:
Xây dựng Robot phát video được điều khiển trên Internet của bạn với Arduino và Raspberry Pi: 15 bước (có hình ảnh)
Xây dựng robot phát video trực tuyến được điều khiển trên Internet của bạn với Arduino và Raspberry Pi: Tôi là @RedPhantom (hay còn gọi là LiquidCrystalDisplay / Itay), một học sinh 14 tuổi đến từ Israel đang học tại trường Trung học cơ sở Max Shein về Khoa học và Toán cao cấp. Tôi đang thực hiện dự án này để mọi người học hỏi và chia sẻ! Bạn có thể biết
Đồ chơi mềm Bluetooth Dice và phát triển trò chơi Android với nhà phát minh ứng dụng MIT: 22 bước (có hình ảnh)
Soft Toy Bluetooth Dice and Develop Android Game With MIT App Inventor: Chơi trò chơi xúc xắc có phương pháp khác nhau chơi xúc xắc vật lý và di chuyển đồng xu trên thiết bị di động hoặc PC
Raspberry Tank với giao diện web và phát trực tuyến video: 8 bước (có hình ảnh)
Raspberry Tank Với Giao diện Web và Phát trực tuyến Video: Chúng ta sẽ xem cách tôi nhận ra một WiFi Tank nhỏ, có khả năng Điều khiển Web từ xa và Phát trực tuyến Video. Đây là hướng dẫn yêu cầu kiến thức cơ bản về lập trình phần mềm và điện tử. Vì lý do này, tôi ’ đã chọn
Phát minh lại những phát minh miễn phí của bạn cho robot 'Fantastic Plastics Works' để phát sáng: 5 bước
Phát minh lại những sáng tạo miễn phí của bạn cho robot 'Fantastic Plastics Works' để phát sáng: Sử dụng đèn LED có sẵn để làm cho 'robot' bằng nhựa phát sáng và làm phai màu! Cung cấp giới thiệu về hàn cơ bản, mạch điện, đèn LED và chất dẻo
Ánh sáng video thân mật / Ánh sáng chụp ảnh cầm tay: 7 bước (với hình ảnh)
Ánh sáng video thân mật / Ánh sáng chụp ảnh cầm tay: Tôi biết bạn đang nghĩ gì. Bằng cách " thân mật, " Ý tôi là chiếu sáng cận cảnh trong các tình huống ánh sáng khó - không nhất thiết dành cho " các tình huống thân mật. &Quot; (Tuy nhiên, nó cũng có thể được sử dụng cho việc đó …) Là một nhà quay phim thành phố New York - hoặc