Skip to content

123 Thủ Thuật

  • Sample Page

123 Thủ Thuật

  • Home » 
  • Thủ Thuật Máy Tính » 
  • Tự Xây Màn Hình LED Ma Trận Tuyệt Đẹp Với ESP32 Hoặc Raspberry Pi

Tự Xây Màn Hình LED Ma Trận Tuyệt Đẹp Với ESP32 Hoặc Raspberry Pi

By Administrator Tháng 8 17, 2025 0
Raspberry Pi điều khiển màn hình LED ma trận RGB Waveshare
Table of Contents

Trong thế giới nhà thông minh, có vô số thiết bị tuyệt vời có thể tích hợp hoàn hảo với Home Assistant và các công cụ khác của bạn. Mặc dù các cảm biến chuyên dụng mang lại sự đơn giản và dễ sử dụng, chi phí có thể tăng lên nhanh chóng. Việc tự xây dựng các thiết bị của riêng mình thường tiết kiệm hơn rất nhiều khi bạn đã cảm thấy thoải mái với việc đó. Điều này không chỉ đúng với các cảm biến mà còn với những phần cứng phức tạp hơn, nơi mức tiết kiệm có thể tăng lên theo cấp số nhân. Và đó là lúc mà màn hình LED ma trận tuyệt đẹp này trở nên hữu ích.

Có rất nhiều màn hình dựa trên LED tương tự trên thị trường, nhưng vấn đề là nhiều trong số chúng là độc quyền, có thể không hỗ trợ các giải pháp tự lưu trữ của bạn hoặc thậm chí đi kèm với một điều khiển từ xa chỉ cho phép cài đặt hình ảnh hoặc văn bản đã được xác định trước. Bạn hoàn toàn có thể xây dựng một thứ gì đó rẻ hơn và tùy biến hơn với ESP32 hoặc Raspberry Pi, và đó chính xác là điều tôi đã làm. Nó không chỉ đẹp mắt mà còn dễ thực hiện và cực kỳ linh hoạt.

Nếu bạn muốn bắt đầu, tôi sẽ cung cấp kho mã nguồn GitHub của mình ở cuối bài viết này, bao gồm cả mã cho ESP32 và những gì tôi đã sử dụng trên Raspberry Pi 1 Model B+.

Chọn linh kiện và xây dựng màn hình LED ma trận của riêng bạn

Bạn có thể dùng Raspberry Pi hoặc ESP32

Đầu tiên và quan trọng nhất, việc chọn bộ vi điều khiển là cực kỳ quan trọng. Tôi đã chủ yếu sử dụng ESP32, và mặc dù có các thư viện ESPHome mà bạn có thể dùng, tốt hơn hết là bạn nên sử dụng Arduino IDE hoặc PlatformIO trong VS Code. Cách này có một vài ưu điểm, chủ yếu là về việc sử dụng bộ nhớ. Vì ESP32 có chế độ “truy cập bộ nhớ trực tiếp” (DMA), dữ liệu pixel được gửi mà không cần sự can thiệp nào từ CPU. Do đó, mặc dù ESP32 có vẻ yếu hơn trên bề mặt, nó sẽ hoạt động tốt hơn Raspberry Pi đời cũ trong nhiều trường hợp. Điều này phải đánh đổi bằng RAM, và chúng ta cần từng chút RAM có thể có được, đó là lý do tại sao trong trường hợp này, việc tránh ESPHome là điều nên làm nếu bạn có thể.

Tuy nhiên, Raspberry Pi có một ưu điểm: sự hỗ trợ từ cộng đồng. Trong quá trình nghiên cứu và xây dựng phần mềm riêng cho bảng điều khiển này, tôi đã tìm thấy rất nhiều ví dụ mã nguồn điều khiển HUB75 từ Raspberry Pi, đi kèm với mã ví dụ và thậm chí là một API đầy đủ mà bạn có thể tích hợp trong Python. Raspberry Pi của tôi là Model B+ đời đầu tiên, với CPU 700 MHz và chỉ 512 MB RAM. Thật không may, chi phí hoạt động liên quan đến Python khiến tôi không thể sử dụng nó một cách hiệu quả, mặc dù các mẫu Pi mới hơn chắc chắn có thể. Để bạn hình dung mức độ hạn chế của thiết lập này, khi chạy mã do tôi viết và mã ví dụ được cung cấp bằng C++ thân thiện với bộ nhớ hơn, nó vẫn gặp khó khăn. Tôi không thể mở phiên SSH mới và SFTP sẽ bị timeout… và đó là sau khi tôi đã ép xung CPU lên 800 MHz. Như tôi sẽ trình bày sau, tôi đã sử dụng MQTT và Home Assistant để truyền dữ liệu qua mạng, vì bất cứ thứ gì phức tạp hơn đều đủ để quá tải CPU của Pi.

