Pico Display Pack 2.0 - Dead on Arrival?


Just got my Pico Display Pack 2.0 and plugged it in to an Pico W.

Loaded it with the Pimoroni Pico build of micropython, and nothing… After some more troubleshooting it seems that it is only the actual display that doesn’t work, as I can change the onboard RGB LED, as well as update the screen brightness. But nothing in terms of screen content seem to work.

Any ideas?

On mine I’m using the following in my code.
from picographics import PicoGraphics, DISPLAY_PICO_DISPLAY_2
display = PicoGraphics(display=DISPLAY_PICO_DISPLAY_2, rotate=0)

I’m not seeing that in the examples? If these are the correct examples?
pimoroni-pico/micropython/examples/pico_display at main · pimoroni/pimoroni-pico (github.com)
What code isn’t working for you? Any error messages?

Try this:

import time
import random
from picographics import PicoGraphics, DISPLAY_PICO_DISPLAY_2, PEN_P8

display = PicoGraphics(display=DISPLAY_PICO_DISPLAY_2, pen_type=PEN_P8)

WIDTH, HEIGHT = display.get_bounds()

# We're creating 100 balls with their own individual colour and 1 BG colour
# for a total of 101 colours, which will all fit in the custom 256 entry palette!

class Ball:
    def __init__(self, x, y, r, dx, dy, pen):
        self.x = x
        self.y = y
        self.r = r
        self.dx = dx
        self.dy = dy
        self.pen = pen

# initialise shapes
balls = []
for i in range(0, 100):
    r = random.randint(0, 10) + 3
            random.randint(r, r + (WIDTH - 2 * r)),
            random.randint(r, r + (HEIGHT - 2 * r)),
            (14 - r) / 2,
            (14 - r) / 2,
            display.create_pen(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)),

BG = display.create_pen(40, 40, 40)

while True:

    for ball in balls:
        ball.x += ball.dx
        ball.y += ball.dy

        xmax = WIDTH - ball.r
        xmin = ball.r
        ymax = HEIGHT - ball.r
        ymin = ball.r

        if ball.x < xmin or ball.x > xmax:
            ball.dx *= -1

        if ball.y < ymin or ball.y > ymax:
            ball.dy *= -1

        display.circle(int(ball.x), int(ball.y), int(ball.r))


The most common mistake is to leave out the


line. It is essential to shift the buffer to the screen.

This is such a mysterious pico…

First I double checked what @alphanumeric said, and I had already made those updates in my troubleshooting.

Secondly I tried what @Tonygo2 suggested, and absolutely nothing changed.

Thirdly I just unplugged it and replugged it repeatedly and on the 8th time it suddenly turned on!

After some more fiddling, it seems that there’s some connectivity issue, because I can get it to update when I squeeze it in a specific way, and as soon as I let go it stops updating… Ideas on what to do?

Quick video to show what I mean: Pimoroni Display - squeeze to update feature - Album on Imgur

bad cable? bad solder join on a trace? try different cables, if it fails the same way contact seller for replacement.

Looks like a fault - bad connection - in the screen.

Have a look at the solder tabs on the headers. See if one didn’t get soldered to the pad on the board. If thats the issue, and you know how to solder, its an easy fix.