LCD Backpacks

Device Information

There are several LCD backpacks on the market. This guide is written specifically using backpacks sold by HiLetGo on Amazon, but should work with any LCD Backpack using a single PCF8574T module. Note that the backpacks with a different architecture (like Adafruit’s) use a different library for communication. Additionally, not all modules are equal – we have found that those from SunFounder may vary in addressing schemas, despite being similar architecture to the HiLetgo modules.

In summary: The general function for all backpacks is the same, but some details may differ from the notes below for different individual units.

Photo of LCD Backpack with PCF8574T Module

Arduino Library

The LCD Library for this module is from https://github.com/johnrickman/LiquidCrystal_I2C.
In Arduino Library Manager, is it listed as “LiquidCrystal I2C” by “Frank de Brabander”. The version used in the code provided below is 1.1.2 .

Setting the Address

There are 3 solder pads on the backpack, labeled A0, A1, and A2. By default, the pads are all open. You may close them with a solder or wire bridge to adjust the address to suit your needs.

For convenience, it can be a great help to write the address in Sharpie on the back of the LCD/Backpack combination.

AddressA0A1A2
0x20ClosedClosedClosed
0x21OpenClosedClosed
0x22ClosedOpenClosed
0x23OpenOpenClosed
0x24ClosedClosedOpen
0x25OpenClosedOpen
0x26ClosedOpenOpen
0x27OpenOpenOpen
A photo of four LCD units from the back, showing labels for the address.

Obtaining the Address & Writing to the display

Some modules do not use the table above, even if they use the same architecture. As such, it is fairly standard to scan the I2C bus to identify the display. I took the code a step further and print the address to the display when it is found.

A photo of four LCD devices connected to an Arduino board.
#include <LiquidCrystal_I2C.h>

// SPDX-FileCopyrightText: 2023 Carter Nelson for Adafruit Industries
//
// SPDX-License-Identifier: MIT
// --------------------------------------
// i2c_scanner
//
// Modified from https://playground.arduino.cc/Main/I2cScanner/
// --------------------------------------

// The LCD Library used is from https://github.com/johnrickman/LiquidCrystal_I2C
//
// In Arduino Library Manager, is it listed as "LiquidCrystal I2C" by "Frank de Brabander". The version used in dev is 1.1.2 .

#include <Wire.h>

LiquidCrystal_I2C *plcd = NULL;

void setup() {
  Wire.begin();

  Serial.begin(9600);
  while (!Serial)
     delay(10);
  Serial.println("\nI2C Scanner for LCD Backpacks");
  delay(2000);
}


void loop() {
  byte error;
  uint8_t address; 
  int nDevices;
  char addrString[4];

  Serial.println("Scanning...");

  nDevices = 0;
  for(address = 1; address < 127; address++ )
  {
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the address.
    Wire.beginTransmission(address);
    error = Wire.endTransmission();

    if (error == 0)
    {
      Serial.print("I2C device found at decimal address ");
      Serial.print(address);
      Serial.print(" or hexadecimal address 0x");
      Serial.print(address, HEX);
      Serial.println(" !");
      sprintf(addrString, "%#x", address);

        plcd = new LiquidCrystal_I2C(address, 20, 4);
        plcd -> init();
        plcd -> noBacklight();
        delay(1000);
        plcd -> clear();
        plcd -> backlight();
        plcd -> setCursor(0,0);
        plcd -> print("Hello World");
        plcd -> setCursor(0,1);
        plcd -> print(addrString);
        

      nDevices++;
    }
    else if (error==4)
    {
      Serial.print("Unknown error at address 0x");
      if (address<16)
        Serial.print("0");
      Serial.println(address,HEX);
    }
  }
  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else
    Serial.println("done\n");

  delay(60000);
}

RF Cables

There are a wide number of RF cable types that you might run into in industry or even CSE 4340 (Fundamentals of Wireless Networks) or CSE 4377 (Wireless Communication Systems). Here in the SD labs, you will only see a few of them.

(more…)