diff --git a/adafruit_displayio_ssd1306.py b/adafruit_displayio_ssd1306.py index 34220d4..8aa98b4 100644 --- a/adafruit_displayio_ssd1306.py +++ b/adafruit_displayio_ssd1306.py @@ -21,6 +21,8 @@ * `Monochrome 0.96" 128x64 OLED graphic display `_ * `Monochrome 128x32 SPI OLED graphic display `_ * `Adafruit FeatherWing OLED - 128x32 OLED `_ +* Monochrome 0.49" 64x32 I2C OLED graphic display +* Might work on other sub-128 width display: Dots 72x40, 64x48, 96x16 **Software and Dependencies:** @@ -73,15 +75,24 @@ def __init__( # Patch the init sequence for 32 pixel high displays. init_sequence = bytearray(_INIT_SEQUENCE) height = kwargs["height"] + width = kwargs["width"] if "rotation" in kwargs and kwargs["rotation"] % 180 != 0: height = kwargs["width"] + width = kwargs["height"] init_sequence[16] = height - 1 # patch mux ratio - if kwargs["height"] == 32: + if height == 32 and width == 64: # Make sure this only apply to that resolution + init_sequence[16] = 64 - 1 # FORCED for 64x32 because it fail with formula + if height in (32, 16) and width != 64: init_sequence[25] = 0x02 # patch com configuration + col_offset = ( + 0 if width == 128 else (128 - width) // 2 + ) # https://github.com/micropython/micropython/pull/7411 super().__init__( bus, init_sequence, **kwargs, + colstart=col_offset, + rowstart=col_offset, color_depth=1, grayscale=True, pixels_in_byte_share_row=False, diff --git a/examples/displayio_ssd1306_64x32_simpletest.py b/examples/displayio_ssd1306_64x32_simpletest.py new file mode 100644 index 0000000..a8ee7cc --- /dev/null +++ b/examples/displayio_ssd1306_64x32_simpletest.py @@ -0,0 +1,56 @@ +# SPDX-FileCopyrightText: 2022 David Glaude (based on 2021 ladyada for Adafruit Industries) +# SPDX-License-Identifier: MIT + +""" +This test will initialize the display using displayio and draw a solid white +background, a smaller black rectangle, and some white text. +Customized version of displayio_ssd1306_simpletest.py for 64x32 +""" + +import board +import displayio +import terminalio +from adafruit_display_text import label +import adafruit_displayio_ssd1306 + +displayio.release_displays() + +i2c = board.I2C() # uses board.SCL and board.SDA +# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller + +display_bus = displayio.I2CDisplay(i2c, device_address=0x3C) +display = adafruit_displayio_ssd1306.SSD1306(display_bus, width=64, height=32) + +# Make the display context +splash = displayio.Group() +display.show(splash) + +color_bitmap = displayio.Bitmap(64, 32, 1) +color_palette = displayio.Palette(1) +color_palette[0] = 0xFFFFFF # White + +bg_sprite = displayio.TileGrid(color_bitmap, pixel_shader=color_palette, x=0, y=0) +splash.append(bg_sprite) + +## Draw a smaller inner rectangle +inner_bitmap = displayio.Bitmap(62, 30, 1) +inner_palette = displayio.Palette(1) +inner_palette[0] = 0x000000 # Black + +inner_sprite = displayio.TileGrid(inner_bitmap, pixel_shader=inner_palette, x=1, y=1) +splash.append(inner_sprite) + +TEXT1 = "Hello" +text_area = label.Label(terminalio.FONT, text=TEXT1, color=0xFFFFFF, x=2, y=6) +splash.append(text_area) + +TEXT2 = "World" +text_area = label.Label(terminalio.FONT, text=TEXT2, color=0xFFFFFF, x=32, y=15) +splash.append(text_area) + +TEXT3 = "9876543210" +text_area = label.Label(terminalio.FONT, text=TEXT3, color=0xFFFFFF, x=2, y=24) +splash.append(text_area) + +while True: + pass