Raspberry Pi điều khiển màn hình LED ma trận RGB WaveshareRaspberry Pi điều khiển màn hình LED ma trận RGB Waveshare

Do đó, nếu bạn có một Raspberry Pi hiện đại, API rpi-rgb-led-matrix là hoàn hảo cho loại dự án này. Tuy nhiên, nếu bạn có một chiếc Pi yếu như của tôi, bạn có thể gặp phải các rào cản do CPU yếu hơn và sẽ không thể sử dụng API Python để điều khiển nó. Ngoài ra, hãy lưu ý rằng Raspberry Pi 5 hiện chưa được hỗ trợ. Mặt khác, nếu bạn có ESP32, bạn cũng sẽ có thể điều khiển bảng điều khiển này với một chút công sức.

Chọn màn hình LED ma trận phù hợp

Khi chọn một màn hình LED ma trận, có vô số lựa chọn khác nhau. Chúng đa dạng về kích thước, số lượng pixel, pitch (khoảng cách giữa các pixel) và nhà sản xuất thiết bị. Để đơn giản, tôi đã chọn màn hình LED ma trận Waveshare RGB P2.5 64×32. Mặc dù nó có thể đắt hơn một chút so với các lựa chọn thay thế, nhưng những lựa chọn thay thế đó thường đến từ các công ty ít tên tuổi hơn, có thể thay đổi các đường địa chỉ và sử dụng một chipset bảng điều khiển khác. Waveshare P2.5 là một lựa chọn đã được kiểm chứng và gần như tất cả các ví dụ về ESP32 và Raspberry Pi mà tôi đã thử nghiệm đều có thể nhận diện nó ngay lập tức.

Bảng điều khiển cụ thể này, giống như nhiều bảng khác, sử dụng giao diện HUB75, và may mắn thay, đã có rất nhiều tài liệu hướng dẫn cách nối dây ESP32 hoặc Raspberry Pi để điều khiển nó. Hãy nhớ rằng các bảng điều khiển này được ghép kênh (multiplexed), nghĩa là chỉ một số pixel nhất định có thể được bật cùng lúc và yêu cầu phần cứng đủ nhanh để lặp qua từng hàng. Giải pháp thay thế sẽ là có các chân riêng cho mỗi hàng, điều này sẽ yêu cầu số lượng dây lớn hơn đáng kể. Trong trường hợp này, bộ điều khiển về cơ bản nhận dữ liệu, cung cấp dữ liệu ánh sáng cho các pixel và sau đó chuyển sang hàng tiếp theo, có thể hàng trăm lần mỗi giây. Hơn nữa, màu sắc cho mỗi đèn LED được điều khiển bởi một bit của một thanh ghi dịch (shift register), và các thanh ghi dịch đó được nối chuỗi trong một hàng. Tính chất này rất tốt để nối chuỗi nhiều màn hình lại với nhau, và đầu cắm HUB75 đầu ra trên hầu hết các bảng điều khiển này đều có sẵn vì lý do này.

Tổng quan màn hình LED ma trận RGB HUB75Tổng quan màn hình LED ma trận RGB HUB75

Xử lý vấn đề lệch màu và các vấn đề kỹ thuật khác

Nói về những màu sắc đó, có một vấn đề kỳ lạ ảnh hưởng đến bảng điều khiển của tôi và đã được ghi nhận là ảnh hưởng đến các bảng khác. Trong một số trường hợp, các ánh xạ R1/R2, G1/G2, B1/B2 khác nhau có thể được thực hiện không chính xác. Đây là trường hợp với bảng điều khiển của tôi, và tôi đã phát hiện ra điều đó khi cố gắng hiển thị màu vàng nhưng lại thấy màu đỏ tươi (magenta) trên màn hình. Lý do điều này xảy ra khá đơn giản, đó là lý do tại sao tôi có thể khắc phục nó ngay lập tức.

