ESP32 -IIC2显示OLED 屏幕

一、ESP32 IIC介绍:
ESP32 有 2 个 I2C 总线接口,根据用户的配置,总线接口可以用作 I2C 主机或从机模式。 I2C 接口支持:
• 标准模式 (100 Kbit/s)
• 高速模式 (400 Kbit/s)
• 速度最高可达 5 MHz,但受制于 SDA 上拉强度
• 7-bit/10-bit 寻址模式
• 双寻址模式
用户可以配置指令寄存器来控制 I2C 接口,从而实现更多灵活的应用。
二、I2C 简介
I2C 是一个两线总线,由 SDA 线和 SCL 线构成。这些线设置为漏极开漏输出。因此, I2C 总线上可以挂载多个外设,通常是和一个或多个主机以及一个或多个从机。主机通过总线访问从机。
①:主机发出开始信号,则通讯开始:在 SCL 为高电平时拉低 SDA 线,主机将通过 SCL 线发出 9 个时钟脉冲。前8 个脉冲用于按位传输,该字节包括 7-bit 地址和 1 个读写位。
②:如果从机地址与该 7-bit 地址一致,那么从机可以通过在第 9 个脉冲上拉低 SDA 线来应答。
③:接下来,根据读/写标志位,主机和从机可以发送/接收更多的数据。
④:根据应答位的逻辑电平决定是否停止发送数据。
⑤:在数据传输中, SDA 线仅在 SCL 线为低电平时才发生变化。当主机完成通讯,回发送一个停止标志:在 SCL 为高电平时,拉高 SDA 线。
ESP32 I2C 控制器可以处理 I2C 协议,腾出处理器核用于其它任务。
三、SSD1306-I2C-通道2 显示OLED 屏幕
使用SSD1306库的时候默认使用iic通道一,但是这个可以在初始化的时候更改。
初始化的时候我们定义了一个SSD1306Wire 类型的类。
// Initialize the OLED display using Wire library
SSD1306Wire display(0x3c, SDA, SCL);
右键查看定义:或者是按F12查看定义
此时应该会出现这个类,往下翻。

其中有一个选项就是设置iic总线通道,根据注释,如果设置为I2C_ONE 就是选择通道一,如果设置为I2C_TWO的话就是选择通道二,默认选择通道一。
同时可以看出下方根据设置的I2C_ONE 和I2C_TWO来选择 Wire 和Wire1
但是这个也有一个缺点,我感觉如果你想用这个SSD1306库的话,不能同时选择i2c的通道二和通道一,只能选择一个。
但是我觉得这个初始化的时候,后边赋值的参数可以增加I2C_ONE 和I2C_TWO,我尝试了一番发现会报错,应该是我技术不太行。反正这个涉及到一些宏定义,如果有朋友精通的话欢迎留言。
SSD1306Wire display(0x3c, SDA, SCL,I2C_TWO);
这在里顺边附上显示程序的代码:
#include <Arduino.h>
// Include the correct display library
// For a connection via I2C using Wire include
#include <Wire.h> // Only needed for Arduino 1.6.5 and earlier
#include "SSD1306Wire.h" // legacy include: `#include "SSD1306.h"`
// Initialize the OLED display using Wire library
SSD1306Wire display(0x3c, SDA, SCL);
void setup(

本文详细介绍了如何利用ESP32的I2C通道2来驱动SSD1306和U8G2库控制的OLED屏幕。讲解了ESP32的I2C接口特性,I2C协议的工作原理,并提供了针对两个库的配置示例代码。同时探讨了通道选择的限制和可能存在的问题,为多屏应用提供了思路。
最低0.47元/天 解锁文章
5180

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



