I2C lcd 20x4 problems

I plan to use a lcd I2C 16x2 but am waiting on them to be delivered. In the meantime I thought I would try a 20x4 I2C one which I had.

The code below compiles and uploads without problems but all I get on the display is the 2 x 20 “blobs” with no text. The supplier of this lcd states that the address is 0x27.

Are there any obvious problems that I have overlooked?

I notice there are a lot of people writing in that have experienced problems with I2C lcd.

I have enough spare pins on my Uno to cope with the non I2C 6 pin connection variety so I am tempted to rip off the attached I2C back board attachment.

Any ideas before I attack this lcd?

#include <LCD.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>

// The LCD constructor - address shown is 0x27 - may or may not be correct for yours
// Also based on YWRobot LCM1602 IIC V1
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

void setup()
lcd.begin(20,4); //
// first character - 1st line
lcd.print(“Hello World!”);
// 8th character - 2nd line

void loop()

The “backpack” modules used on these displays utilize PCF8574A IC Chip, but the pins connections to the LCD are in a different order!

// Set the pins on the I2C chip used for LCD connections:
// addr, en,rw,rs,d4,d5,d6,d7,bl,blpol

LiquidCrystal_I2C lcd(0x20, 4, 5, 6, 0, 1, 2, 3, 7, NEGATIVE); // Set the LCD I2C address

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD I2C address

LiquidCrystal_I2C lcd(0x20, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

You can run the I2C ADDRESS SCANNER to find out the address.


// I2C Scanner
// Written by Nick Gammon
// Date: 20th April 2011

#include <Wire.h>

void setup() {
  Serial.begin (115200);

  // Leonardo: wait for serial port to connect
  while (!Serial) 

  Serial.println ();
  Serial.println ("I2C scanner. Scanning ...");
  byte count = 0;
  for (byte i = 8; i < 120; i++)
    Wire.beginTransmission (i);
    if (Wire.endTransmission () == 0)
      Serial.print ("Found address: ");
      Serial.print (i, DEC);
      Serial.print (" (0x");
      Serial.print (i, HEX);
      Serial.println (")");
      delay (1);  // maybe unneeded?
      } // end of good response
  } // end of for loop
  Serial.println ("Done.");
  Serial.print ("Found ");
  Serial.print (count, DEC);
  Serial.println (" device(s).");
}  // end of setup

void loop() {}

Did you solder on the backpack yourself?
Did you confirm the i2c yourself?
Did you read all of those threads where you say 'lots' of people have problems?
I have yet to see a thread where it was actually a defective unit. It has thus far always been user error. (Including users who made the units defective)

All is well with the world now thanks for your help.

I ran the I2C scanner and it came up with 3F not the 27 as per the supplier.

Replaced the I2C address with 3F and it all worked.

The display came complete with the backpack soldered.

I wish suppliers could get the supplied information correct as they stated:
" I2C Address: 0x27(addres can’t be changed )"

Still if I hadn’t had any problems I wouldn’t have known to use the I2C scanner so maybe not such a waste of time.

Thanks again.