init_code = bytes(( b'\xff\x010' b'\xff\x01R' b'\xff\x01\x01' b'\xe3\x01\x00' b'\n\x01\x11' b'#\x01\xa0' b'$\x012' b'%\x01\x12' b'&\x01.' b"'\x01." b')\x01\x02' b'*\x01\xcf' b'2\x014' b'8\x01\x9c' b'9\x01\xa7' b":\x01'" b';\x01\x94' b'B\x01m' b'C\x01\x83' b'\x81\x01\x00' b'\x91\x01g' b'\x92\x01g' b'\xa0\x01R' b'\xa1\x01P' b'\xa4\x01\x9c' b'\xa7\x01\x02' b'\xa8\x01\x02' b'\xa9\x01\x02' b'\xaa\x01\xa8' b'\xab\x01(' b'\xae\x01\xd2' b'\xaf\x01\x02' b'\xb0\x01\xd2' b'\xb2\x01&' b'\xb3\x01&' b'\xff\x010' b'\xff\x01R' b'\xff\x01\x02' b'\xb1\x01\n' b'\xd1\x01\x0e' b'\xb4\x01/' b'\xd4\x01-' b'\xb2\x01\x0c' b'\xd2\x01\x0c' b'\xb3\x010' b'\xd3\x01*' b'\xb6\x01\x1e' b'\xd6\x01\x16' b'\xb7\x01;' b'\xd7\x015' b'\xc1\x01\x08' b'\xe1\x01\x08' b'\xb8\x01\r' b'\xd8\x01\r' b'\xb9\x01\x05' b'\xd9\x01\x05' b'\xbd\x01\x15' b'\xdd\x01\x15' b'\xbc\x01\x13' b'\xdc\x01\x13' b'\xbb\x01\x12' b'\xdb\x01\x10' b'\xba\x01\x11' b'\xda\x01\x11' b'\xbe\x01\x17' b'\xde\x01\x17' b'\xbf\x01\x0f' b'\xdf\x01\x0f' b'\xc0\x01\x16' b'\xe0\x01\x16' b'\xb5\x01.' b'\xd5\x01?' b'\xb0\x01\x03' b'\xd0\x01\x02' b'\xff\x010' b'\xff\x01R' b'\xff\x01\x03' b'\x08\x01\t' b'\t\x01\n' b'\n\x01\x0b' b'\x0b\x01\x0c' b'(\x01"' b'*\x01\xe9' b'+\x01\xe9' b'4\x01Q' b'5\x01\x01' b'6\x01&' b'7\x01\x13' b'@\x01\x07' b'A\x01\x08' b'B\x01\t' b'C\x01\n' b'D\x01"' b'E\x01\xdb' b'F\x01\xdc' b'G\x01"' b'H\x01\xdd' b'I\x01\xde' b'P\x01\x0b' b'Q\x01\x0c' b'R\x01\r' b'S\x01\x0e' b'T\x01"' b'U\x01\xdf' b'V\x01\xe0' b'W\x01"' b'X\x01\xe1' b'Y\x01\xe2' b'\x80\x01\x1e' b'\x81\x01\x1e' b'\x82\x01\x1f' b'\x83\x01\x1f' b'\x84\x01\x05' b'\x85\x01\n' b'\x86\x01\n' b'\x87\x01\x0c' b'\x88\x01\x0c' b'\x89\x01\x0e' b'\x8a\x01\x0e' b'\x8b\x01\x10' b'\x8c\x01\x10' b'\x8d\x01\x00' b'\x8e\x01\x00' b'\x8f\x01\x1f' b'\x90\x01\x1f' b'\x91\x01\x1e' b'\x92\x01\x1e' b'\x93\x01\x02' b'\x94\x01\x04' b'\x96\x01\x1e' b'\x97\x01\x1e' b'\x98\x01\x1f' b'\x99\x01\x1f' b'\x9a\x01\x05' b'\x9b\x01\t' b'\x9c\x01\t' b'\x9d\x01\x0b' b'\x9e\x01\x0b' b'\x9f\x01\r' b'\xa0\x01\r' b'\xa1\x01\x0f' b'\xa2\x01\x0f' b'\xa3\x01\x00' b'\xa4\x01\x00' b'\xa5\x01\x1f' b'\xa6\x01\x1f' b'\xa7\x01\x1e' b'\xa8\x01\x1e' b'\xa9\x01\x01' b'\xaa\x01\x03' b'\xff\x010' b'\xff\x01R' b'\xff\x01\x00' b'6\x01\n' b'\x11\x81\x00\xc8' b')\x81\x00d' ))
tft_timings = { "frequency": 16000000, "width": 720, "height": 720, "hsync_pulse_width": 2, "hsync_back_porch": 44, "hsync_front_porch": 46, "hsync_idle_low": False, "vsync_pulse_width": 16, "vsync_back_porch": 16, "vsync_front_porch": 50, "vsync_idle_low": False, "pclk_active_high": True, "pclk_idle_high": False, "de_idle_high": False, }
from displayio import release_displays release_displays() import displayio import busio import board import dotclockframebuffer from framebufferio import FramebufferDisplay init_sequence_hd40015c40 = bytes(( b'\xff\x010' b'\xff\x01R' b'\xff\x01\x01' b'\xe3\x01\x00' b'\n\x01\x11' b'#\x01\xa0' b'$\x012' b'%\x01\x12' b'&\x01.' b"'\x01." b')\x01\x02' b'*\x01\xcf' b'2\x014' b'8\x01\x9c' b'9\x01\xa7' b":\x01'" b';\x01\x94' b'B\x01m' b'C\x01\x83' b'\x81\x01\x00' b'\x91\x01g' b'\x92\x01g' b'\xa0\x01R' b'\xa1\x01P' b'\xa4\x01\x9c' b'\xa7\x01\x02' b'\xa8\x01\x02' b'\xa9\x01\x02' b'\xaa\x01\xa8' b'\xab\x01(' b'\xae\x01\xd2' b'\xaf\x01\x02' b'\xb0\x01\xd2' b'\xb2\x01&' b'\xb3\x01&' b'\xff\x010' b'\xff\x01R' b'\xff\x01\x02' b'\xb1\x01\n' b'\xd1\x01\x0e' b'\xb4\x01/' b'\xd4\x01-' b'\xb2\x01\x0c' b'\xd2\x01\x0c' b'\xb3\x010' b'\xd3\x01*' b'\xb6\x01\x1e' b'\xd6\x01\x16' b'\xb7\x01;' b'\xd7\x015' b'\xc1\x01\x08' b'\xe1\x01\x08' b'\xb8\x01\r' b'\xd8\x01\r' b'\xb9\x01\x05' b'\xd9\x01\x05' b'\xbd\x01\x15' b'\xdd\x01\x15' b'\xbc\x01\x13' b'\xdc\x01\x13' b'\xbb\x01\x12' b'\xdb\x01\x10' b'\xba\x01\x11' b'\xda\x01\x11' b'\xbe\x01\x17' b'\xde\x01\x17' b'\xbf\x01\x0f' b'\xdf\x01\x0f' b'\xc0\x01\x16' b'\xe0\x01\x16' b'\xb5\x01.' b'\xd5\x01?' b'\xb0\x01\x03' b'\xd0\x01\x02' b'\xff\x010' b'\xff\x01R' b'\xff\x01\x03' b'\x08\x01\t' b'\t\x01\n' b'\n\x01\x0b' b'\x0b\x01\x0c' b'(\x01"' b'*\x01\xe9' b'+\x01\xe9' b'4\x01Q' b'5\x01\x01' b'6\x01&' b'7\x01\x13' b'@\x01\x07' b'A\x01\x08' b'B\x01\t' b'C\x01\n' b'D\x01"' b'E\x01\xdb' b'F\x01\xdc' b'G\x01"' b'H\x01\xdd' b'I\x01\xde' b'P\x01\x0b' b'Q\x01\x0c' b'R\x01\r' b'S\x01\x0e' b'T\x01"' b'U\x01\xdf' b'V\x01\xe0' b'W\x01"' b'X\x01\xe1' b'Y\x01\xe2' b'\x80\x01\x1e' b'\x81\x01\x1e' b'\x82\x01\x1f' b'\x83\x01\x1f' b'\x84\x01\x05' b'\x85\x01\n' b'\x86\x01\n' b'\x87\x01\x0c' b'\x88\x01\x0c' b'\x89\x01\x0e' b'\x8a\x01\x0e' b'\x8b\x01\x10' b'\x8c\x01\x10' b'\x8d\x01\x00' b'\x8e\x01\x00' b'\x8f\x01\x1f' b'\x90\x01\x1f' b'\x91\x01\x1e' b'\x92\x01\x1e' b'\x93\x01\x02' b'\x94\x01\x04' b'\x96\x01\x1e' b'\x97\x01\x1e' b'\x98\x01\x1f' b'\x99\x01\x1f' b'\x9a\x01\x05' b'\x9b\x01\t' b'\x9c\x01\t' b'\x9d\x01\x0b' b'\x9e\x01\x0b' b'\x9f\x01\r' b'\xa0\x01\r' b'\xa1\x01\x0f' b'\xa2\x01\x0f' b'\xa3\x01\x00' b'\xa4\x01\x00' b'\xa5\x01\x1f' b'\xa6\x01\x1f' b'\xa7\x01\x1e' b'\xa8\x01\x1e' b'\xa9\x01\x01' b'\xaa\x01\x03' b'\xff\x010' b'\xff\x01R' b'\xff\x01\x00' b'6\x01\n' b'\x11\x81\x00\xc8' b')\x81\x00d' )) tft_pins = dict(board.TFT_PINS) tft_timings = { "frequency": 16000000, "width": 720, "height": 720, "hsync_pulse_width": 2, "hsync_back_porch": 44, "hsync_front_porch": 46, "hsync_idle_low": False, "vsync_pulse_width": 16, "vsync_back_porch": 16, "vsync_front_porch": 50, "vsync_idle_low": False, "pclk_active_high": True, "pclk_idle_high": False, "de_idle_high": False, } board.I2C().deinit() i2c = busio.I2C(board.SCL, board.SDA) tft_io_expander = dict(board.TFT_IO_EXPANDER) #tft_io_expander['i2c_address'] = 0x38 # uncomment for rev B dotclockframebuffer.ioexpander_send_init_sequence(i2c, init_sequence_hd40015c40, **tft_io_expander) i2c.deinit() bitmap = displayio.OnDiskBitmap("/round-display-ruler-720p.bmp") fb = dotclockframebuffer.DotClockFramebuffer(**tft_pins, **tft_timings) display = FramebufferDisplay(fb, auto_refresh=False) # Create a TileGrid to hold the bitmap tile_grid = displayio.TileGrid(bitmap, pixel_shader=bitmap.pixel_shader) # Center the image tile_grid.x -= (bitmap.width - display.width) // 2 tile_grid.y -= (bitmap.height - display.height) // 2 # Create a Group to hold the TileGrid group = displayio.Group() # Add the TileGrid to the Group group.append(tile_grid) # Add the Group to the Display display.root_group = group display.auto_refresh = True # Loop forever so you can enjoy your image while True: pass
Download the following image into the root folder of of your CIRCUITPY drive:
Go ahead and save the example you your CircuitPython code.py and run the code. Your display should now look like this:
Text editor powered by tinymce.