I have a 4" inky impression screen that has been working fine for about a year. I just took it off my Pi earlier and put it back on later today, and now there’s a stuck column of about 30 pixels at the right edge of the screen. When I update the screen, that column does not flash colors (but the border next to it still flashes). Is this a symptom of a broken display? Did I maybe put too much pressure on the edges when installing?
Here’s what it looks like. The entire display is supposed to be random 20x20 squares, but there’s a column on the right which is unchanged.
Do you have the correct size Impression specified in your code? That looks a bit to me like you’re trying to run an example sized for the 5.7" impression on a 4" screen?
Thank you for pointing me in the right direction, that sounds to be exactly it! The problem was multi-faceted:
- I was using example code I wrote which was using the resolution provided by
display.resolution. Even when I manually update the resolution to the size of the 4", I get an error because it thinks the display resolution is the resolution for the 5" model.
- I recently reinstalled the OS on my Pi and had forgotten to enable I2C, and it seems that prevented the correct EEPROM information from being read, so the display resolution was wrong.
- On a previous install of the raspberry pi os, I was having trouble getting
auto() to read from EEPROM, so I was manually instantiating an
Inky7Colour, which seemed to always read the resolution as the resolution for the 5" model.
So, enabling I2C and then switching back to
auto() solved things for me here. The display no longer has stuck columns!
For anyone else experiencing this, here’s the example code I wrote which now works:
import RPi.GPIO as GPIO
from inky import auto
from PIL import Image, ImageDraw
display = auto()
(DISPLAY_WIDTH, DISPLAY_HEIGHT) = display.resolution
print('Display initialized with resolution', DISPLAY_WIDTH, DISPLAY_HEIGHT)
return (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
with Image.new("RGBA", (DISPLAY_WIDTH, DISPLAY_HEIGHT), (255, 255, 255, 255)) as canvas:
draw = ImageDraw.Draw(canvas)
for x in range(0, DISPLAY_WIDTH, 20):
for y in range(0, DISPLAY_HEIGHT, 20):
draw.rectangle(((x, y), (x + 20, y + 20)), fill=random_color())