Crates.io | esp-hub75 |
lib.rs | esp-hub75 |
version | 0.6.0 |
created_at | 2025-06-03 22:16:53.905607+00 |
updated_at | 2025-08-17 17:59:45.986537+00 |
description | A Rust driver for HUB75 LED matrix displays on ESP32 microcontrollers |
homepage | |
repository | https://github.com/liebman/esp-hub75 |
max_upload_size | |
id | 1699563 |
size | 215,382 |
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.
examples/hello_lcd_cam
- Displays "Hello, World!".examples/lcd_cam.rs
- Shows a color gradient and stats.examples/lcd_cam_tiled.rs
- uses 4 64x32 panels
in a 2x2 configuration to show a color gradient and statsexamples/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.