# idf_oled_lvgl **Repository Path**: genvex/idf_oled_lvgl ## Basic Information - **Project Name**: idf_oled_lvgl - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-13 - **Last Updated**: 2025-10-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ESP-IDF SH1107 OLED驱动项目 (基于LVGL) 这是一个基于ESP-IDF框架和esp_lvgl_port库驱动SH1107 OLED屏幕的项目,支持64x128分辨率的OLED显示屏,并可实现水平显示。 ## 硬件要求 - **OLED屏幕**: 1.3英寸 64×128分辨率,I2C接口,SH1107控制器 - **ESP32开发板**: ESP32、ESP32-S3或其他ESP32系列 - **连接方式**: - SDA: GPIO_NUM_2 - SCL: GPIO_NUM_1 - VCC: 3.3V - GND: GND ## 项目结构 ``` oled_project/ ├── CMakeLists.txt # 项目配置文件 ├── idf_component.yml # 组件依赖配置 ├── sdkconfig.defaults # SDK默认配置 ├── Kconfig.projbuild # 项目配置选项 ├── partitions_custom.csv # 自定义分区表 ├── README.md # 项目说明 ├── partition_management.md # 分区管理说明 ├── chat_history.md # 原始需求文档 └── main/ ├── CMakeLists.txt # 主程序配置 ├── partition_config.h # 分区配置头文件 ├── partition_config.c # 分区配置实现 └── oled_demo.c # 主程序源码(LVGL版本) ``` ## 功能特性 - [x] I2C通信驱动 - [x] SH1107 OLED控制器支持 - [x] 基于LVGL的图形界面 - [x] 文本显示 - [x] 实时计数器显示 - [x] 基本图形绘制(矩形、边框等) - [x] 屏幕旋转支持(可实现水平显示) - [x] Flash Size和分区参数管理 ## Flash Size和分区管理 项目现在支持灵活的Flash Size和分区参数管理功能: 1. **Flash Size配置**:支持1MB、2MB、4MB、8MB、16MB等不同大小的Flash 2. **分区表管理**:支持单应用程序、双OTA和自定义分区表 3. **Menuconfig集成**:可通过menuconfig配置相关参数 4. **分区信息查询**:提供API查询和显示分区信息 详细说明请参考 [partition_management.md](partition_management.md) 文件。 ## 编译和烧录 ### 1. 环境准备 确保已安装ESP-IDF开发环境: ```bash # 安装ESP-IDF (如果未安装) git clone --recursive https://github.com/espressif/esp-idf.git cd esp-idf ./install.sh . ./export.sh ``` ### 2. 配置项目 ```bash # 设置目标芯片 (根据实际硬件选择) idf.py set-target esp32s3 # 或 esp32, esp32c3 等 # 配置项目 (可选) idf.py menuconfig ``` ### 3. 编译项目 ```bash idf.py build ``` ### 4. 烧录和监控 ```bash # 烧录到设备 idf.py flash # 监控串口输出 idf.py monitor # 或者一次性执行烧录和监控 idf.py flash monitor ``` ## 使用说明 ### 修改I2C引脚 如需修改I2C引脚,请在`main/oled_demo.c`中修改以下定义: ```c #define EXAMPLE_PIN_NUM_SDA 2 // SDA引脚 #define EXAMPLE_PIN_NUM_SCL 1 // SCL引脚 ``` ### 修改I2C地址 如果OLED使用不同的I2C地址,请修改: ```c #define EXAMPLE_I2C_HW_ADDR 0x3C // OLED的I2C地址 ``` ### 屏幕旋转设置 项目默认设置为水平显示,通过以下配置实现: ```c .rotation = { .swap_xy = true, // 交换XY轴实现旋转 .mirror_x = true, // 水平镜像 .mirror_y = false, } ``` 以及设置显示旋转为270度: ```c lv_disp_set_rotation(disp, LV_DISPLAY_ROTATION_270); ``` ## 运行效果 程序运行后,OLED屏幕将显示: - "Hello ESP-IDF!" 文本 - "OLED Test" 文本 - "Count: X" 计数器(每2秒更新) - "64x128 Horizontal" 分辨率信息 - 矩形边框和填充矩形 串口输出将显示初始化状态和更新日志。 ## 故障排除 ### 1. 屏幕无显示 - 检查I2C引脚连接是否正确 - 确认OLED供电正常(3.3V) - 使用I2C扫描工具确认设备地址 ### 2. 显示错乱 - 检查OLED控制器型号(SH1107) - 确认屏幕分辨率设置 - 检查屏幕旋转设置是否正确 ### 3. 编译错误 - 确认ESP-IDF版本兼容性(需要v5.1或更高版本) - 检查目标芯片设置是否正确 - 清理构建缓存:`idf.py fullclean` ### 4. 分区相关问题 - 检查分区表大小总和是否超过Flash大小 - 确认分区偏移地址是否正确对齐 - 验证自定义分区表格式是否正确 可以基于此项目扩展以下功能: - 更复杂的LVGL UI界面 - 触摸屏支持 - 动画效果 - 低功耗模式 - 不同的屏幕旋转选项 - 文件系统支持(使用storage分区) - OTA更新功能(使用双OTA分区表) - NVS存储用户配置 ## 参考资料 - [ESP-IDF编程指南](https://docs.espressif.com/projects/esp-idf/) - [SH1107数据手册](https://www.displayfuture.com/Display/datasheet/controller/SH1107.pdf) - [LVGL文档](https://docs.lvgl.io/) - [esp_lvgl_port GitHub仓库](https://github.com/espressif/esp-bsp/tree/master/components/esp_lvgl_port)