Khi xử lý màu 8-bit, các giá trị cho R, G và B nằm trong khoảng từ 0 đến 255. Đây về cơ bản là lượng mỗi màu được “pha trộn” với nhau, và việc đặt cả ba giá trị thành “255” sẽ tạo ra màu trắng. Để tạo màu vàng, giá trị 255 được gán cho cả R và G, và giá trị 0 được gán cho B. Tuy nhiên, để tạo màu đỏ tươi, bạn gán giá trị 255 cho cả R và B, và giá trị 0 được gán cho G. Do các ánh xạ bị hoán đổi bên trong HUB75, việc gán giá trị 255 cho G thực sự lại gán nó cho B.

Có một giải pháp đơn giản cho vấn đề này. Tất cả những gì bạn cần làm là hoán đổi các chân bạn kết nối cho các màu bị ảnh hưởng hoặc hoán đổi các chân trong phần mềm. Tôi đã chọn làm điều đó trong phần mềm, nhưng điều đó thực sự không quan trọng. Ít nhất, các vấn đề ánh xạ chân dường như nhất quán ở chỗ nếu các kênh xanh lam của bạn bị hoán đổi với xanh lục, thì không chỉ B1 và G1 bị hoán đổi, mà B2 và G2 cũng bị ảnh hưởng theo cùng một cách. Thật thú vị, tôi đã tìm thấy những người khác trực tuyến cũng gặp vấn đề tương tự, nhưng họ lại có các kênh khác nhau bị hoán đổi. Nói cách khác, nếu bạn đang tìm cách mua một trong số này, hãy chuẩn bị tinh thần để thực hiện một số thao tác hoán đổi chân hoặc điều chỉnh phần mềm để có được màu sắc chính xác.

Một khía cạnh khác cần chú ý là tốc độ quét (scan rate), mà Waveshare P2.5 cung cấp ở mức 1/16, hay 16 nhóm pixel cùng một lúc. Với tốc độ quét 1/16, chúng ta có thể cập nhật phần đó của 2048 pixel (64×32) cùng một lúc, và trong trường hợp này, giá trị đó là 128. Điều này có nghĩa là chúng ta có thể cập nhật hai hàng dữ liệu cùng một lúc, và với tốc độ làm mới đủ nhanh, nó sẽ trông như thể tất cả các hàng đều được chiếu sáng đồng thời. Đây là nơi CPU có thể là một yếu tố quan trọng cần xem xét nếu bạn đang sử dụng Raspberry Pi, và 60Hz là mức tối thiểu tốt để tránh bất kỳ hiện tượng nhấp nháy đáng chú ý nào.

Cận cảnh các chân kết nối HUB75 của màn hình LED ma trận Waveshare P2.5Cận cảnh các chân kết nối HUB75 của màn hình LED ma trận Waveshare P2.5

Yêu cầu về nguồn điện

Cuối cùng, hãy nhớ rằng bạn sẽ cần một nguồn điện riêng cho màn hình và bộ điều khiển. Mặc dù tôi đã thấy một số người nói rằng ESP32 có thể được cấp nguồn từ cùng một nguồn điện với màn hình (tôi đang sử dụng giắc cắm DC 5V 4A của Waveshare để cấp nguồn), tôi vẫn chưa tìm ra cách để đạt được điều đó một cách an toàn, mà không có khả năng làm cháy ESP32 với dòng điện quá cao.

Bảng điều khiển cụ thể này đi kèm với mọi thứ tôi cần, mặc dù tôi đã thay thế đầu nối HUB75 bằng dây jumper của riêng mình, vì đầu nối đi kèm có chất lượng kết nối kém. Nó đi kèm với bộ chuyển đổi giắc cắm DC sang khối đấu nối hai chân và một cáp nguồn có thể kết nối với hai màn hình cùng lúc, cùng với một đầu nối HUB75 riêng cho cổng thứ hai để có thể kết nối với một màn hình khác.

Thiết lập trên ESP32: Hạn chế RAM nhưng nhiều chức năng

Khả năng và giới hạn RAM của ESP32

ESP32 thoạt nhìn có vẻ yếu hơn, đặc biệt khi so sánh với Raspberry Pi, nhưng thực tế không phải vậy. Mặc dù có CPU chậm hơn và RAM ít hơn đáng kể, ESP32 hưởng lợi từ khả năng DMA (Direct Memory Access) được cung cấp bởi trình điều khiển SPI master, có nghĩa là bạn không cần sử dụng CPU để điều khiển trực tiếp màn hình. Các phiên bản ESP32 gốc, ESP32-S2 và ESP32-S3 đều được hỗ trợ tại đây.

