https://github.com/liebman/esp-hub75
A no-std Rust library for driving HUB75 LED matrix displays from ESP32 series microcontrollers.
https://github.com/liebman/esp-hub75
esp32 esp32-c6 esp32-s3 hub75 hub75e
Last synced: 3 months ago
JSON representation
A no-std Rust library for driving HUB75 LED matrix displays from ESP32 series microcontrollers.
- Host: GitHub
- URL: https://github.com/liebman/esp-hub75
- Owner: liebman
- License: apache-2.0
- Created: 2024-08-15T22:51:03.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-08-14T20:25:33.000Z (4 months ago)
- Last Synced: 2025-08-14T22:15:09.953Z (4 months ago)
- Topics: esp32, esp32-c6, esp32-s3, hub75, hub75e
- Language: Rust
- Homepage: https://crates.io/crates/esp-hub75
- Size: 166 KB
- Stars: 10
- Watchers: 2
- Forks: 4
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE-APACHE
Awesome Lists containing this project
- awesome-esp-rust - esp-hub75 - driver for Hub75 Matrix RGB LED Displays supporting ESP32, ESP32-S3, and ESP32-C6 (Projects / `no_std`)
README
# ESP-HUB75
[](https://crates.io/crates/esp-hub75)
[](https://docs.rs/esp-hub75)
[](README.md)
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:
- **ESP32-S3**: Uses the LCD_CAM peripheral
- **ESP32-C6**: Uses the PARL_IO peripheral
- **ESP32**: Uses the I2S peripheral in parallel mode
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.
## Hardware Requirements
- An ESP32-series microcontroller (ESP32, ESP32-S3, or ESP32-C6)
- A HUB75 LED matrix panel
- A 5V power supply capable of providing several amps of current
- A 3.3V to 5V level shifter (e.g., 74HCT245) is highly recommended
**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.
## Pin Configurations
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](https://crates.io/crates/hub75-framebuffer)
or its [GitHub repository](https://github.com/liebman/hub75-framebuffer).
## Examples
The following examples demonstrate how to use this crate with different ESP32
variants.
### ESP32-S3 (LCD_CAM Interface)
- [`examples/hello_lcd_cam`](examples/hello_lcd_cam.rs) - Displays "Hello, World!".
- [`examples/lcd_cam.rs`](examples/lcd_cam.rs) - Shows a color gradient and stats.
- [`examples/lcd_cam_tiled.rs`](examples/lcd_cam_tiled.rs) - uses 4 64x32 panels
in a 2x2 configuration to show a color gradient and stats
### ESP32-C6 (PARL_IO Interface)
- [`examples/hello_parl_io.rs`](examples/hello_parl_io.rs) - Displays "Hello, World!".
- [`examples/parl_io.rs`](examples/parl_io.rs) - Shows a color gradient and stats.
### ESP32 (I2S Parallel Interface)
- [`examples/hello_i2s_parallel.rs`](examples/hello_i2s_parallel.rs) - Displays
"Hello, World!".
- [`examples/i2s_parallel.rs`](examples/i2s_parallel.rs) - Shows a color gradient
and stats.
- [`examples/i2s_parallel_latch.rs`](examples/i2s_parallel_latch.rs) - Shows a
color gradient and stats.
- [`examples/i2s_parallel_dimming.rs`](examples/i2s_parallel_dimming.rs) - Shows
a color gradient and stats.
## Crate Features
- `esp32`: Enable support for the ESP32
- `esp32s3`: Enable support for the ESP32-S3
- `esp32c6`: Enable support for the ESP32-C6
- `defmt`: Enable logging with `defmt`
- `log`: Enable logging with the `log` crate
- `invert-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.
## License
This project is dual-licensed under either of the following:
- Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or
)
- MIT license ([LICENSE-MIT](LICENSE-MIT) or )
## Contributing
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.
## Support
If you need help, please open an issue on our GitHub repository.