Inky wHAT on a pi zero w

Hey all, I’m using a pi zero w running trixie os lite.
I’m pretty sure I’ve configured everything correctly on the Pi, but happy to be prodded on that of course because…

the display isn’t updating.

From what I can see the ribbon is seated correctly, and the headers seem correct but when I slot the pi into the hat it fails as busy:

(pimoroni) pi@raspberrypi:~ $ sudo python3 test_inky.py
Traceback (most recent call last):
File “/home/pi/test_inky.py”, line 13, in
inky.show()
~~~~~~~^^
File “/usr/local/lib/python3.13/dist-packages/inky/inky.py”, line 368, in show
self._update(buf_a, buf_b, busy_wait=busy_wait)
~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/usr/local/lib/python3.13/dist-packages/inky/inky.py”, line 336, in _update
self._busy_wait()
~~~~~~~~~~~~^^
File “/usr/local/lib/python3.13/dist-packages/inky/inky.py”, line 272, in _busy_wait
raise RuntimeError(“Timeout waiting for busy signal to clear.”)
RuntimeError: Timeout waiting for busy signal to clear.

this is the script:
#!/usr/bin/env python3
from inky import InkyWHAT
from PIL import Image, ImageFont, ImageDraw
inky = InkyWHAT(“red”)
img = Image.new(“P”, (inky.WIDTH, inky.HEIGHT))
draw = ImageDraw.Draw(img)
draw.text((0, 0), “Hello Inky!”, fill=inky.RED)
inky.set_image(img)
inky.show(busy_wait=False)
print(“Update sent (busy wait disabled).”)

what have I done wrong and how nooby is it hah!
Should I replace the pi or the display (hope not, I’ve got what I’ve got for now to be honest), or is it an easy fix? I’m hitting a brick wall here
Thanks!

I found this article: /pimoroni/inky/issues/103
And followed this:
”I fixed this by changing the busy pin in inky.py. Do this at your own risk!
run pintest to confirm that GPIO 17 is failing to write.
Find inky.py in your virtual environment folder’s directory
edit this line https://github.com/pimoroni/inky/blob/main/inky/inky.py#L23 to be an unused GPIO slot - I used 23.
Reboot because it felt like the right thing to do
and it worked for me!”

busy error now gone but the display still isn’t updating, hmmm!

I see from your support ticket that you’re using a four colour Inky wHAT - I think you might be trying to use the drivers for the older three colour Inky wHAT there?

If you initialise the display with

from inky.auto import auto
display = auto()

it should autodetect what screen you have and use the correct drivers. There’s also some examples for the new Inky wHAT here that you could try here: inky/examples/what at main · pimoroni/inky · GitHub

thank you for the reply, much appreciated.
oh! I tried that originally and no EEPROM was detected so I went to maually do it since I have the ‘inky wHat 4 colour PIM785’
Running auto gives

Traceback (most recent call last):
File “/home/pi/test_inky.py”, line 6, in
inky = auto()
File “/home/pi/.virtualenvs/pimoroni/lib/python3.13/site-packages/inky/auto.py”, line 103, in auto
raise RuntimeError(“No EEPROM detected! You must manually initialise your Inky board.”)
RuntimeError: No EEPROM detected! You must manually initialise your Inky board.

and when I try to run an inky example:


(pimoroni) pi@raspberrypi:~/inky/examples $ python logo.py --type what --colour red
Inky pHAT/wHAT: Logo

Displays the Inky pHAT/wHAT logo.

Failed to detect an Inky board. Trying --type/–colour arguments instead…

Traceback (most recent call last):
File “/home/pi/inky/examples/logo.py”, line 61, in 
inky_display.show()
~~~~~~~~~~~~~~~~~^^
File “/home/pi/.virtualenvs/pimoroni/lib/python3.13/site-packages/inky/inky.py”, line 368, in show
self._update(buf_a, buf_b, busy_wait=busy_wait)
~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/home/pi/.virtualenvs/pimoroni/lib/python3.13/site-packages/inky/inky.py”, line 336, in _update
self._busy_wait()
~~~~~~~~~~~~~~~^^
File “/home/pi/.virtualenvs/pimoroni/lib/python3.13/site-packages/inky/inky.py”, line 272, in _busy_wait
raise RuntimeError(“Timeout waiting for busy signal to clear.”)
RuntimeError: Timeout waiting for busy signal to clear.
(pimoroni) pi@raspberrypi:~/inky/examples $

Ah - check that I2C is enabled in sudo raspi-config (It’s under ‘Interfacing Options’)?

If you’re specifying the driver manually I think you’ll need to do --type whatjd79668. That’s not as catchy as using the auto-detect though :)

Sure, defo enabled for both SPI and I2C!

