Please see all COVID-19 updates here as some shipments may be delayed due to CDC safety and staffing guidelines. If you have an order or shipping question please refer to our Customer Support page. For technical questions please check out our Forums. Thank you for your continued support.

SparkFun 20x4 SerLCD - RGB Backlight (Qwiic)

The SparkFun SerLCD is an AVR-based, serial enabled LCD that provides a simple and cost effective solution for adding a 20x4 Black on RGB 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 version comes equipped with a Qwiic connector, bringing serial LCDs into the Qwiic ecosystem. 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.

The SparkFun Qwiic Connect System is an ecosystem of I2C sensors, actuators, shields and cables that make prototyping faster and less prone to error. All Qwiic-enabled boards use a common 1mm pitch, 4-pin JST connector. This reduces the amount of required PCB space, and polarized connections mean you can’t hook it up wrong.

  • 20x4, Black on RGB 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)
  • Qwiic connection
  • 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
  • Input voltage: 3.3V-9V (3.3V only via Qwiic connector and "+" pin)
  • I/O logic levels: 3.3V
  • Current consumption @ 3.3V
    • minimum with no characters
      • 4.5mA (LEDs off)
    • maximum with all character spaces filled
      • 21.7mA (red)
      • 17.2mA (green)
      • 15.5mA (blue)
      • 41.1mA (white)
  • Dimensions (LxWxH): 97.67mm x 60.23mm x 15.32mm
  • Weight: 0.1532 oz.

SparkFun 20x4 SerLCD - RGB Backlight (Qwiic) Product Help and Resources

Qwiic GPS Clock

September 14, 2020

What time is it? Time for you to... Qwiic-ly build a GPS clock and output it to a display! This project provides you with the current date and time using GPS satellites. Read the date and time as a digital or analog clock. Or even configure the clock for military, your time zone, or automatically adjust the time for daylight savings time!

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.

Qwiic SHIM Kit for Raspberry Pi Hookup Guide

February 16, 2021

Get started with the Serial LCD with RGB backlight and 9DoF IMU (ICM-20948) via I2C using the Qwiic system and Python on a Raspberry Pi! Take sensor readings and display them in the serial terminal or SerLCD.

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.

  • -- HELP: Long Strings Truncating At 30-characters --

    I have a student group who is attempting to integrate this LCD into their project. It's almost certainly an issue with the code, but they are experiencing a truncation of strings that are printed to the screen, specifically when strings are longer than 30 characters.

    For context, they are using the Qwic connection, using the Wire library to communicate with the screen via I2C. The long strings are successfully wrapped from the first 20-character-long line down to the second line, but as I said, strings are consistently truncated to 30 characters (cutting off in the middle of the second row)...

    As for the code, we've simply tried using the example code found here, then modifying the sample string to be longer...

    #include <Wire.h>
    #define DISPLAY_ADDRESS1 0x72 //This is the default address of the OpenLCD
    void setup()
        Wire.begin(); //Join the bus as master
        //By default .begin() will set I2C SCL to Standard Speed mode of 100kHz
        //Wire.setClock(400000); //Optional - set I2C SCL to High Speed Mode of 400kHz
        Wire.write('|'); //Put LCD into setting mode
        Wire.write('-'); //Send clear display command
    void loop()
        writeToScreen(); //Send the four characters to the display
        delay(50); //The maximum update rate of OpenLCD is about 100Hz (10ms). A smaller delay will cause flicker
    void writeToScreen()
        Wire.beginTransmission(DISPLAY_ADDRESS1); // transmit to device #1
        Wire.write('|'); //Put LCD into setting mode
        Wire.write('-'); //Send clear display command
        Wire.endTransmission(); //Stop I2C transmission

    This displays the following on the 20x4 display:


Customer Reviews

4.8 out of 5

Based on 5 ratings:

Currently viewing all customer reviews.


Simple set up, easy to mount, and great examples! Piece of cake!

Mixs feelings

Just what I wanted, But not working right. I get it to print what I want, then it disappears - even after reseting. I tried three differnt setups, and It does the same thing.

Qwic and easy to use,

Have only used it in I2C mode and it works very well.

Very nice!

After pip3ing the library, it works great with my RPi. The light is bright and can produce any color with RGB command. It'd be nice if it had a QWIIC socket but it can easily be mounted with the Sparkfun QWIIC adapter board (https://www.sparkfun.com/products/14495)... The legs even align with the mounting holes in the adapter.

Worked perfectly

I just needed a screen for feed back on some of the automation I was using. By using text and color I can tell the step and state of the project at all times.