20% off

Creative Commons images are CC BY 2.0

SparkFun 16x2 SerLCD - RGB on Black 3.3V

The SparkFun SerLCD is an AVR-based, serial enabled LCD that provides a simple and cost effective solution for adding a 16x2 RGB on Black Liquid Crystal Display into your project. We've seriously overhauled the PCB design on the back of the screen by including an ATmega328P that handles all of the screen control, meaning a backpack is no longer needed! This display can now communicate in three different ways: serial, I2C, and SPI. This simplifies the number of wires needed and allows your project to display all kinds of text and numbers.

The on-board ATmega328P AVR microcontroller utilizes 11.0592 MHz crystal for greater communication accuracy with adjustable baud rates of 1200 through 1000000 but is default set at 9600. The firmware for this SerLCD is fully opensource and allows for any customizations you may need.

Note: Since the SerLCD is a 3.3V device, please make sure you convert to 3.3V logic depending on your chosen microcontroller or single board computer. Otherwise, you may risk damaging your board.

  • 16x2, RGB on Black Display
  • The AVR ATMega328p (with Arduino-compatible bootloader) is populated on the back of each LCD screen and handles all of the LCD control
  • Three communication options: Serial, I2C and SPI
  • Adjustable I2C address controlled via software special commands (0x72 default)
  • Emergency reset to factory settings (Jumper RX to GND on bootup)
  • Operational backspace character
  • Incoming buffer stores up to 80 characters
  • Pulse width modulation of backlight allows direct control of backlight brightness and current consumption
  • Pulse width modulation of contrast allows for software defined contrast amount.
  • User definable splash screen
  • Open-sourced firmware and Arduino-compatible bootloader enables updates via the Arduino IDE

SparkFun 16x2 SerLCD - RGB on Black 3.3V Product Help and Resources

AVR-Based Serial Enabled LCDs Hookup Guide

August 2, 2018

The AVR-based Qwiic Serial Enabled LCDs are a simple and cost effective solution to include in your project. These screens are based on the HD44780 controller, and include ATmega328P with an Arduino compatible bootloader. They accept control commands via Serial, SPI and I2C (via PTH headers or Qwiic connector). In this tutorial, we will show examples of a simple setup and go through each communication option.

1 of 1 found this helpful:

User contributed Eagle library

You can find a user contributed Eagle library for this part here!

1 of 1 found this helpful:

Mechanical drawing

You can find a basic mechanical drawing for this LCD here.

Additional libraries needed to compile the SerLCD firmware

You can find the additional libraries needed to compile the SerLCD firmware at the link below. LiquidCrystalFast and SoftPWM libraries

Core Skill: Soldering

This skill defines how difficult the soldering is on a particular product. It might be a couple simple solder joints, or require special reflow tools.

1 Soldering

Skill Level: Noob - Some basic soldering is required, but it is limited to a just a few pins, basic through-hole soldering, and couple (if any) polarized components. A basic soldering iron is all you should need.
See all skill levels

Core Skill: Programming

If a board needs code or communicates somehow, you're going to need to know how to program or interface with it. The programming skill is all about communication and code.

2 Programming

Skill Level: Rookie - You will need a better fundamental understand of what code is, and how it works. You will be using beginner-level software and development tools like Arduino. You will be dealing directly with code, but numerous examples and libraries are available. Sensors or shields will communicate with serial or TTL.
See all skill levels

Core Skill: Electrical Prototyping

If it requires power, you need to know how much, what all the pins do, and how to hook it up. You may need to reference datasheets, schematics, and know the ins and outs of electronics.

2 Electrical Prototyping

Skill Level: Rookie - You may be required to know a bit more about the component, such as orientation, or how to hook it up, in addition to power requirements. You will need to understand polarized components.
See all skill levels


Looking for answers to technical questions?

