I have just received this screen: link but unfortunately it's different then other showed in reviews. That's my version link

It's probably based on SH1106 but I can't make it work. I have tried few popular Arduino libraries but I can't get address of this screen from I2C scanner - it's not answering.

Anyone knows how to program it?


3 Answers 3


I believe that your OLED screen might be a SSD1306 based one, and not a SH1106 as you believe.

Should that be the case, I think you'll be glad to know that there is a library for it (made by Adafruit):


From what I've read, you should also do a small code modification in order to get your OLED display working. It's simple and you can find it here:


Hope this helps you out.

  • \$\begingroup\$ Thank you for your answer but I have tried both libraries: Adafruit and U8glib. Also I have tried both drivers. I'm connecting SCL to PIN3, SDA to PIN2 of my Leonardo. RST to 5V and D/C to GND. And of course I have tried different settings and combination. Sometimes without connected one of data cables display is showing random noise but after restarting it's black again. \$\endgroup\$
    – Ekci
    Dec 8, 2014 at 19:58
  • 1
    \$\begingroup\$ Hmmm, that's strange. Many google results pointed out that your display should be SSD1306. You haven't provided a schematic or a guide which shows your connections. Can you provide us with a link or image that showsthem? You are using pull-up resistors on the I2C lines, right? (more on that matter: dsscircuits.com/index.php/articles/…) \$\endgroup\$
    – unicell
    Dec 8, 2014 at 21:31
  • \$\begingroup\$ Excuse me this weak hand drawing, I'm only on iPad now: schematic \$\endgroup\$
    – Ekci
    Dec 8, 2014 at 21:52
  • \$\begingroup\$ The Arduino Leonardo is (I suppose) working at 5V level (and I believe you power the OLED display from the 5V rail of the Arduino). While the technical info on the product page states that it can be powered between 3V and 5V, it should be working at 3.3V logic levels, while you're pulling it up to 5V. The OLED controller might not be satisfied with that and refuse to work, or, in worst case scenario, is already damaged. (at least the SSD1306 datasheet states that its' logic works between 1.65V and 3.3V and doesn't mention it being 5V tolerant. adafruit.com/datasheets/SSD1306.pdf) \$\endgroup\$
    – unicell
    Dec 8, 2014 at 22:29
  • 1
    \$\begingroup\$ This is probably a bit offtopic, but they were the ones that sent you the wrong module. Granted, you could still have damaged your OLED display even if they had sent you the right one, but in the end you can argue that you have the wrong, non fitting part and they will refund you (I buy on that website, they seem to be honest). I advise you to try that. Should you want to build a level shifter, I suggest you this link husstechlabs.com/support/tutorials/bi-directional-level-shifter If you don't have 2N7000 MOSFET you can probably replace them. \$\endgroup\$
    – unicell
    Dec 8, 2014 at 23:30

I could make the display work with the Adafruit library, based on the configuration as follows:

// If using software SPI (the default case):
#define OLED_MOSI   11       //SDA in the OLED display
#define OLED_CLK   13        //SCL in the OLED display
#define OLED_DC    9         //D/C in the OLED display
#define OLED_CS    10        //Its not connected
#define OLED_RESET 2         //RST in the OLED display

Remember: Use the example with the SPI communication, evertything works GREAT!!

  • \$\begingroup\$ This looks like maybe it should be an edit to your other answer? You can edit your answers at any stage to add additional information and normally the only time to post multiple answers on Stack Exchange sites is if they are two different ways to solve the same problem. \$\endgroup\$
    – PeterJ
    Feb 1, 2015 at 7:49

I just bought a display exactly like yours and had also the same problem... and trying to find a solution I came with your question, and later I found the solution!!:


Follow the steps from the user: Caltoa, -Use the U8glib, take the 'Hello World' example for Arduino, and uncomment the section:

U8GLIB_SSD1306_128X64 u8g(13, 11, 10, 9);   // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9

And add a '2' at the end, like this:

U8GLIB_SSD1306_128X64 u8g(13, 11, 10, 9, 2);    // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9

Then connect like this:

U8GLIB_SSD1306_128X64 u8g( SCL, SDA, 'cs no connected', D/C, RST);

Totally Working!!

p.s. It is not an I2C display, it uses a SPI communication, the labels on the display are wrong! That is why in the library you have to use the 'Software SPI Communication'.

Hope it works with you, and everyone with the same problem!!

  • \$\begingroup\$ First, you put an example with a string as a char (single quote instead of double quote) and a compile error: 'D' was not declared in this scope. "Totally Working!" ..... nope, sorry. \$\endgroup\$
    – Codebeat
    Mar 5, 2017 at 17:59

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.