ESP32의 기본 I2C 핀은 다음과 같습니다. GPIO 22 (SCL), GPIO 21 (SDA)
이건 I2C 부품 주소 스캐닝 코드입니다.
#include <Wire.h>
void setup() {
Wire.begin();
Serial.begin(115200);
Serial.println("\nI2C Scanner");
}
void loop() {
byte error, address;
int nDevices;
Serial.println("Scanning...");
nDevices = 0;
for(address = 1; address < 127; address++ ) {
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0) {
Serial.print("I2C device found at address 0x");
if (address<16) {
Serial.print("0");
}
Serial.println(address,HEX);
nDevices++;
}
else if (error==4) {
Serial.print("Unknow error at address 0x");
if (address<16) {
Serial.print("0");
}
Serial.println(address,HEX);
}
}
if (nDevices == 0) {
Serial.println("No I2C devices found\n");
}
else {
Serial.println("done\n");
}
delay(5000);
}
====================================================================
하지만 ESP32은 아무 핀이나 I2C로 사용할 수 있습니다. 이번 프로젝트중 예기치 않게 발생한 문제점은 메인 보드가 불량이었던지 기본 I2C 핀들이 제대로 작동하지 않았던 점이었습니다. 그래서 부품을 갈아야 하나 하다가 그냥 다른 핀들을 사용해서 해결했습니다.
참조 : randomnerdtutorials.com/esp32-i2c-communication-arduino-ide/
ESP32에서 다른 주소를 사용해서 주소 스캔한 예 : (SDA : gpio32, SCL : gpio12)
#include <Wire.h>
#define I2C_SDA 32
#define I2C_SCL 12
void setup() {
Wire.begin(I2C_SDA, I2C_SCL);
Serial.begin(115200);
Serial.println("\nI2C Scanner");
}
void loop() {
byte error, address;
int nDevices;
Serial.println("Scanning...");
nDevices = 0;
for(address = 1; address < 127; address++ ) {
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0) {
Serial.print("I2C device found at address 0x");
if (address<16) {
Serial.print("0");
}
Serial.println(address,HEX);
nDevices++;
}
else if (error==4) {
Serial.print("Unknow error at address 0x");
if (address<16) {
Serial.print("0");
}
Serial.println(address,HEX);
}
}
if (nDevices == 0) {
Serial.println("No I2C devices found\n");
}
else {
Serial.println("done\n");
}
delay(5000);
}