Với cấu hình này, bạn chủ yếu bị giới hạn bởi việc sử dụng bộ nhớ. Theo công cụ tính toán được tìm thấy trên GitHub của thư viện ESP32-HUB75-MatrixPanel-DMA, ESP32 tôi đang sử dụng ở đây hầu như có thể quản lý độ sâu màu 24-bit đầy đủ với mô-đun 64×32. Với màu 8-bit thay thế, nó sẽ mở rộng ra một bảng điều khiển 128×64 duy nhất. Nó cũng có thể điều khiển tối đa bốn bảng 64×32 được nối chuỗi, giả sử chúng cũng sử dụng màu 8-bit.

Đối với ESP32-S3, bạn có thể bật hỗ trợ PSRAM, nhưng nó yêu cầu xây dựng thư viện với cờ xây dựng thích hợp và không được khuyến nghị, đặc biệt là ở chế độ Q-SPI, vì nó quá chậm. Với ESP32 gốc, tôi bị giới hạn ở khoảng 200KB SRAM sau khi mọi thứ đã được tải và chạy. Đó không phải là nhiều, và nó bị hạn chế hơn đáng kể so với Raspberry Pi, nhưng nó hoạt động.

ESP32 được kết nối với màn hình LED ma trận Waveshare 64x32ESP32 được kết nối với màn hình LED ma trận Waveshare 64×32

Những thử thách và kinh nghiệm thực tế với ESP32

Vấn đề đầu tiên tôi gặp phải khi cấu hình là độ nhạy Wi-Fi đột ngột giảm mạnh. Mặc dù điều này được ghi nhận trong kho GitHub là ảnh hưởng đến ESP32-S3, tôi chưa bao giờ gặp vấn đề gì khi kết nối Wi-Fi trên ESP32 của mình từ bàn làm việc, vì tôi ở ngay cạnh router. Tuy nhiên, khi kết nối bảng điều khiển, tôi phải di chuyển nó gần hơn nữa với nguồn Wi-Fi để nó hoạt động. Ngắt kết nối nó ngay lập tức đã khôi phục lại kết nối của tôi, vì vậy nếu bạn định xây dựng một trong số này với ESP32, hãy lưu ý đến khoảng cách với các điểm truy cập của bạn.

Ban đầu, tôi đã thử nghiệm với ESPHome và phát hiện ra một trình bao bọc thành phần bên ngoài cho thư viện HUB75 DMA cho phép tôi viết mã cơ bản trên màn hình để hiển thị thông tin, giống như tôi thường làm trong ESPHome. Điều này hoạt động, và đối với những thứ cơ bản, đó là một cách dễ dàng hơn đáng kể để mọi thứ hoạt động so với những gì tôi đã làm cuối cùng. Cuối cùng, tôi chuyển sang PlatformIO để triển khai. Mặc dù đó là một quá trình “thủ công” hơn nhiều, nhưng có rất nhiều ví dụ ngoài kia để mọi thứ hoạt động trơn tru. Vẫn có một số ví dụ ESPHome mà bạn có thể tìm thấy trực tuyến, nhưng không nhiều bằng những gì bạn sẽ tìm thấy cho thư viện cốt lõi.

Trải nghiệm với các thư viện và dự án web server

Thông qua PlatformIO, tôi đã sử dụng cùng thư viện HUB75 DMA, và nó “nguyên bản” hơn nhiều trong việc triển khai. Tôi đã tự viết tất cả mã của mình, giống như tôi đã làm với Raspberry Pi, và hầu hết mọi thứ đều hoạt động. Tôi đã tạo một hệ thống dựa trên trang, nơi tôi có thể điều khiển nó qua MQTT, và các trang sẽ được luân chuyển với các thông tin khác nhau trên đó. Tôi đã thử nghiệm với một đồng hồ trên một trang và một trang nhiệt độ kéo dữ liệu từ Zigbee2MQTT của tôi trong MQTT broker.

Điều này hoạt động tốt đáng ngạc nhiên, và thành thật mà nói, tôi nghĩ hầu hết mọi người sẽ hài lòng với loại dự án này với một trong những màn hình này. Hàn ESP32 phía sau màn hình, đặt nó vào một vỏ hoặc hộp gỗ với giắc cắm DC lộ ra (và một nguồn điện cho ESP32), và bạn có một màn hình nhỏ gọn, tiện lợi có thể đặt trên bàn, giá sách. Tuy nhiên, tôi muốn nhiều hơn, và ESP32 có thể lưu trữ các máy chủ web. Tôi nghĩ rằng chắc chắn ai đó đã triển khai chức năng này trước đây, vì vậy tôi đã nghiên cứu những gì có sẵn.