(pimoroni) pi@raspberrypi:~/inky/examples $ ls -l /dev/spi*
crw-rw---- 1 root spi 153, 0 Dec 17 12:32 /dev/spidev0.0
(pimoroni) pi@raspberrypi:~/inky/examples $ ls -l /dev/i2c*
crw-rw---- 1 root i2c 89, 1 Dec 17 12:32 /dev/i2c-1
crw-rw---- 1 root i2c 89, 2 Dec 17 12:32 /dev/i2c-2
(pimoroni) pi@raspberrypi:~/inky/examples $ 

and the off chance I’m just being an idiot - I have connected the display via the headers only (no other cabling) with the hdmi port facing downwards.
And I’ve checked and rechecked the ribbon cable and I’m sure it’s seated correctly (or as correctly as I can physically do it!)

Hmm, is the Inky showing up if you do an I2C scan?

sudo i2cdetect -y 1

No:

pi@raspberrypi:~ $ source ~/.virtualenvs/pimoroni/bin/activate
(pimoroni) pi@raspberrypi:~ $ sudo i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: – – – – – – – –
10: – – – – – – – – – – – – – – – –
20: – – – – – – – – – – – – – – – –
30: – – – – – – – – – – – – – – – –
40: – – – – – – – – – – – – – – – –
50: – – – – – – – – – – – – – – – –
60: – – – – – – – – – – – – – – – –
70: – – – – – – – –
(pimoroni) pi@raspberrypi:~ $ ls -l /dev/spidev*
crw-rw---- 1 root spi 153, 0 Dec 17 12:32 /dev/spidev0.0
(pimoroni) pi@raspberrypi:~ $ lsmod | grep spi
spidev 16384 0
spi_bcm2835 16384 0

Juat want to confirm you have the booster header in place.
Inky header > booster header > Pi header, ?

Ah! No I removed it to limit potential failure points, I was going to re-attach once it was working.
Having re-attached (now it’s inky → booster header → Pi header) I have the following, no change seemingly
pi@raspberrypi:~ $ source ~/.virtualenvs/pimoroni/bin/activate
(pimoroni) pi@raspberrypi:~ $ sudo i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: – – – – – – – –
10: – – – – – – – – – – – – – – – –
20: – – – – – – – – – – – – – – – –
30: – – – – – – – – – – – – – – – –
40: – – – – – – – – – – – – – – – –
50: – – – – – – – – – – – – – – – –
60: – – – – – – – – – – – – – – – –
70: – – – – – – – –
(pimoroni) pi@raspberrypi:~ $ ls -l /dev/spidev*
crw-rw---- 1 root spi 153, 0 Dec 17 21:15 /dev/spidev0.0
(pimoroni) pi@raspberrypi:~ $ ls -l /dev/i2c*
crw-rw---- 1 root i2c 89, 1 Dec 17 21:15 /dev/i2c-1
crw-rw---- 1 root i2c 89, 2 Dec 17 21:15 /dev/i2c-2

trying a logo example gave:

(pimoroni) pi@raspberrypi:~/inky/examples $ python3 logo.py --type what --colour red
Inky pHAT/wHAT: Logo

Displays the Inky pHAT/wHAT logo.

Failed to detect an Inky board. Trying --type/–colour arguments instead…

Traceback (most recent call last):
File “/home/pi/inky/examples/logo.py”, line 61, in 
inky_display.show()
~~~~~~~~~~~~~~~~~^^
File “/home/pi/.virtualenvs/pimoroni/lib/python3.13/site-packages/inky/inky.py”, line 368, in show
self._update(buf_a, buf_b, busy_wait=busy_wait)
~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/home/pi/.virtualenvs/pimoroni/lib/python3.13/site-packages/inky/inky.py”, line 283, in _update
self.setup()
~~~~~~~~~~^^
File “/home/pi/.virtualenvs/pimoroni/lib/python3.13/site-packages/inky/inky.py”, line 265, in setup
self._busy_wait(1.0)
~~~~~~~~~~~~~~~^^^^^
File “/home/pi/.virtualenvs/pimoroni/lib/python3.13/site-packages/inky/inky.py”, line 272, in _busy_wait
raise RuntimeError(“Timeout waiting for busy signal to clear.”)
RuntimeError: Timeout waiting for busy signal to clear.
(pimoroni) pi@raspberrypi:~/inky/examples $

Is the header on the Pi Zero W soldered in place?

hi, no I’ve used the solderless ones.

One thing I’ve noticed when inspecting them just now is the fact that the ‘anchor’ of pin 2 has somehow snapped off!
no idea how, and why just that one :|
it still seems to be making contact but it seems more likely for that to be the culprit than anything else!

I’m guessing Pin 2 is important, and poor/no connection would likely lead to no functionality on the display, right?
And I’m guessing the display is pretty robust so I can store the display until Ive fixed the headers and try again?
Argh, frustrating, but I’m happy that the culprit is likely to be a replacement header rather than the display

Thanks for your time and patience, I will re-order the header and try again.

Ah yeah, physical pin 2 is one of the power pins, so if that’s making a poor connection that would definitely explain why the Inky’s not talking!

Let us know how you get on with the new header :)

1 Like