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 editor – the 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):
InitDisplay()
def showTemp():
clear()
showText('Current temp: ' + str(temperature()) + 'C')
setCursor(0,1)
showText('Max: ' + str(maxTemp) + ' Min: ' + str(minTemp))
currentTemp = temperature()
maxTemp = currentTemp
minTemp = currentTemp
showTemp()
while True:
if currentTemp != temperature():
currentTemp = temperature()
if currentTemp > maxTemp:
maxTemp = currentTemp
if currentTemp < minTemp:
minTemp = currentTemp
showTemp()
sleep(1000)
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?






