Let's Make Robots!

ezLCDuino Backpack

I am just going to make it clear that the boards are not currently going to come preprogrammed with some kind of serial LCD backpack code or other code. It will be up to you to program it how you please, but all the capabilities are there. I will be posting example code though and hopefully some tutorials to get started.

Price is $20 for a full kit without a LCD and $25 for a full kit WITH a 16x2 LCD. (plus $5 shipping in the USA). A kit consists of everything you will need to assemble which includes a PCB, caps, resistors, transistor, resonator, trim pot, IC socket, Atmega 328 with Arduino Bootloader, and 40 breakaway male headers. Like I said before, for an extra $5 ($25 total) you get a LCD too. It is a white on blue LCD.

Update 07.15.11

Well the PCB are here and I have assembled and tested one. 

Some labeled resistors and notice the polarity of the electrolytic cap. The sqaure pad is positive, that is the one on the left in the photo below. 




There are resistors on the UART pins to allow users to program the Arduino without unplugging what they have connected the TX and RX lines. There is an added 10uf cap. A transistor allows the backlight to be turned on and off or PWMed from pin 9. 



Added more power connections on the communication row so the board can be interfaced to using a 4 or 3 pin cable depending on if you are using I2C or using serial with just RX or with TX as well.





This is my ezLCDuino Backpack. It is an Arduino LCD backpack. This will solder on directly onto the back of a LCD allowing you to control it using the Arduino LCD library. 


  • FTDI programming port
  • I2C communication pins
  • Serial communication pins (hardware and software)
  • Trim pot for adjusting the LCD contrast
  • Arduino Atmega 328
  • 4 spare Analog pins (not including the ones used for I2C communication)
  • 3 spare digital pins (not including the ones used for serial communication)
  • PWM control of the backlight
  • Resistors allow the Arduino to be programmed without unplugging devices connected to the TX and RX pins


On the bottom of the board is what I call the "communication row". Here are I2C pins, hardware serial pins, and 2 digital pins you can use for software serial. Down here is also where you power the board. The pins you do not use for communication can be used for a different purpose of your choose. I suggest Bill Porter's serial library for communication.

On the side of the board are the left over pins. This gives a total of 7 digital pins and 6 analog pins on the board excluding the LCD connection at the top.

So use the board as a serial or I2C LCD backpack, use it as the main microcontroller in your project that contains a LCD, or use it as a slave to control the LCD in your project and provide extra pins and processing power.

I will order some PCBs this week and get them in people's hands soon. Tell me what you think.

ezLCDuino.pde1.58 KB
Custom_Controller_V2.pde2.57 KB
ezLCDuino_Simple_Demo.pde233 bytes

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

Oh geeze, I can't believe I am asking this...

How do I receive a string and print it on the LCD? --In my defense, I am just a little rusty on the ol' Arduino, and I am missing something pretty simple, I would assume.

My little system works, all my "commands" work, but when the string I receive is displayed on the LCD, I am getting one of those silly rectangular boxes in front of the "H" in my "Hello World". Where the heck is this extra character coming from? It shouldn't be the "T" qualifier, that should have been "eaten up" with the first Serial.read. I'm stumped.


#include <LiquidCrystal.h>
#define backlight 9

int RxData;
int X;
int Y;
boolean scrollOn=false;
long previousMillis = 0;
long interval = 250;

LiquidCrystal lcd(11, 12, 5, 4, 3, 2);

void setup()
  pinMode(backlight, OUTPUT);
  analogWrite(backlight, 200);
  lcd.begin(16, 2);

void loop()
  unsigned long currentMillis = millis();
  if (Serial.available()>0)                                   // command available
    int qualifier=Serial.read();
    switch (qualifier)
      case 'C':
      case 'H':
      case 'I':
      case 'O':
      case 'L':
        if (scrollOn)
      case 'B':
         analogWrite(backlight, RxData);
      case 'S':
      case 'T':
          RxData = Serial.read(); //read Serial
          lcd.print(RxData,BYTE); //prints the character just read
       }while (Serial.available());    

  if (scrollOn)
    if(currentMillis - previousMillis > interval) {
    previousMillis = currentMillis; 

CtC, You are doing a Serial.read() without checking if a character has been available. Serial.read() is non blocking, will return -1 if no character is available.

Funny thing , I have done the same mistake, when I test your secret program.

The following line:

lcd.print(RxData,BYTE); //prints the character just read

Could be:

if RxData > -1 {
   lcd.print(RxData,BYTE); //prints the character just read

There might be an else required to clean the code up? 


Yeah, I just tested this on mine and that was the problem. Should fix it for CTC.

Awesome product, and a great price compared to other products.

Definalt will look at getting one when i get paid :P

Just out of curiosity, where do you get your LCDs from at that price?

Ebay, the ultimate supplier.

Haha Nice. I have to agree :P ( they are the best place for SMD resistors and caps!)

Great job with the PCB looks good. Looks even better with the LCD module... :)

I was wondering which CAD tool you used to design it.

Got the boards done from seeed studio...?

I use the free version of EagleCAD

Yup, I had them made at Seeedstudio.