Màn hình LED ma trận hiển thị thông tin thời tiếtMàn hình LED ma trận hiển thị thông tin thời tiết

Trong quá trình tìm kiếm, tôi đã tìm thấy một vài ví dụ về chính xác những gì tôi đang tìm kiếm, bao gồm kho GitHub MatrixCOS. Nó sử dụng cùng thư viện HUB75 DMA để giao tiếp với màn hình và cung cấp một cổng web có thể được sử dụng để điều khiển ESP32. Đó là một hệ điều hành định hướng lệnh, hoàn chỉnh với một máy chủ web có thể nhận các lệnh đó và biến chúng thành các đầu ra thực trên màn hình. Nó có vẻ khá tuyệt vời, nhưng thật không may, tôi không thể làm cho nó hoạt động. Mặc dù đã được cập nhật gần đây, chỉ một trong các tệp firmware có thể khởi động, và công cụ flash dựa trên web của Espressif đã xác định các tệp khác là có khả năng không khởi động được.

Thay vào đó, tôi đã biên dịch nó trực tiếp từ mã nguồn, và điều đó đã hoạt động, nhưng tôi đã gặp một lỗi DMA liên quan khi ESP32 cố gắng gọi màn hình. Điều này, cùng với các vấn đề khác liên quan đến kết nối Wi-Fi (SSID của tôi có dấu cách, điều đó có nghĩa là nhập SSID của tôi thông qua đầu vào nối tiếp không hoạt động vì nó phân tách đầu vào người dùng bằng dấu cách), có nghĩa là nó không thể khởi động được. Ngay cả khi tôi có thể vượt qua vấn đề SSID, điều mà tôi đã làm thông qua điểm truy cập dự phòng của nó, thì màn hình mới là mục đích chính.

Giao diện web server điều khiển màn hình Pixel Art HUB75 trên ESP32Giao diện web server điều khiển màn hình Pixel Art HUB75 trên ESP32

Sau khi từ bỏ ý định đó, tôi tình cờ tìm thấy kho Pixel Art Display trên GitHub. Đó là một dự án tương tự như MatrixCOS, mặc dù có ít tùy chọn hơn, nhưng nó cũng có thể chạy trên ESP32. Nó cung cấp bộ nhớ cục bộ cho hình ảnh và GIF, và bạn có thể quản lý bộ nhớ này từ bảng điều khiển web sau khi bạn đã kết nối nó. Máy chủ web là điều chính mà tôi muốn, vì nó có nghĩa là ai đó có thể xây dựng một trong những thứ này và quản lý màn hình của họ từ máy tính thay vì phải kết nối trực tiếp với ESP32 mỗi khi họ muốn thực hiện thay đổi.

Dự án cụ thể đó được xây dựng cho màn hình 64×64, và mặc dù bạn có thể sửa đổi các giá trị khởi tạo màn hình để phù hợp với bảng 64×32, tôi vẫn phải thực hiện công việc mở rộng trong mã nguồn để sửa đổi cách phát GIF và hiển thị văn bản, vì chúng được mã hóa cứng theo tọa độ X và Y phù hợp với bảng 64×64. Tôi cũng đã hoán đổi các chân G và B để có đầu ra màu sắc chính xác, vì ban đầu tôi đã quên và gặp phải các vấn đề màu sắc kỳ lạ tương tự như đã đề cập trước đó. Việc sửa đổi mã nguồn cũng được yêu cầu nếu bạn muốn nó kết nối với mạng của mình, vì bạn cần biên dịch và flash nó với SSID và mật khẩu của mình.

Màn hình LED ma trận hiển thị ảnh GIF hoặc văn bản cuộnMàn hình LED ma trận hiển thị ảnh GIF hoặc văn bản cuộn

Tuy nhiên, sau khi tôi hoán đổi mọi thứ, nó đã hoạt động. GIF được phát, văn bản sẽ cuộn trên màn hình và đồng hồ cũng hoạt động. Tôi có thể tải lên các phương tiện mới từ trình duyệt web của mình, nhấp vào phát và nó sẽ ngay lập tức hiển thị trên màn hình. Tuy nhiên, nó không thay đổi kích thước GIF cho bạn, vì vậy bạn sẽ cần tự làm điều đó để phù hợp với kích thước màn hình của mình trước khi tải lên.

