LCD doesn't display any characters


I’m trying to display characters on an LCD with my Arduino. Here’s what I’m using:

I soldered the LCD/I²C-Module and the LCD together and wired the module to my Arduino according to this Reference: SDA to A4 and SCL to A5. When I hook the Arduino up to my PC the backlight on the LCD turns on.

I’m using this LiquidCrystal library instead of the one that comes with Arduino. Here’s my code:

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

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

void setup()

  lcd.print("Hello, world!");

void loop()


I found the adress 0x20 using the I2C scanner i found here. When I upload the code to my Arduino, nothing happens. I also tried using the LiquidCrystal_I2C constructor that takes only the adress, but that didn’t work either:

LiquidCrystal_I2C lcd(0x20);

I also tried matching the pins with the ones I found in the LCD datasheet but I couldn’t get that to work either:

//LiquidCrystal_I2C (uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)
LiquidCrystal_I2C lcd(0x20, 6, 5, 4, 11, 12, 13, 14);

To clarify, the code compiles and uploads successfully, no matter which variation I use, but it doesn’t show anything on the LCD. Any help is highly appreciated.

On a side note, I’ve been told that it would be bad to leave the LCD backlight at the highest contrast so I tried hooking it up to 3.3V instead of 5V. It still turns on and it’s not as bright. Should I be doing that?

Best regards

Hi and welcome.

Let me start with the backlight issue.
You should reduce the current to a backlight LED, not the voltage.
If you reduce the current, the voltage will follow, but not the other way around.
To reduce the current you could use a resistor.
Lots of displays have such resistor built in, but by far not all of them.
So find out about that for your display.

In case really nothing happens, assume you need to adjust the contrast potentiometer.
You should see some contrast where the characters should appear.
You can set the contrast already when the module only gets power (and is not controlled in any way).
In that case you should see all blocks in the first line, and none in the second.
After doing that you can go and try to get some characters on your LCD.

The module has an excellent manual, telling how to build it, but also how it is connected to the LCD.
It is in German, so if someone doesn't understand that that would be a problem.
I'm assuming you understand the German language.
On top of page 4, a schematic shows this connection.
This has to be the same as in your declaration of the screen in this line:

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

I didn't bother to check that , but you should.

Right, now...

I've been told that it would be bad to leave the LCD backlight at the highest contrast so I tried hooking it up to 3.3V instead of 5V. It still turns on and it's not as bright. Should I be doing that?

When you cite arrant nonsense like that, we really (seriously!) would like to know from what dingy recess of the Internet you actually dug it up! For a start, it conflates two entirely different concepts, contrast and backlight brightness. It is however true that without any backlight, contrast is very bad. :astonished:

Older (and this means some ten or 15 years) LCD modules used "EL" - electroluminescent backlights, which had quite limited lifetime, so it was important to use them only when necessary and with only as much brightness as necessary. It is generally understood that LEDs - even white ones - as now used for LCDs will last years or decades of continuous use at their recommended ratings, so the only reasons to dim them are to conserve power when operating from batteries or solar power, or to reduce glare at night.

The datasheet for the display indicates that it is correct to apply 5V to pins 15 and 16. You will find a resistor - generally "R8" and/ or "R9" of "101" which is to say, 100 ohms specification, on the back of the LCD connecting pins 15 and 16 to the backlight.

You will need to adjust the potentiometer on the contrast voltage so that you see a row of blocks on the first line of the display. When you can actually "talk" to the display, you can tweak this for best contrast and never need to adjust it again.

The "backpack" you indicate is a rather odd one with which we are quite unfamiliar, but the chip it uses is standard, so it is only a matter of determining what connections the PCB makes to the display. To do this you use the "LCDGuesser" script rather than the "I2CScanner". Then you copy the descriptor as it successfully indicates on the LCD, into your sketch. You do appear to be using the correct "fmalpartida" library.

When you cite arrant nonsense like that

Sorry for citing nonsense, this is my first time doing anything with electronics.

I fixed the contrast and found the correct constructor and i2c adress using the LCDGuesser. Thanks for your help.

Best regards

Where did you get that information from ?
So we know to stay away as far as possible from that.

Good to see you booked some progress, and will be able to go on now.

Got it from a friend but it’s highly likely that I simply misunderstood him.

OK, no problem, we'll let it rest now.

Important is that you need to be meticulous when coding.
It is good to ask if you understood it right in case of any doubt.
So don't let this keep you from asking another (maybe similar) question.
The only dumb question is that, that was never asked.

Got it from a friend but it's highly likely that I simply misunderstood him.

The information "from a friend" - is classic folklore. XD

So - that's why these forums are here, isn't it.