Menu
Microbots
0
  • Learn
    • Getting Started
    • Maker Builds
    • Education
  • Shop
    • Modules & Parts
    • Tools & Gears
    • Robots & Displays
  • About
    • Our Story
    • Reach Out
    • FAQs
  • Sign in
  • English
  • Your Cart is Empty
Microbots
  • Learn
    • Getting Started
    • Maker Builds
    • Education
  • Shop
    • Modules & Parts
    • Tools & Gears
    • Robots & Displays
  • About
    • Our Story
    • Reach Out
    • FAQs
  • Language

  • 0 0

CodeCell: I2C Communication

I2C is a widely used protocol for communicating with sensors, displays, and other peripherals. CodeCell simplifies I2C communication by automatically configuring the I2C bus at initialization, so you can start using it right away.

I2C Pin Configuration

The I2C's SDA and SCL pins are located on the lower side of the CodeCell board.

  • SDA (Data Line) → GPIO8
  • SCL (Clock Line) → GPIO9
  • Speed → 400kHz (Fast Mode I2C)

CodeCell automatically configures I2C in the Init() function, and this configuration cannot be changed if you plan to use the onboard light and motion sensors, as they are connected to the same I2C bus.

The following onboard sensors are already using I2C, so make sure not to use the same addresses when connecting other I2C devices like displays, additional sensors, or modules:

Sensor Address
VCNL4040 (Light Sensor) 0x60
BNO085 (IMU - Motion Sensor) 0x4A

 

Note: If a new I2C device has the same address as one of these onboard sensors, they will conflict, and you may get incorrect or no data.

Built-in I2C Pull-up Resistors

To ensure stable I2C communication, CodeCell has 2kΩ pull-up resistors already connected to the SDA and SCL lines. This means you don’t need to add external pull-ups when using external I2C sensors.

Reading Data from an I2C Device

To communicate with an external I2C device, use the standard 'Wire.h' library.

Unlike standard Arduino I2C devices, CodeCell has multiple onboard sensors on the same I2C bus. Calling Wire.endTransmission(false); ensures the bus stays active, allowing the onboard sensors to function properly.

Basic Example: 

Wire.beginTransmission(SLAVE_ADDRESS);  // Start communication with the device
Wire.write(SLAVE_REG);                 // Send the register we want to read
Wire.endTransmission(false);            // Don't release the bus (needed for onboard sensors)
Wire.requestFrom(SLAVE_ADDRESS, 1);     // Request 1 byte from the slave

if (Wire.available()) {
    uint8_t data = Wire.read();         // Read received byte
    Serial.println(data);
}

I2C Scanner Example: 

The example below can be used to test external I²C devices connected to CodeCell’s pins. It will display the detected I²C slave addresses, including the onboard sensor.

#include <CodeCell.h>

CodeCell myCodeCell;

void setup() {
  Serial.begin(115200); // Set Serial baud rate to 115200 - Ensure Tools/USB_CDC_On_Boot is enabled if using Serial

  myCodeCell.Init(LIGHT); // Initializes Light Sensor

  // I2C Scanner
  Serial.println("Scanning I2C devices...");
  Wire.begin();
  byte error, address;
  int 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.print(address, HEX);
      Serial.println(" !");
      nDevices++;
    } else if (error == 4) {
      Serial.print("Unknown 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("Scan complete.\n");
}

void loop() {
  if (myCodeCell.Run(10)) { // Run every 10Hz
    
  }
}

External Sensor Example: 

Next up, we hook up an APDS9960 color sensor to the I²C pins and display the readings on the Serial monitor.

#include <CodeCell.h>
#include <Adafruit_APDS9960.h<

CodeCell myCodeCell;
Adafruit_APDS9960 apds;

uint16_t r, g, b, c;

void setup() {
  Serial.begin(115200);  // Set Serial baud rate to 115200 - Ensure Tools/USB_CDC_On_Boot is enabled if using Serial

  myCodeCell.Init(LIGHT);  // Initializes Light Sensor

  if (!apds.begin()) {
    Serial.println("failed to initialize device! Please check your wiring.");
  } else Serial.println("Device initialized!");

  //enable color sensign mode
  apds.enableColor(true);
}

void loop() {
  if (myCodeCell.Run(10)) {     //Run every 10Hz
    myCodeCell.PrintSensors();  //Print sensors data

    if (apds.colorDataReady()) {
      apds.getColorData(&r, &g, &b, &c);
      Serial.print(">> Color Sensors: R");
      Serial.print(r);
      Serial.print(",G");
      Serial.print(g);
      Serial.print(",B");
      Serial.println(b);
    }
  }
}

Conclusion

CodeCell automatically configures the I2C bus, so no need to manually set it up. It also automatically configures the onboard sensors, while also supporting additional I2C devices!

  • Share:

Follow

Github

  • About
  • Software
  • Education
  • Contact
  • FAQs
  • Terms
  • Refund Policy
  • Privacy Policy

Join our Community ~ Be the first to know about new products and get exciting deals!

© 2026 Microbots.

★ Reviews

Let customers speak for us

41 reviews
Write a review
80%
(33)
5%
(2)
2%
(1)
5%
(2)
7%
(3)
21
37
A
CodeCell C6
Anonymous

Love it

L
CoilCell
Laszlo Hasenau

Nice to have the drivers integrated, sufficient for very small units, where low force needed.

User picture
L
CodeCell C6 Drive
Leon

Love this thing! The coding for controlling the integrated drivers is extremely intuitive, the chip is fast as always and all the other sensors work like a charm. If there were 6 stars id give all of em but theres only 5 XD

A
CodeCell C6 Drive
Anonymous

Pequeno e esperto. TEM projetos com câmera 📷🎥?
DVR PARA MOTO 🛵?

A
CodeCell C3
Anonymous

Busy developing something that has been a very popular topic in the maker space. Once complete I will share it all with you including the coding.I am really impressed with the punch this little C3 packs. Really a great piece of engineering. Keep up the brilliant work and thank you for making this little giant!!!!!!

123