Một điều thú vị với thiết lập này là, mặc dù không có hiện tượng nhấp nháy đáng chú ý nào, máy ảnh của tôi thực sự gặp khó khăn khi chụp được một bức ảnh tử tế. Bạn còn nhớ tôi đã nói rằng những màn hình này làm mới đủ nhanh để mắt người không thể nhận ra khi các pixel thực sự bị tắt không? Một máy ảnh với tốc độ màn trập đủ nhanh có thể làm được điều đó, và mặc dù đây là một vấn đề nhỏ khi kết nối với Raspberry Pi, nhưng việc chụp ảnh khó hơn rất nhiều khi kết nối với ESP32. Điều này cho thấy tốc độ làm mới thấp hơn nhiều so với Pi. Từ việc xem xét mã DMA của ESP32, có vẻ như tốc độ làm mới tối thiểu được yêu cầu theo mặc định là 60Hz; không đủ để mắt người nhận thấy, nhưng đủ để máy ảnh gặp khó khăn.

Thiết lập trên Raspberry Pi: Dễ dàng đáng ngạc nhiên, ngay cả với mẫu yếu hơn

Quá trình thiết lập và các vấn đề gặp phải

Trên Raspberry Pi của tôi, việc thiết lập với API rpi-rgb-led-matrix lại đơn giản một cách đáng ngạc nhiên. Tải kho Git và xây dựng nó, bạn sẽ có thể chạy hầu hết các ví dụ và tiện ích được xây dựng sẵn để làm quen với các khả năng của nó. Các ví dụ này bao gồm trình kết xuất hình ảnh, phát lại hoạt ảnh, đồng hồ, v.v. Sau khi bạn đã xây dựng cơ sở mã, bạn có thể sử dụng các thư viện đã được xây dựng trong mã của riêng mình, giảm bớt khó khăn trong việc giao tiếp trực tiếp qua GPIO.

Việc phát triển cho Raspberry Pi có một số vấn đề ở đây, và tôi đã gặp phải chúng chủ yếu do miễn cưỡng biên dịch trực tiếp trên Raspberry Pi gốc của tôi. Hóa ra, việc biên dịch chéo mã cho Armv6 là khó khăn, đòi hỏi phải trải qua rất nhiều rào cản và cuối cùng dẫn đến đau khổ. Thay vào đó, tôi đã chọn mã hóa trên PC chính của mình và sử dụng tính năng đánh dấu cú pháp cơ bản trong VS Code để đảm bảo mọi thứ khác đều đúng. Bất cứ điều gì liên quan đến thư viện đều không thể kiểm tra và sẽ báo lỗi, nhưng tôi có thể đảm bảo rằng phần còn lại trông tốt.

Kế hoạch là phát triển một cách đơn giản để hiển thị thông tin trên màn hình, và như đã đề cập, tôi đã sử dụng MQTT cho việc này. Tôi đã sử dụng MQTT cho Home Assistant rồi, vì vậy việc điều chỉnh thiết lập để điều khiển màn hình là việc đơn giản. Tôi có một chủ đề MQTT tên là “matrix”, và dưới đó, tôi có thể xuất bản dữ liệu Spotify với tên bài hát và nghệ sĩ cùng với điều kiện thời tiết hiện tại. Sau đó, chỉ cần sử dụng Raspberry Pi của tôi để kết nối với máy chủ MQTT, kéo dữ liệu và sau đó xử lý nó để hiển thị trên màn hình.

Raspberry Pi được kết nối với màn hình Waveshare P2.5Raspberry Pi được kết nối với màn hình Waveshare P2.5

Giải pháp MQTT và tối ưu tài nguyên

Đáng ngạc nhiên, điều này không quá khó khăn, và tôi đã nghĩ rằng mình sẽ gặp nhiều vấn đề hơn. Các thư viện API đã làm cho mọi thứ đơn giản hơn rất nhiều, mặc dù tôi vẫn tiếc vì không thể sử dụng Python cho việc này. Tôi đã viết một máy khách MQTT cơ bản chạy trong một luồng riêng biệt, lưu trữ các phản hồi cục bộ và vẽ chúng lên màn hình. Khi văn bản dài hơn màn hình cho phép (trong trường hợp bài hát và nghệ sĩ đang phát), nó sẽ cuộn bằng cách sử dụng chức năng offscreen của thư viện ma trận RGB.

