I2C OLED working on Arduino Uno, not on Micro

Dear all, I just received this 0.96 Inch Yellow and Blue I2C IIC Serial 128X64 OLED Display Module for Arduino:
https://www.amazon.com/gp/product/B00O2LLT30/ref=ppx_yo_dt_b_asin_title_o01_s00?ie=UTF8&th=1

According to the datasheet, VCC can be connected to the 5V pin, GND to Ground, SDA to A4, SCL to A5.

I am using a free scanner i2C_LCD_Scanner sketch provided online (pasted below). When I plug the display into my Arduino UNO, the Scanner Sketch identifies the display because it finds the address as “0x3C” in the Monitor Window. Then, I loaded some sample code and libraries and the LCD display works great (the sample code shows the LCD display the Adafruit logo. Sample code for that not pasted below, but I can if you want).

If I plug the display into my Arduino Micro, exact same pinout configuration and same i2C_LCD_Scanner sketch (pasted below), the Monitor window says “No I2C devices found.” I have tried switching to the 3.3V pin instead, I have tried different combinations of Analog pins (e.g. A0 and A1 instead of A4 and A5). Nothing seems to work.

Any ideas?

Thank you!

I2C Scanner Sketch:

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

Are SDA and SCL on the same pins on both boards ?

Hey thanks for the quick reply!

I only have one OLED device (the one I linked to earlier: https://www.amazon.com/gp/product/B00O2LLT30/ref=ppx_yo_dt_b_asin_title_o01_s00?ie=UTF8&th=1)

In both situations (when I connect the OLED to the Arduino UNO or when I connect the OLED to the Arduino Micro), the SCL is connected to A5 and the SDA is connected to A4.

In both situations (when I connect the OLED to the Arduino UNO or when I connect the OLED to the Arduino Micro), the SCL is connected to A5 and the SDA is connected to A4.

Are you sure that SDA and SCL are pins A4 and A5 on the micro bearing in mind that it uses a different processor to the Uno

Omg THANK YOU! You have solved my problem!

The solution was: Connect SDA to Digital Pin 2, Connect SCL to Digital Pin 3!

All over the internet, I have been reading that the Arduino Micro is supposed to be connected SDA->A4, SCL->A5, but you pointed out that it is the processor that dictates the pinout.

This is the Arduino Micro I purchased:

The description states it uses the ATmega32U4 microcontroller.

This link here: Arduino - PinMapping32u4
Shows that the correct configuration for my Arduino Micro is SDA->Digital Pin 2, SCL->Digital Pin 3.

Now it works perfectly!
Thank you!

coolarj10:
All over the internet, I have been reading that the Arduino Micro is supposed to be connected SDA->A4, SCL->A5, but you pointed out that it is the processor that dictates the pinout.

Can't believe everything you read ... :roll_eyes: