Add a 16×2 LCD display to a micro:bit

I had one of these cheap 16 x 2 LCD display modules hanging around that I bought to go with some Arduino or Raspberry Pi project that I never finished – in fact I couldn’t get the thing to work at all.

So I’m delighted to have got it working with a micro:bit! Here’s what I used:

  • 16 x 2 LCD module
  • medium-large breadboard
  • a whole heap of jumper wires, some male-male, some male-female
  • a BBC micro:bit
  • a Kitronik micro:bit breakout board
  • a 5V power supply
  • a 1KΩ resistor

I used this project as the basis, which includes a Python program to drive the display (registration required). You don’t need to download MicroPython to program a micro:bit, you can use the online editorthe beta Python editor will even allow you to flash programs straight to your micro:bit over webUSB if you’re using Chrome.

The wiring diagram isn’t very clear on that website, so here’s a list of all the pins on the LCD display and what you need to connect them to:

LCD pin LCD function connect to
1 GND – 0v GND on micro:bit & -ve 5v
2 5v in +ve 5v
3 Contrast GND via a resistor
4 Register select micro:bit pin 0
5 Read/write GND
6 Enable micro:bit pin 1
7 Data DB0 not connected
8 Data DB1 not connected
9 Data DB2 not connected
10 Data DB3 not connected
11 Data DB4 micro:bit pin 8
12 Data DB5 micro:bit pin 12
13 Data DB6 micro:bit pin 2
14 Data DB7 micro:bit pin 13
15 Backlight +ve +ve 5v
16 Backlight GND -ve 5v

I tried driving the whole thing off the 3v supply on the micro:bit, but it didn’t work – I think you really do need an external 5v power supply as there has to be a bigger difference in voltage between the power in and the contrast pin (although perhaps someone can do something clever with this information?) I didn’t have one to hand, so I chopped an old USB lead in half, and stripped the wires back to get 5v off the red (positive) and black (negative) wires, which I connected to the +ve and -ve (GND) rails on my breadboard.

Normally you’d use a potentiometer to adjust the contrast, but I just used a 1KΩ resistor instead.

You’ll see in the video that I added a little switch as well to turn the backlight on and off and you’ll see below I found an old volume control or something which I’ve pressed into service as a contrast knob on my maximum / minimum temperature display:

Here’s the Python program that does the temperature display (not including the LCD driver code):


def showTemp():
    showText('Current temp: ' + str(temperature()) + 'C')
    showText('Max: ' + str(maxTemp) + '  Min: ' + str(minTemp))

currentTemp = temperature()
maxTemp = currentTemp
minTemp = currentTemp

while True:
    if currentTemp != temperature():
        currentTemp = temperature()
        if currentTemp > maxTemp:
            maxTemp = currentTemp
        if currentTemp < minTemp:
            minTemp = currentTemp

It would be nice if someone made an adaptor to allow you to plug one of these common LCD modules straight into a micro:bit, with a USB input for 5v display power, maybe back-powering the micro:bit with 3v?

Now what else shall I do with it? Show received radio messages from other micro:bits, make another Little Box of Poems or other random fact dispenser?

This entry was posted in microbit and tagged , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *


You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>