[Matrix LED] Bài 17: Stream video trên module led matrix P5 64×32

video led p5

Vui lòng đọc tất cả bài trước đó trong tutorial Ma trận LED thì các bạn mới hiểu bài này

Tải toàn bộ tài liệu và tool: (Download the source code and the tool)
Source Stm32 (KeilC + CubeMX) https://drive.google.com/file/d/18dnq10WQFYxnt5RkTBZ_0zaiA8WWUA8p/view?usp=sharing
Tool play desktop: https://github.com/daonguyen207/USB_CDC_Stream_video
Tool video file stream: https://drive.google.com/file/d/18ighDevgvxg4YTdrZODp3VrXfbJtUB3M/view?usp=sharing

Để chạy video, chúng ta chỉ cần truyền từng frame ảnh xuống từ máy tính là được. Vì chỉ chạy 1 tấm matrix P5 có độ phân giải 64×32 nên mình sẽ sử dụng giao tiếp USB CDC để truyền dữ liệu

Các bản chuẩn bị kit stm32 và kết nối với module P5 như đã làm ở bài 15 hoặc sử dụng kit clock led p5 mà mình bán tại đây

Nếu sử dụng kit led của mình thì hãy nhớ để chân GPIO B15 là ouput mức cao thì máy tính mới nhận USB nhé 😛

Cấu hình trên cubemx

Chúng ta sử dụng project đã làm ở bài 16 và chỉ việc cấu hình thêm USB CDC

Trong file Main.c

Khai báo 1 biến toàn cục

Trong vòng lặp while(1) mình sẽ kiểm tra biến flag_display để gọi hàm display()

Trong file usbd_custom_hid_if.c

bài 16 mình đã cho các hàm điều khiển led matrix ra 1 file thư viện riêng tên là P5.h, cho nên bây giờ mình sẽ include thư viện này vào file usbd_custom_hid_if.c để từ file này chúng ta sẽ truy cập trực tiếp vào Buffer_RGB

Cuối cùng, trong hàm CDC_Receive_FS chúng ta sẽ đón dữ liệu và đưa vào Buffer_RGB

play video p5

Về nguyên tắc truyền nhận dữ liệu, trên máy tính mình sẽ truyền mỗi đợt 64 byte data lần lượt từ phải sang trái, từ trên xuống dưới và từ R -> G -> B. Sau khi nhận đủ 1 khung hình sẽ set biến flag_display lên để chương trình main gọi hàm display show dữ liệu đã nhận được ra ngoài

Softwave PC

Đương nhiên sẽ không có sẵn phần mềm cho chúng ta mà sẽ phải tự viết, về vấn đề này thì khỏi lo lắng vì mình đã viết sẵn 2 phần mềm demo

1, Stream desktop

Phần mềm thứ 1 dùng để stream màn hình desktop, các bạn ấn vào nút Get sau đó click lần lượt vào 2 điểm trên màn hình để khoanh vùng mà các bạn muốn truyền xuống màn hình led

Download source c# here

2, Play video file

Download source c# here

DEMO

Stream desktop

Play video file

Nhạc nền hơi bị chất 🤣

Người đăng: Dao Nguyen vào Thứ Năm, 28 tháng 3, 2019

 

Từ tác giả:

Nếu có bất kì thắc mắc nào trong bài viết, vui lòng để lại comment dưới mỗi bài ! Mình sẽ không trả lời thắc mắc của các bạn ở facebook hay email !

Nếu trong phần code bạn nhìn thấy nhưng thứ kiểu như &amp; thì đó là lỗi hiển thị, cụ thể 3 kí tự < > & bị biến đổi thành như thế
&amp; là &
&lt;  là <
&gt; là >

Giới thiệu Đào Nguyện 80 bài viết
DIY,chế cháo, viết blog chia sẽ kiến thức về lập trình,điện tử - IoT. Rất mong được giao lưu, kết bạn với các bạn cùng đam mê. Địa chỉ Facebook: https://www.facebook.com/nguyendao207

5 bình luận

  1. When the function execution time of the timer interrupt service routine for driving the LED MATRIX becomes long, an error occurs in the FATFS API used to read the data format of the video file from the SD card.
    So, currently, I only temporarily prevent interrupts when executing the FATFS API (f_read, f_lseek etc…).
    (Alternatively, I know that I can use DMA when using SDIO.)
    I am looking forward to the next post because you have driven video on LED_MATRIX without using DMA.

  2. anh ơi cho em hỏi xíu ạ
    số khung truyền trên giây mà mình có thể hiện thị lên bảng led nó phụ thuộc vào yếu tố nào ạ. mình có thể chỉnh được không ạ. vì khi em làm với bảng led to hơn thì khung truyền nó giảm xuống quá thấp làm cho quét khung hình ko đủ nó không ra theo video mình chiếu ạ.

Đã đóng bình luận.