Raspberry Pi Pico
11x7 LED Matrix Breakout
The 11x7 LED matrix breakout is a nice little board. It is part of a range of lovely Pimoroni products called the 'breakout garden'. Pimoroni have built a library into their own MicroPython build. I thought I'd have a quick go and see how easy it was to use the same code base I had for the Scroll Pack.
I am using a breadboard adapter that Pimoroni have for these boards. This means that nothing had to be soldered to get this working.
A minor adjustment to the library I used for the Scroll Pack. Again, I have added line breaks to the font definition to make this fit the page. Remove the line breaks when you copy this. This is the library that I saved as scroll11x7.py.
from time import sleep_ms font = bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x00\x00\x07\x00\x07\x00\x14\x7f \x14\x7f\x14\x24\x2a\x7f\x2a\x12\x23\x13\x08\x64\x62\x36\x49\x55\x22\x50\x00\x05\x03\x00\x00 \x00\x1c\x22\x41\x00\x00\x41\x22\x1c\x00\x14\x08\x3e\x08\x14\x08\x08\x3e\x08\x08\x00\x50\x30 \x00\x00\x08\x08\x08\x08\x08\x00\x60\x60\x00\x00\x20\x10\x08\x04\x02\x3e\x51\x49\x45\x3e\x00 \x42\x7f\x40\x00\x42\x61\x51\x49\x46\x21\x41\x45\x4b\x31\x18\x14\x12\x7f\x10\x27\x45\x45\x45 \x39\x3c\x4a\x49\x49\x30\x01\x71\x09\x05\x03\x36\x49\x49\x49\x36\x06\x49\x49\x29\x1e\x00\x36 \x36\x00\x00\x00\x56\x36\x00\x00\x08\x14\x22\x41\x00\x14\x14\x14\x14\x14\x00\x41\x22\x14\x08 \x02\x01\x51\x09\x06\x32\x49\x79\x41\x3e\x7e\x11\x11\x11\x7e\x7f\x49\x49\x49\x36\x3e\x41\x41 \x41\x22\x7f\x41\x41\x22\x1c\x7f\x49\x49\x49\x41\x7f\x09\x09\x09\x01\x3e\x41\x49\x49\x7a\x7f \x08\x08\x08\x7f\x00\x41\x7f\x41\x00\x20\x40\x41\x3f\x01\x7f\x08\x14\x22\x41\x7f\x40\x40\x40 \x40\x7f\x02\x0c\x02\x7f\x7f\x04\x08\x10\x7f\x3e\x41\x41\x41\x3e\x7f\x09\x09\x09\x06\x3e\x41 \x51\x21\x5e\x7f\x09\x19\x29\x46\x46\x49\x49\x49\x31\x01\x01\x7f\x01\x01\x3f\x40\x40\x40\x3f \x1f\x20\x40\x20\x1f\x3f\x40\x38\x40\x3f\x63\x14\x08\x14\x63\x07\x08\x70\x08\x07\x61\x51\x49 \x45\x43\x00\x7f\x41\x41\x00\x02\x04\x08\x10\x20\x00\x41\x41\x7f\x00\x04\x02\x01\x02\x04\x40 \x40\x40\x40\x40\x00\x01\x02\x04\x00\x20\x54\x54\x54\x78\x7f\x48\x44\x44\x38\x38\x44\x44\x44 \x20\x38\x44\x44\x48\x7f\x38\x54\x54\x54\x18\x08\x7e\x09\x01\x02\x0c\x52\x52\x52\x3e\x7f\x08 \x04\x04\x78\x00\x44\x7d\x40\x00\x20\x40\x44\x3d\x00\x7f\x10\x28\x44\x00\x00\x41\x7f\x40\x00 \x7c\x04\x18\x04\x78\x7c\x08\x04\x04\x78\x38\x44\x44\x44\x38\x7c\x14\x14\x14\x08\x08\x14\x14 \x18\x7c\x7c\x08\x04\x04\x08\x48\x54\x54\x54\x20\x04\x3f\x44\x40\x20\x3c\x40\x40\x20\x7c\x1c \x20\x40\x20\x1c\x3c\x40\x30\x40\x3c\x44\x28\x10\x28\x44\x0c\x50\x50\x50\x3c\x44\x64\x54\x4c \x44\x00\x08\x36\x41\x00\x00\x00\x7f\x00\x00\x00\x41\x36\x08\x00\x10\x08\x08\x10\x08\x00\x00 \x00\x00\x00') _f = 0 _b = bytearray(145) class Matrix: def __init__(self, i2c): self.i2c = i2c self._w(253, 11) sleep_ms(100) self._w(10, 0) sleep_ms(100) self._w(10, 1) sleep_ms(100) self._w(0, 0) self._w(6, 0) for bank in [1,0]: self._w(253, bank) self._w([0] + [255] * 17) self.clear() self.show() def _w(self, *args): if len(args) == 1: args = args[0] self.i2c.writeto(117, bytes(args)) def clear(self): global _b del _b _b = bytearray(145) def fill(self, v): global _b del _b _b = bytearray([v]*145) def show(self): global _f _f = not _f self._w(253, _f) _b[0] = 36 self._w(_b) self._w(253, 11) self._w(1, _f) def set_pixel(self,col, row, brightness): global _b _b[self._pixel_addr(col, row)] = brightness def get_pixel(self, col, row): global _b return _b[self._pixel_addr(col, row)] def _pixel_addr(self, x, y): return (x << 4) - y + 1 + (6 if x <= 5 else -82) def scroll(self, txt, delay, v): global _b msg = bytearray([0]*11) for c in txt: msg += bytearray(b'\x00') msg += font[(ord(c)-32)*5:(ord(c)-32)*5+5] msg += bytearray(b'\x00') msg += bytearray([0]*11) for i in range(len(msg)-11): m = msg[i:i+11] for y in range(7): for x in range(11): if m[x]>>y & 1: self.set_pixel(x,y,v) else: self.set_pixel(x,y,0) self.show() sleep_ms(delay)
I connected up the pins of the adapter so that the 3V and GND pins went where you would expect. I have connected SDA to GP4 and SCL to GP5,
from machine import Pin, I2C from time import sleep from scroll11x7 import Matrix i2c=I2C(0,sda=Pin(4), scl=Pin(5)) display = Matrix(i2c) # test pixel writing for y in range(7): for x in range(11): display.set_pixel(x,y,128) display.show() sleep(0.05) while True: display.scroll("Scrolling again.", 50, 128)