I2C/TWI LCD2004 module compatible with Gadgeteer is a cool lcd display with a high speed I2C serial bus from DFRobot. With the limited pin resources, your project may be out of resources using normal LCD shield. The LCD display is a 4x20 character STN white display with a blue LED backlight.

With this I2C interface LCD module, you only need 2 lines (I2C) to display the information.If you already have I2C devices in your project, this LCD module actually cost no more resources at all. Fantastic for Arduino based project.

This board is able to be powered by 5V or 3.3V which make it compatile with both Gadgeteer, Arduino DUE 3.3V system and standard Arduino UNO/ Arduino Mega 5V system.


Contrast Adjust

The contrast can be adjusted by the potential-meter displayed in the following picture.

I2C Address Setting

A2 A1 A0 地址
0 0 0 0x20
0 0 1 0x21
0 1 0 0x22
0 1 1 0x23
1 0 0 0x24
1 0 1 0x25
1 1 1 0x26
1 1 1 0x27
NOTE: The default address is 0x20. All the jumper caps will be connected from the factory.

Connection Diagram

I2C LCD Connection Diagram

NOTE: V1.2 has a different power pinout from V1.1, please check the history version for the old connection diagram.

- Arduino UNO: connect SDA to pin A4 and SCL to pin A5 on your Arduino. Arduino Leonardo: connect SDA to digital pin 2 and SCL to digital pin 3 on your Arduino.

Library Support Functions

Sample code

//Please download the Arduino library!
//The link:https://www.dfrobot.com/image/data/DFR0154/LiquidCrystal_I2Cv1-1.rar
//Compatible with the Arduino IDE 1.0
//Library version:1.1
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

#if defined(ARDUINO) && ARDUINO >= 100
#define printByte(args)  write(args);
#define printByte(args)  print(args,BYTE);

uint8_t bell[8]  = {0x4,0xe,0xe,0xe,0x1f,0x0,0x4};
uint8_t note[8]  = {0x2,0x3,0x2,0xe,0x1e,0xc,0x0};
uint8_t clock[8] = {0x0,0xe,0x15,0x17,0x11,0xe,0x0};
uint8_t heart[8] = {0x0,0xa,0x1f,0x1f,0xe,0x4,0x0};
uint8_t duck[8]  = {0x0,0xc,0x1d,0xf,0xf,0x6,0x0};
uint8_t check[8] = {0x0,0x1,0x3,0x16,0x1c,0x8,0x0};
uint8_t cross[8] = {0x0,0x1b,0xe,0x4,0xe,0x1b,0x0};
uint8_t retarrow[8] = { 0x1,0x1,0x5,0x9,0x1f,0x8,0x4};

LiquidCrystal_I2C lcd(0x20,20,4);  // set the LCD address to 0x20 for a 20 chars and 4 line display (All jumpers should be connected!)

void setup()
//  Serial.begin(57600);
  lcd.init();                      // initialize the lcd

  lcd.createChar(0, bell);
  lcd.createChar(1, note);
  lcd.createChar(2, clock);
  lcd.createChar(3, heart);
  lcd.createChar(4, duck);
  lcd.createChar(5, check);
  lcd.createChar(6, cross);
  lcd.createChar(7, retarrow);

  lcd.setCursor(0, 0);
  for(int i = 0;i < 20; i++)  lcd.printByte(6);
  lcd.setCursor(0, 1);
  lcd.print("   Hello world    ");
  lcd.setCursor(0, 2);
  lcd.print("  i ");
  lcd.print(" arduinos!   ");
  lcd.setCursor(0, 3);
  for(int i = 0;i < 20; i++)  lcd.printByte(6);
//  lcd.clear();


void loop()


If you want to use the library's own sample code, pay attention to modify the initialization statement, need to change:

 LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display


 LiquidCrystal_I2C lcd(0x20,20,4); // set the LCD address to 0x20 for a 20 chars and 4 line display(All jumpers should be connected\!)

Because the default initialization statement is for LCD1602!

More Documentation

Arduino Sample code Arduino Library(compatible with IDE V1.0 and above) LCD datasheet PCA8574 Datasheet

Version history