16 x 2 character I2C LCD display

Recently imported some Backlit LCD displays, white on blue.They are Generic 16 character by 2 line displays, showing text white on a blue background by using a white backlight.

While these displays can be linked directly to an Arduino , Raspberry Pi or similar, these use the I2C bus system.

I2C is also known as two wire, and is a serial bus that uses only two wires for transmitting data and controlling devices.

All I2C devices have an address on the bus, which must be different for each device. most of the  units I have bought so far have come with a default address 0x3F, although one had a default of 0x27. They have 3 sets of solder pads (A0-2)  that, when bridged, add 10K pull-up resistors to change the address.

They have a jumper to disable the backlight, but of course the characters are then not visible. They also have a potentiometer to adjust the backlight intensity,

This is the sketch I used to test them with an Arduino Uno:

/*—–( Declare Constants )—–*/
/*—–( Declare objects )—–*/
// set the LCD address to 0x3F for a 16 chars 2 line display
// Set the pins on the I2C chip used for LCD connections:
//                    addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Set the LCD I2C address

/*—–( Declare Variables )—–*/

void setup()   /*—-( SETUP: RUNS ONCE )—-*/
  Serial.begin(9600);  // Used to type in characters

  lcd.begin(16,2);   // initialize the lcd for 16 chars 2 lines, turn on backlight

// ——- Quick 3 blinks of backlight  ————-
  for(int i = 0; i< 3; i++)
  lcd.backlight(); // finish with backlight on  

//——– Write characters on the display ——————
// NOTE: Cursor Position: (CHAR, LINE) start at 0  
  lcd.setCursor(0,0); //Start at character 4 on line 0
  lcd.print(“Hello, world!”);
  lcd.print(“Hello World”);

// Wait and then tell user they can start the Serial Monitor and type in characters to
// Display. (Set Serial Monitor option to “No Line Ending”)
  lcd.setCursor(0,0); //Start at character 0 on line 0
  lcd.print(“start typing now”);
  lcd.print(“LCD display test”);  

}/*–(end setup )—*/

void loop()   /*—-( LOOP: RUNS CONSTANTLY )—-*/
    // when characters arrive over the serial port…
    if (Serial.available()) {
      // wait a bit for the entire message to arrive
      // clear the screen
      // read all the available characters
      while (Serial.available() > 0) {
        // display each character to the LCD

}/* –(end main loop )– */

/* ( THE END ) */



Calibrating a 5″ Raspberry Pi touchscreen in Jessie

Previously, I posted about a 5″ touchscreen for the Raspberry Pi.

But I did not mention calibrating the touchscreen.

After a week’s holiday, I came back and sorted this fairly easily.

I was using Raspbian Jessie from NOOBS 1.8

First I installed a new utility:

sudo apt-get install xinput-calibrator


To calibrate the touchscreen, go to the menu>preferences>select “Calibrate touchscreen”

Touch each of the red crosses on the screen in turn, then cut and paste the resulting snippet to the following file by using this command:

sudo nano /usr/share/X11/xorg.conf.d/98-calibration.conf

(this will create a new file and open it for editing)

My entries are below:

Section “InputClass”

Identifier “calibration”

MatchProduct “ADS7846 Touchscreen”

Option “Calibration” “120 3970 205 3920” #(enter your numbers here)

Option “SwapAxes” “0”


Ctrl-O to save, Crtl-x to exit, and then reboot, and your pointer should follow your finger correctly!

Orange Pi One

This is just a quick and dirty guide to getting the Orange Pi One up and running.

First steps:

  1. DON’T connect a microUSB charger to the MicroUSB port. That port is for USB On the go only, i.e. for connecting flash drives etc.
  2. You will need a 5V power supply with a 4mm x 1.7mm barrel connector, centre positive. I used a USB to barrel connector lead, and a Samsung USB charger, which can easily supply 2A. Apparently PSP chargers work as well.
  3. You will need an SDcard for the OS. At least 8GB and preferably at least class 4. A fast one is recommended, apparently the Opi1 may not boot with a slower one.
  4. EDITED:I have since found that some class 10 cards will not work with the OPi1 or even the Raspberry Pi. I used class 4 Kingston 8GB cards, and they work perfectly with both.
  5. If you power on the OPi1 without a properly set up SDcard, nothing will happen, except that the LEDs on the Ethernet port will light. THIS IS NORMAL.
  6. Prepare the SDcard. I followed this excellent guide: http://www.cnx-software.com/2016/03/16/orange-pi-one-board-quick-start-guide-with-armbian-debian-based-linux-distribution/
  7. Once connected up with a valid Boot image, the Ethernet port LEDs light up, followed after a pause of about 20 seconds by the red LED and then the green one will flicker as the system loads. (note on some boards the green LED lights first)
  8. Note: I noticed that if the Ethernet port is not connected, it takes a lot longer to start up.

I have added a Youtube video showing a working Orange Pi One  (and a faulty one)

5″ touchscreen for a Raspberry Pi

Recently bought a Generic 5″ touchscreen from AliExpress.

Model number ZC37200

resolution 800×480

XPT2046 touch controller.

Excellent quality, but getting it working was a bit of a trial.

Many of the tutorials out there are misleading, outdated, or just plain wrong.

This is what I did:


First (easy part), connect it all up, and install Raspbian from NOOBS 1.8.

Either open a terminal or from another PC:

ssh pi@<IP address of your pi>

First the easy part, we get the screen working with a full display.

Because these small screens will only display at native resolution, you may get a partial screen display, or a distorted one.

You need to force native resolution, in the case of the 5” display, that is 800×480.

edit /boot/config.txt

sudo nano /boot/config.txt

edit these lines as follows:

# uncomment if hdmi display is not detected and composite is being output
# uncomment to force a specific HDMI mode (here we are forcing 800x480)
hdmi_cvt 800 480 60 6 0 0 0

The next step is to enable the touchscreen.

In the same file, remove the # from this line:


and add this line:


save and reboot, everything worked!

Next we need to calibrate it, but I need more time to work that one out, will post in the next few days.