I2C
This article introduces I2C communication on the Edge101 board and explains how to use its I2C ports in master or slave mode. It also demonstrates scanning I2C devices with an ESP32 and handling communication.
I2C
The Edge101 board has two I2C control ports that handle communication on the two I2C buses. Each controller can be set as a master or slave. The board expansion interface uses GPIO18 as I2C SDA and GPIO23 as I2C SCL, and it uses a library compatible with the Arduino Wire library.
Example: Scanning Devices on the I2C Bus
The following code scans for devices on the I2C bus every 5 seconds and prints the slave device addresses found to the serial monitor.
Hardware Preparation:
- ESP32 IoT Programmable Controller (SKU: DFR0886)¡Á1
Sample Code:
#include "Wire.h" // Include I2C communication library
void setup() {
Serial.begin(115200); // Initialize serial communication (baud rate 115200)
Wire.begin(); // Initialize I2C bus (default uses GPIO18-SDA/GPIO23-SCL)
}
void loop() {
byte error, address; // error: communication status code, address: scanned address
int nDevices = 0; // Device found counter
delay(5000); // Scan the bus every 5 seconds
Serial.println("Scanning for I2C devices ...");
// Scan the standard I2C address range (0x01~0x7F)
for(address = 0x01; address < 0x7f; address++) {
Wire.beginTransmission(address); // Try to communicate with the target address
error = Wire.endTransmission(); // Get communication status
if (error == 0) { // Status code 0 means device responded
Serial.printf("I2C device found at address 0x%02X\n", address);
nDevices++;
}
else if(error != 2) { // Status code 2 is normal, indicating no device is connected, other errors need to be reported
Serial.printf("Error %d at address 0x%02X\n", address, error);
}
}
if (nDevices == 0) { // No devices found
Serial.println("No I2C devices detected");
}
}
Result:
The serial monitor will print the scanned devices. The address 0x51 corresponds to the I2C address of the RTC chip on the board.

Was this article helpful?
