本仓库基于 olikraus/u8g2 fork, 针对 ESP-IDF 工程做了较大目录重组与文件删减,并增加了 ESP32 硬件端口与组件化构建能力。
这是一个用于 ESP-IDF 的 u8g2 组件版本,目标是:
- 保留
u8g2核心绘图能力; - 适配 ESP-IDF 5.x 组件构建;
- 提供可直接用于 ESP32 的 I2C/SPI 硬件后端;
- 通过 Kconfig 选择显示驱动家族,按需编译,减少体积与编译时间。
相较上游仓库,本 fork 主要做了以下改动:
- 目录结构重组:
- 核心源码放在
src/core/ - 显示驱动放在
src/driver/ - ESP32 端口放在
src/port/
- 核心源码放在
- 文件删减:删除与当前 ESP-IDF 组件形态无关内容,保留核心可用子集。
- 新增 ESP32 硬件端口:
- I2C:
u8x8_byte_esp32_hw_i2c,u8x8_gpio_and_delay_esp32_i2c - SPI:
u8x8_byte_esp32_hw_spi,u8x8_gpio_and_delay_esp32_spi
- I2C:
- 新增组件配置能力:通过 Kconfig 选择显示驱动家族,并在 CMake 中只编译对应
u8x8_d_*.c。
include/:对外头文件(u8g2.h,u8x8.h以及 ESP32 端口头)src/core/:u8g2 核心逻辑src/driver/:控制器驱动实现(u8x8_d_*.c)src/port/:ESP-IDF 硬件适配层(I2C/SPI)CMakeLists.txt:ESP-IDF 组件构建规则Kconfig.projbuild:驱动家族选择配置idf_component.yml:组件元数据
- ESP-IDF:
>= 5.0 - 组件元数据见
idf_component.yml
进入 menuconfig:
u8g2 Configurationu8g2 display driver family
默认是 all drivers(兼容旧行为)。
当你选择某一驱动家族(如 ssd1306)时,仅会编译:
- 公共驱动层:
u8g2_d_*.c - 该家族驱动:
u8x8_d_ssd1306*.c
- 初始化
u8g2_esp32_i2c_ctx_t,填写i2c_port/sda/scl/addr。 - 调用
u8g2_esp32_i2c_set_default_context()。 - 选择对应 setup(例如
u8g2_Setup_ssd1306_i2c_128x64_noname_f)。 - 调用
u8x8_SetI2CAddress()(注意传入 8-bit 地址,即 7-bit 左移 1)。 u8g2_InitDisplay()+u8g2_SetPowerSave(..., 0)后开始绘制。
可参考工程示例调用方式:
main/app-main.cpp
SPI 流程与 I2C 类似:
- 初始化
u8g2_esp32_spi_ctx_t(host/sclk/mosi/cs/dc/reset 等); - 调用
u8g2_esp32_spi_set_default_context(); - 在 setup 中使用
u8x8_byte_esp32_hw_spi与u8x8_gpio_and_delay_esp32_spi。
- 请优先包含本组件导出的头文件;
- 若你直接依赖上游目录布局,请按本仓库
src/core|driver|port重新适配路径; - 驱动裁剪后,setup 函数需与所选驱动家族匹配,否则会链接失败。
- 本项目继承上游
u8g2的许可条款(见LICENSE)。 - 感谢
olikraus/u8g2社区的长期维护与贡献。