Ngoài ra, tôi cũng vẽ các biểu tượng nghệ thuật ASCII lên màn hình cho các biểu tượng thời tiết, mặc dù chúng cần rất nhiều công sức. Tôi đang ánh xạ chúng từ các điều kiện thời tiết kiểu Home Assistant được gửi đến MQTT thành các biểu tượng có thể được vẽ trên màn hình bằng ASCII, và điều này giúp tiết kiệm tài nguyên vì tôi không cần bao gồm hình ảnh để giải mã, xử lý và chuyển đổi. Kết quả là, mỗi hình ảnh tương ứng với 16×16 bộ pixel 24-bit, tổng cộng 768 byte bộ nhớ cho mỗi hình ảnh. 16×16 hơi quá lớn và đôi khi có thể khiến các biểu tượng chồng lên văn bản, mặc dù việc giảm kích thước này khá dễ dàng.

Tiềm năng và giới hạn trên Raspberry Pi yếu

Có rất nhiều điều bạn có thể làm với thiết lập này, và nó không chỉ giới hạn ở việc hiển thị văn bản trên màn hình, mặc dù ví dụ trên đã thể hiện điều đó. Mặc dù nó rất tuyệt vời như một bảng điều khiển thông tin, nó có thể được sử dụng để hiển thị hình ảnh và GIF, như tôi đã trình bày trong các bức ảnh ở đây. Với một chút công sức, bạn thậm chí có thể sử dụng nó như một băng chuyền hình ảnh được lấy từ thư viện được lưu trữ cục bộ của bạn, chẳng hạn như Immich.

Với một Raspberry Pi mạnh hơn, tôi sẽ cảm thấy dễ dàng hơn đáng kể để sáng tạo với nó. Tuy nhiên, mã tôi đã cung cấp cho thấy cần phải cẩn thận hơn bao nhiêu để cung cấp một môi trường an toàn bộ nhớ (phần nào đó, tôi biết một vài vấn đề liên quan đến kích thước bộ đệm và những thứ tương tự mà tôi đã phát hiện ra khi viết bài này), và vẫn còn nhiều điều nữa cần được thực hiện để làm cho nó trở thành một đoạn mã mạnh mẽ hơn. Tuy nhiên, như một bằng chứng về khái niệm, nó hoạt động rất tốt, và hiệu quả của C++ có nghĩa là bạn thực sự có thể làm được nhiều hơn với màn hình này so với những gì bạn nghĩ ban đầu với phần cứng yếu như tôi đang sử dụng ở đây.

Đây là một dự án đầy thử thách

Tôi yêu việc phát triển, và việc tự xây dựng các cảm biến và thiết bị nhà thông minh của riêng mình là một sở thích thú vị mà tôi đã rất say mê. Tuy nhiên, dự án này đôi khi chắc chắn là một quá trình khó khăn. Khi nói đến ESP32, thư viện DMA rất tuyệt vời, và việc cài đặt và chạy nó với mã của riêng tôi lại đơn giản một cách đáng ngạc nhiên nhờ vào mã mẫu được cung cấp trên GitHub của thư viện. Tuy nhiên, khi cần làm nhiều hơn, như lưu trữ một máy chủ web, các hạn chế về RAM thực sự bắt đầu phát huy tác dụng.

Về phần Raspberry Pi, với một mẫu hiện đại hơn, có lẽ mọi thứ sẽ đơn giản hơn đáng kể. Ngay cả như vậy, thật đáng kinh ngạc khi cả hai thiết bị này, yếu kém theo những cách riêng của chúng, có thể điều khiển một màn hình như thế này một cách hoàn hảo khi được cấu hình đúng. Nếu bạn muốn tự mình thử, mã nguồn cho tất cả các dự án này có sẵn trên GitHub của tôi, bao gồm cả YAML mà tôi đã viết để thử nghiệm với ESPHome.

Màn hình LED ma trận hiển thị hình ảnh pixel art màu sắc sống độngMàn hình LED ma trận hiển thị hình ảnh pixel art màu sắc sống động

Waveshare 64×32 là một bảng điều khiển đẹp mắt, trông tuyệt vời ở bất cứ đâu, và tôi có thể sẽ biến nó thành một dự án thủ công để đặt nó vào một loại vỏ cố định nào đó, sẵn sàng để đặt trên bàn, giá sách, hoặc thậm chí treo tường. Kết quả cuối cùng thật tuyệt vời, và tôi thực sự yêu thích cách nó trông. Đó là rất nhiều công việc, nhưng thành thật mà nói, tôi nghĩ đó cũng là một phần sức hấp dẫn của nó. Tôi thích học những điều mới, và những dự án như thế này là một cách tuyệt vời để làm điều đó. Tôi có lẽ sẽ thử lại ESPHome, hoặc phát triển thêm triển khai C++ của riêng mình và triển khai một máy chủ web bên trong nó.

