【ESP32-Arduino-IIC2通道2】-用IIC的通道2显示OLED-SSD1306库-U8G2库

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

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(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值