I2C Scanner: "No I2C devices found"

I am working on a project and I need to use I2C, however, I have never used it before and I can’t get it to work.
I connected the pins as follows:
VCC - 5V (also tried 3.3V, didn’t work either)
GND - GND
SDA - A4
SCL - A5

Here are the circuits I tried, none of them worked

I tried 3 different arduino’s (2 nano clones with an old 328P bootloader and 1 uno), 4 different I2C devices (2 0.96inch OLED screens and 2 magnetometers) and lots of different cables.

If I run an I2C scanner, it only outputs “No I2C devices found”. I probably made a very simple or stupid mistake, but I can’t find out what it is.

This is the code I used for the I2C scanner:

// --------------------------------------
// 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
//    http://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
}

I have tried anything I could think of and I can’t find anything online, hope someone can help me with this!

Thanks in advance

Have you used pull up resistors?
(and please use different colors for SDA/SCL!!!)

Thanks for the quick reaction!
No I didn't, I'm gonna try it.
Where should I place them? Online I found 1500 ohm resistors, is that good? What would you recommend?

The pullups go from SDA to Vcc and SCL to Vcc. 4.7K is the usual value for the pullups. If the devices that you are connecting the Uno to are 3.3V devices, you will need level shifters on the I2C lines.

I tried using resistors, but I still get ‘No I2C devices found’

In the picture below I used two 4.7K ohm pull up resistors. One for Vcc to SCL and one for Vcc to SDA.

I really don’t know what to do now, it looks like everything is connected properly, but I don’t get any signal at all. I also tried using only one of the resistors, that didn’t word either…

I’m clueless, hope someone out there knows what to do.

... the headers for SDA and SCL doesn't seem to be soldered to your board. Have you soldered them???

1 Like

I haven't soldered them to the board, does that matter? I think I saw a lot of examples online that didn't use soldering.

I haven't soldered them to the board, does that matter?

Yes. Easy to test, too. If soldering fixes the problem, then that was the problem.

jremington:
Yes. Easy to test, too. If soldering fixes the problem, then that was the problem.

Also the pins don't look like they are soldered to the Nano either.

Hi ! I relaod this topic because I'm in front of the same problem,

My wire are correctly connected but when i start to scans I2c It doesn't work

"device no found" I need help

Please read through and follow the advice given in the previous replies.

First check that the I2C Interfaces of UNO and NANO are functional.

1. Connect UNO and NANO as per following diagram (Fig-1).


Figure-1:

2. Upload the following sketch into UNO-Master.

#include<Wire.h>

void setup()
{
    Serial.begin(9600);
    Wire.begin();
    //--------------------
    Wire.beginTransmission(0x45);   //NANO address: 1000101b
    byte status = Wire.endTransmission();
    if(status !=0)
   {
       Serial.print("NANO is not found on I2C Bus at address 1000101b.");
       while(1);   //wait for ever
   }
   Serial.println("NANO is found on the I2C Bus.");
}

void loop()
{

}

3. Upload the following sketch in NANO-Slave.

#include<Wire.h>

void setup()
{
    Serial.begin(9600);
    Wire.begin(0x45);  //NANO I2C address
 }

void loop()
{

}

4. Check that the following message has appeared on the Serial Monitor of Master.
NANO is not found on I2C Bus at address 1000101b.

5. Now, connect only the magnetometer sensor with UNO and check that the device is found on the I2C Bus.

6. Remove magnetometer from te I2C bus and connect your OLED display unit and check that the device is found on the I2C Bus.

if you get no results on multiple devices it must be something in common to all the devices. or, a massive set of coincidences.
if the modules have power LEDs, and the LEDs light up, you got ground and VCC right.

leaving two possibilities: SDA & SCL poor connection at a common point, or leads swapped.

(and please use different colors for SDA/SCL!!!)

ribbon cables and Arduino jumpers typically use the ten colors of the old resistor color code. this puts violet and gray side by side.

I make SDA grAy and SCL vioLet