luma.oled
luma.oled copied to clipboard
Incremental screen updates with Luma and SH1106?
Expected behaviour
If only a small area of the screen got changed, write only that area rather than the entire screen. E.g. find a writeable bounding box of the modified pixels and update just that portion onthe screen.
Actual behaviour
I wrote a small program that updates a numeric field on a SH1106 OLED and it works well (thanks). I did observed though that even ifI change only a small area of the screen, the entire screen is written on each update.
My question is, does Luma support incremental updates? And if not, please add it to your feature request list.
My drawing code:
i = 0
while True:
with canvas(oled) as draw:
print(f"Drawing {i}", flush=True)
# draw.rectangle(oled.bounding_box, outline="white", fill="black")
# draw.text((19, 15), f"Hello I2C Adapter", fill="white")
draw.text((47, 42), f"{i:05d}", fill="white")
i += 1
time.sleep(1.0)
Full program at https://github.com/zapta/i2c_adapter/blob/main/examples/oled_demo.py
... I found the discussion below but it deals with the rendering side rather than the screen update (i2c in that case). From my experience, the I2C communication is the bottleneck of the screen refresh process with SH1106 in I2C mode.
https://stackoverflow.com/questions/64189757/add-element-to-oled-display-via-pil-python-without-erasing-rest