目录
- 1 ESP32 的 I2C 资源
- 2 OLED驱动
- 2.1 主要api
-
-
- 2.1.1 esp_err_t oled_init();
- 2.1.2 esp_err_t oled_set_start_address(uint8_t page_addr, uint16_t ram_addr);
- 2.1.3 esp_err_t oled_page_refresh(uint8_t page_addr, uint8_t *buf);
- 2.1.4 esp_err_t oled_gddram_refresh(uint8_t *buf);
- 2.1.5 esp_err_t oled_forehead_refresh(forehead_t forehead_expr, uint8_t frame_cnt);
- 2.1.6 esp_err_t oled_eyes_refresh(eyes_t eyes_expr, uint8_t frame_cnt);
- 2.1.7 esp_err_t oled_nose_refresh(nose_t nose_expr, uint8_t frame_cnt);
- 2.1.8 esp_err_t oled_mouth_refresh(mouth_t mouth_expr, uint8_t frame_cnt);
- 2.1.9 esp_err_t oled_chin_refresh(chin_t chin_expr, uint8_t frame_cnt);
- 2.1.10 esp_err_t oled_refresh_expression(expression_t expression);
-
- 4 代码
开始写一个OLED驱动,第一步,学ESP32 的 I2C 外设。实现0.96英寸的OLED显示不同的表情。
基本设计:将 128*64 像素的 0.96 英寸 OLED 分成可以独立刷新的 8 行区域,分别表示 额头(占2行)、眼镜(占2行)、鼻子(占1行)、嘴巴(占2行)、下巴(占1行)

显示效果:

1 ESP32 的 I2C 资源
I2C (Inter-Integrated Circuit) 总线用于使 ESP32 和多个外部设备进行通信。多个外部设备可以共用一个 I2C 总线。
- I2C 为两线总线,SDA和SCL线。
- 漏极开漏输出,所以可以挂载多个外设。
- 通常1个主机多个从机。
ESP32 有 2 个 I²C 总线接口,根据用户的配置,总线接口可以用作 I²C 主机或从机模式。 I²C 接口支持:
- 标准模式 (100 Kbit/s)
- 高速模式 (400 Kbit/s)
- 速度最高可达 5 MHz,但受制于 SDA 上拉强度
- 7-bit/10-bit 寻址模式
- 双寻址模式
用户可以配置指令寄存器来控制 I²C 接口,从而实现更多灵活的应用。
1.1 ESP32 的 I2C 架构

1.2 I2C API 使用指南
I2C 驱动程序配置和工作的基本步骤:
- 1 配置驱动程序 - 设置初始化参数(如主机模式或从机模式,SDA 和 SCL 使用的 GPIO 管脚,时钟速度等)
- 2 安装驱动程序- 激活一个 I2C 控制器的驱动,该控制器可为主机也可为从机
- 3 根据是为主机还是从机配置驱动程序,选择合适的项目
- 主机模式下通信 - 发起通信(主机模式)
- 从机模式下通信 - 响应主机消息(从机模式)
- 4 中断处理 - 配置 I2C 中断服务
- 5 用户自定义配置 - 调整默认的 I2C 通信参数(如时序、位序等)
- 6 错误处理 - 如何识别和处理驱动程序配置和通信错误
- 7 删除驱动程序- 在通信结束时释放 I2C 驱动程序所使用的资源
1.3 I2C时序
时序图:

2 OLED驱动
具体的显示原理见之前写过的FPGA驱动0.96OLED显示原理及FPGA驱动程序
FPGA驱动为了设计简单,每个指令或者数据都已一次完整的I2C数据传输来实现的(即包含起始位、器件地址、控制码、数据和终止位)。

这篇博客介绍了如何使用ESP32的I2C资源驱动0.96英寸OLED显示器,通过详细阐述ESP32的I2C架构、API使用和时序,展示了如何初始化I2C并实现OLED的分区域刷新功能。文章提供了特定的OLED驱动API,包括初始化、设置刷新地址和刷新不同表情的函数,并给出了代码链接供参考。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