Bất kể tôi chọn cách tiếp cận nào từ đây, tôi chắc chắn những trải nghiệm trong tương lai với phần cứng khác sẽ dễ dàng hơn một chút nhờ dự án này, và tôi thực sự hài lòng với màn hình mới, sáng bóng và đẹp mắt mà tôi có thể tự hào chỉ vào và nói: “Đúng vậy, tôi đã tự phát triển nó.”

Tài liệu tham khảo:

  • Mã nguồn GitHub của tác giả: https://github.com/Incipiens/Waveshare-HUB75-LED-Matrix-Display-Raspberry-Pi-and-ESP32-controllers
  • API rpi-rgb-led-matrix: https://github.com/hzeller/rpi-rgb-led-matrix
  • Thư viện ESP32-HUB75-MatrixPanel-DMA: https://github.com/mrcodetastic/ESP32-HUB75-MatrixPanel-DMA
  • ESPHome-HUB75-MatrixDisplayWrapper: https://github.com/TillFleisch/ESPHome-HUB75-MatrixDisplayWrapper
  • MatrixCOS GitHub repository: https://github.com/mklossde/MatrixCOS
  • Pixel Art Display repo on GitHub: https://github.com/mzashh/HUB75-Pixel-Art-Display/tree/main
Share
facebookShare on FacebooktwitterShare on TwitterpinterestShare on Pinterest
linkedinShare on LinkedinvkShare on VkredditShare on ReddittumblrShare on TumblrviadeoShare on ViadeobufferShare on BufferpocketShare on PocketwhatsappShare on WhatsappviberShare on ViberemailShare on EmailskypeShare on SkypediggShare on DiggmyspaceShare on MyspacebloggerShare on Blogger YahooMailShare on Yahoo mailtelegramShare on TelegramMessengerShare on Facebook Messenger gmailShare on GmailamazonShare on AmazonSMSShare on SMS
Post navigation
Previous post

Nâng Tầm Trải Nghiệm: 5 Thiết Bị Ngoại Vi PC Gaming Đáng Đầu Tư Nhất Của Tôi

Next post

Sáng Tạo Không Giới Hạn: Chế Tạo Máy Khoan In 3D Chỉ Với 44.5 USD

Administrator

Related Posts

Categories Thủ Thuật Máy Tính Tự Xây Màn Hình LED Ma Trận Tuyệt Đẹp Với ESP32 Hoặc Raspberry Pi

macOS Tahoe: Bản Cập Nhật Lớn Cuối Cùng Dành Cho Mac Intel – Điều Người Dùng Cần Biết

Categories Thủ Thuật Máy Tính Tự Xây Màn Hình LED Ma Trận Tuyệt Đẹp Với ESP32 Hoặc Raspberry Pi

Proton VPN: 5 Tính Năng Quan Trọng Bạn Nên Kích Hoạt Ngay Để Bảo Mật Tối Ưu

Categories Thủ Thuật Máy Tính Tự Xây Màn Hình LED Ma Trận Tuyệt Đẹp Với ESP32 Hoặc Raspberry Pi

Google Pixel 9a Ra Mắt: Smartphone Tầm Trung Đáng Chú Ý với Chip Tensor G4 và Camera AI Đỉnh Cao

Leave a Comment Hủy

Recent Posts

  • macOS Tahoe: Bản Cập Nhật Lớn Cuối Cùng Dành Cho Mac Intel – Điều Người Dùng Cần Biết
  • Proton VPN: 5 Tính Năng Quan Trọng Bạn Nên Kích Hoạt Ngay Để Bảo Mật Tối Ưu
  • Google Pixel 9a Ra Mắt: Smartphone Tầm Trung Đáng Chú Ý với Chip Tensor G4 và Camera AI Đỉnh Cao
  • Biến Laptop Cũ Thành Máy Đọc Sách E-reader Hoàn Hảo Với Kavita
  • Cảnh báo từ nhà phát triển: Tránh xa Driver Nvidia 572.XX cho RTX 30/40 Series!

Recent Comments

Không có bình luận nào để hiển thị.
Copyright © 2026 123 Thủ Thuật - Powered by Nevothemes.
Offcanvas
Offcanvas

  • Lost your password ?