I2C does not discover any devices

My Arduino Uno R4 Minima does not discover any I2C addresses. I've tried OLED screen and TCS34725 color detector, both are not visible by the arduino. When wiring the exactly same way to the older Uno R3, they all work properly.

I'm using this sketch to discover i2c devices:

// --------------------------------------
// i2c_scanner
//
// Version 1
//    This program (or code that looks like it)
//    can be found in many places.
//    For example on the Arduino.cc forum.
//    The original author is not know.
// Version 2, Juni 2012, Using Arduino 1.0.1
//     Adapted to be as simple as possible by Arduino.cc user Krodal
// Version 3, Feb 26  2013
//    V3 by louarnold
// Version 4, March 3, 2013, Using Arduino 1.0.3
//    by Arduino.cc user Krodal.
//    Changes by louarnold removed.
//    Scanning addresses changed from 0...127 to 1...119,
//    according to the i2c scanner by Nick Gammon
//    https://www.gammon.com.au/forum/?id=10896
// Version 5, March 28, 2013
//    As version 4, but address scans now to 127.
//    A sensor seems to use address 120.
// Version 6, November 27, 2015.
//    Added waiting for the Leonardo serial communication.
//
//
// This sketch tests the standard 7-bit addresses
// Devices with higher bit address might not be seen properly.
//
 
#include <Wire.h>
 
 
void setup()
{
  Wire.begin();
 
  Serial.begin(9600);
  while (!Serial);             // Leonardo: wait for serial monitor
  Serial.println("\nI2C Scanner");
}
 
 
void loop()
{
  byte error, address;
  int nDevices;
 
  Serial.println("Scanning...");
 
  nDevices = 0;
  for(address = 1; address < 127; address++ )
  {
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the 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("done\n");
 
  delay(5000);           // wait 5 seconds for next scan
}

What pins on the R4 are you using?

The ones marked with SDA, SCL, 5V and GND next to it.

Pullups?

What exactly do u suggest? Sorry, update on the topic: Minima managed to discover OLED screen, however it fails with the dfrobot TCS34725

Edit: I gave up on the R4 minima, this board & the new IDE has too many issues and bugs for me to use it reliably as uno/mega replacement

I have a quite similar topic open. Could you try to upload the code, press reset on the board and then pull-out and reinstall the SCL cable? I am not sure if it is the IDE or an hardware issue. But it would be kinda nice to have someone else confirm this issue…

My code is in the first post. It could be as well Arduino IDE at fault, the new version is very buggy. For example, you can not load program without internet connection - this issue is marked as solved, but is still present in the release

Did you get I2C working?

I have got the I2C working on the minima. The trick is to install pull up resistors, because they are not fitted on the R4 processors.

I got the wire library working on a MPR121 touch sensor. As this is a 3V3 part I put 1K8 pull up resistors to 3V3 on both I2C lines. If you are driving a 5V I2C part then you would put 4K7 resistors pulling up to 5V.

1 Like