ESP32 Arduino 两路IIC使用方法
由于项目需要两路IIC,但是我不想复用IIC接口。现做如下更改
ESP32 Arduino版本
ESP32 选用模板为ESP32 Dev Module
Arduino 版本为1.8.19
库文件
pins_arduino.h Wire.cpp
pins_arduino.h
修改你所需要配置成IIC的引脚
static const uint8_t SDA = 26;
static const uint8_t SCL = 25;
static const uint8_t SDA1 = 21;
static const uint8_t SCL1 = 22;
Wire.cpp
-
在Wire.cpp代码中最下面查看是否有如下代码
TwoWire Wire = TwoWire(0);
TwoWire Wire1 = TwoWire(1); -
修改函数 bool TwoWire::begin(int sdaPin, int sclPin, uint32_t frequency),修改下方代码加粗部分
bool TwoWire::begin(int sdaPin, int sclPin, uint32_t frequency)
{
if(sdaPin < 0) { // default param passed
if(num == 0) {
if(sda==-1) {
sdaPin = SDA; //use Default Pin
} else {
sdaPin = sda; // reuse prior pin
}
} else {
if(sda==-1) {
sdaPin = SDA1;
// log_e(“no Default SDA Pin for Second Peripheral”);
// return false; //no Default pin for Second Peripheral
} else {
sdaPin = sda; // reuse prior pin
}
}
}if(sclPin < 0) { // default param passed
if(num == 0) {
if(scl == -1) {
sclPin = SCL; // use Default pin
} else {
sclPin = scl; // reuse prior pin
}
} else {
if(scl == -1) {
sclPin = SCL1;
// log_e(“no Default SCL Pin for Second Peripheral”);
// return false; //no Default pin for Second Peripheral
} else {
sclPin = scl; // reuse prior pin
}
}
}sda = sdaPin;
scl = sclPin;
i2c = i2cInit(num, sdaPin, sclPin, frequency);
if(!i2c) {
return false;
}flush();
return true;
}
调用
这路IIC用来驱动0.96寸OLED
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire1, OLED_RESET);