A no-std
Rust driver for HUB75-style LED matrix panels on ESP32-series microcontrollers. HUB75 is a standard interface for driving large, bright, and colorful RGB LED displays, commonly used in digital signage and art installations.
This library provides a high-performance implementation that uses Direct Memory Access (DMA) to drive the display with minimal CPU overhead. It is designed to work with a variety of ESP32 models, using the most efficient peripheral available on each chip:
The driver is built on top of the embedded-graphics
crate, allowing you to easily draw shapes, text, and images on the display. It also uses a zero-copy framebuffer for efficient memory usage.
Note: The ESP32 operates at 3.3V, while HUB75 panels require 5V logic signals. While it may sometimes work without one, using a level shifter ensures reliable operation and prevents damage to your hardware.
This driver supports two types of HUB75 pin configurations, which you can select based on your hardware setup:
Hub75Pins16
(Direct Drive): This is the standard configuration where the row address lines are sent with every pixel. It requires more GPIO pins but works with any standard HUB75 panel.
Hub75Pins8
(Latched): This configuration is for controller boards that include an external 74HC574-style latch for the row address lines. This is more memory-efficient and requires fewer GPIO pins. For more details on the required circuit, see the hub75-framebuffer
crate's documentation or its GitHub repository.
The following examples demonstrate how to use this crate with different ESP32 variants.
ESP32-S3 (LCD_CAM Interface)examples/hello_lcd_cam
- Displays "Hello, World!".examples/lcd_cam.rs
- Shows a color gradient and stats.examples/hello_parl_io.rs
- Displays "Hello, World!".examples/parl_io.rs
- Shows a color gradient and stats.examples/hello_i2s_parallel.rs
- Displays "Hello, World!".examples/i2s_parallel.rs
- Shows a color gradient and stats.examples/i2s_parallel_latch.rs
- Shows a color gradient and stats.examples/i2s_parallel_dimming.rs
- Shows a color gradient and stats.esp32
: Enable support for the ESP32esp32s3
: Enable support for the ESP32-S3esp32c6
: Enable support for the ESP32-C6defmt
: Enable logging with defmt
log
: Enable logging with the log
crateinvert-blank
: Invert the blank signal, required for some controller boards.skip-black-pixels
: Forwards to the hub75-framebuffer
crate, enabling an optimization that skips writing black pixels to the framebuffer.iram
: Place the driver’s hot-path (render / DMA wait functions) in Instruction RAM (IRAM) to avoid flash-cache stalls (for example during Wi-Fi, PSRAM, or SPI-flash activity) that can cause visible flicker. Enabling this feature consumes roughly 5–10 KiB of IRAM.This project is dual-licensed under either of the following:
We welcome contributions! Please feel free to submit a Pull Request.
By contributing, you agree that your submissions will be licensed under both the Apache-2.0 and MIT licenses.
If you need help, please open an issue on our GitHub repository.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4