We welcome your comments and suggestions below. However, if you are looking for solutions to technical questions please see our Technical Assistance page.

  • Member #1487833 / about 5 years ago / 2

    Couple questions that I don't see in the documents: What screws are supposed to be used for mounting? I measured a diameter of about 2.4 mm. Is this M2.5, #3, or something else?

    The I2C address is given as 0x72. Is this 111 0010 plus the R/W or 0111 0010? With the first I would send 0xE4 (1110 010X with X =0) to write. I've never seen a data sheet that didn't clarify in binary so I'm just concerned.

  • justarandomgeek / about 5 years ago / 2

    I can't seem to find a complete command list for this anywhere, only the "cheat sheet" list which notably is missing the custom character commands, and that only by digging around in the source of the examples - it's not under Documents, it's not in any of the documentation on the linked github. Where's it hiding guys? I expected better from Sparkfun after so many years of awesomeness!

    • Member #974316 / about 5 years ago / 1

      While not the best "documentation", you can see some of it in the OpenLCD firmware: https://github.com/sparkfun/OpenLCD/blob/master/firmware/OpenLCD/OpenLCD.ino

      First you .write(127) to set it to the "Special Setting" mode, then you send the custom character number (27 through 34), and then send 8 bytes consisting of the bitmap data to the device (see linked file around line 379).

  • Member #893148 / about 3 years ago / 1

    The right side of the LCD is noticeably brighter than the left side. I'm not referring to what it looks like naked, since there is a bright light visible from the right side. But once it's installed, in a bezel, with no leakage, the characters on the right are brighter than the characters on the left. I'm disappointed, it's noticeable and looks rather half-assed. For paying the Sparkfun/Adafruit prices, I expected a little better.

  • Can we get a QWIIC version of this display or something similar? Yes, I know I could retrofit one to have the connector but that's not very elegant.

    • santaimpersonator / about 4 years ago / 1

      Unfortunately, this product was designed prior to the creation of the Qwiic system and I don't expect it will be revised anytime soon. Just be aware that the LCD screen does use a quite a bit of current and may cause issues if you have too many devices.

      As you mentioned, currently, the easiest options to add a Qwiic connector is the use of the SparkFun Qwiic Adapter or Qwiic Cable - Breadboard Jumper. (*I think the adapter might be the cleanest option.)

  • Member #1070593 / about 5 years ago / 0

    I have a simple application that needs an I2C input and a button press input. It looks promising for me to use this SerLCD as the display and the controller. This could cut my cost and assembly time in half. Can I use one of the SPI pins as a digital input for the button? Is it as simple as commenting out the SPI calls in OpenLCD.ino and calling pinMode(11, INPUT);

Customer Reviews

4.3 out of 5

Based on 4 ratings:

Currently viewing all customer reviews.

1 of 1 found this helpful:

Works with 3.3V devices with no problems

So far I have only tried the IIC (I2C) interface but there have been no glitches. I have been trying to work with a 5V device but there are not even failed messages on the logic analyzer. This display worked from the beginning. I am using a Teensy 3.2 with the Sparkfun shield kit and it has been flawless. Thank you.

1 of 3 found this helpful:

with 5V into the raw the display is very dark almost unreadable

loaded up the example code for I2C, at first I thought the display was dead with only the backlight working at very dim blue. then I noticed the display was indeed saying "Cycles:####" in very dim blue. I added the following to the sketch and nothing changes colorwise…

Wire.beginTransmission(DISPLAY_ADDRESS1); Wire.write('|'); //Put LCD into setting mode Wire.write('157'); //bright red Wire.write('-'); //Send clear display command Wire.endTransmission();

Sorry that you're having trouble! The backlight on these is turned most of the way down by default making the display hard to read.

Try shorting RX to ground and then powering the display to reset all the settings in the display and see if that works for you. If it doesn't, contact our technical assistance team and they can help.

Quick, Simple LCD display

This product works straight out of the box for me. The interface provided in the Arduino libraries handles most of the situations I've needed, and is reasonably simple to port out to uPython if needed.

The only thing I wish it had was a Qwiic connector, but its easy enough to solder on a Qwiic adaptor.

This thing is great

The lcd easily Interfaxes with softwareSerial on arduino and with a little code with the raspberry pi. Nothing to complain about but I only wish there were a 5v logic level as an option. It’s good anyway.