Kepler Kit Liquid Crystal Display Error

I can not get the LCD working on the kepler kit (RP Pico W).
all I get is:
Traceback (most recent call last):
File “”, line 4, in
File “”, line 12, in init
File “”, line 35, in send_command
File “”, line 29, in write_word
OSError: [Errno 5] EIO
I assume the error is in the LCD library but I’ve cleared everything and reloaded it several times.
this is all stock so it should just run like eveything else I’ve run in the kepler kit.

If this error is reported, it may be that the wiring is wrong, or the wiring is bad.
Please try another set of wires.
Tip: SDA connects to GP6, SCL connects to GP7
Please check it according to the corresponding picture.

I get the same error message.

Wiring is good.

Appreciate any help.


I first discovered it working on 7.2 Room Temperature Meter Which uses GP0 & GP1.
I checked the wires several times. Then I moved to 3.4 Liquid crystal Display, which uses different GPIO pins, to isolate the problem and still had the problem.

This error may be: 1. The wiring is wrong; 2. The LCD1602 is damaged and cannot receive I2C data; 3. There is also poor contact between the Dupont line and the breadboard. You can replace the Dupont line and try a few more times.

How can I get a new LCD1602? I have eliminated all the other possibilities.

Bad LCD(or I2C). I remembered I bought the same kit for my son so I used his and got it running.
Mine still produces the same code. I just need to find out how to get a replacement.
I suppose I could just return the whole thing to Amazon but I’d rather just get a new LCD.

Thanks for figuring out the problem. I just ordered a replacement kit. I doubt you’ll be able to get just the LCD but hopefully you do.
I’ll report back when I get the new kit and see if the LCD works.

Now that I proved the LCD was bad and I am working with a “good” LCD, I tried the room temperature Meter and it didn’t work…Rewired it several times, still errors out

Traceback (most recent call last):
File “”, line 7, in
File “”, line 12, in init
File “”, line 35, in send_command
File “”, line 29, in write_word
OSError: [Errno 5] EIO

So I figured it out, the diagram is wrong on the website.
It says SDA/SDL goes to gp0/gp1. They do not. You can tell
because there is no reference to gp0/gp1 in the 7.2 Room Temperature Meter code
and the LCD1602 module refers to sda = machine.Pin(6) scl = machine.Pin(7), which are physical pins 9/10.
Also, 7.2 Room Temperature Meter code comes with 3 lines commented out.
You have to uncomment them.


Good catch. I checked the 1602 module and sure enough it states pins 6 and 7. The same as used in the other LCD project.

When I receive my replacement kit tomorrow I’ll grab the LCD and try both projects.


Got the replacement kit today and have the same problem!

I don’t want to order another replacement kit at this point so I’ll just keep the kit and forget any projects with the LCD.

Very disappointing…

Yeah they have to replace them. I don’t know what the proper channel is but considering this is their forum you would think they would eventually notice and offer a replacement.
They are $10 a pop. Who wants to order 5 or 10 of them and have 3 bad ones? I will mention it to Paul McWhorter.

1 Like

I think Paul is going to do a series on this kit. I hope he does, I really enjoy his videos.

OK, not funny any more…this is the third replacement kit and it still will not work!

I’ve attached two pictures of the set up. If anyone can see what I’m doing wrong I’d really appreciate it!


Looks Right. Looks like they won’t be back until the 27th. Hopefully they will swap out the bad LCDs.
4/5 defective is pretty bad.

Well what do you know…finally got it working.

As it turns out the “address” of the LCD display is different from what’s in the library.

Here’s a link that shows how to find the address of the LCD. LCD Address

Here’s what I had to do to fix the problem. In the code as seen below the address is addr=0x27 as soon as I changed it to addr=0x3f it worked.

import machine
import time

class LCD():
def init(self, addr=0x27, blen=1):

This is what it looks like now:

import machine
import time

class LCD():
def init(self, addr=0x3f, blen=1):

Awesome! Great Job! Worked for me too. Turns out I have an x27 and an x3f.
I wrote the addresses on the back of the LCDs and commented the code so I could switch them as needed without relying on my terrible memory. Thanks a bunch


And that’s a great idea marking the back of the LCD with it’s address…my memory is more than terrible, blame it on my old age!

Not sure how Sunfounder can fix this issue unless there’s a way to change to code to check and see what address the LCD has. Maybe an “if/or” statement with the different address could be added. I don’t know because I’m not a coder…

Fantastic, It’s great that you figured it out yourself. I am sorry for the inconvenience caused to you, and I am also very grateful for your feedback, and we will investigate your feedback in depth.

1 Like