adafruit / Adafruit_CircuitPython_DisplayIO_SSD1306

DisplayIO driver for SSD1306 monochrome OLED displays
MIT License
57 stars 24 forks source link

sleep() and wake() throw errors on Blinka #47

Open EAGrahamJr opened 1 month ago

EAGrahamJr commented 1 month ago

Duplicating #42 since it cannot be re-opened.

This is effectively the same as adafruit/Adafruit_CircuitPython_DisplayIO_SH1106#17, with the same repro code.

import board
import displayio
import i2cdisplaybus
import adafruit_displayio_ssd1306
from time import sleep
import traceback

displayio.release_displays()
i2cBus = board.I2C()
display_bus = i2cdisplaybus.I2CDisplayBus(i2cBus, device_address=0x3C)

WIDTH = 128
HEIGHT = 32

# create the display and put it to sleep
display = adafruit_displayio_ssd1306.SSD1306(display_bus, width=WIDTH, height=HEIGHT)

print(f"Wake> {display.is_awake}")
try:
    print("Sleep")
    display.sleep()
    print("No error")
except Exception:
    print(traceback.format_exc())

sleep(.5)
print(f"Wake> {display.is_awake}")
try:
    print("Wakey")
    display.wake()
    print("No error")
except Exception:
    print(traceback.format_exc())

Results:

WORKDIR ‹venv›
╰─$ py brokesleep.py
Wake> True
Sleep
Traceback (most recent call last):
  File "WORKDIR/brokesleep.py", line 21, in <module>
    display.sleep()
  File "WORKDIR/venv/lib/python3.9/site-packages/adafruit_displayio_ssd1306.py", line 130, in sleep
    self.bus.send(0xAE, b"")  # 0xAE = display off, sleep mode
  File "WORKDIR/venv/lib/python3.9/site-packages/i2cdisplaybus/__init__.py", line 90, in send
    self._send(DISPLAY_COMMAND, CHIP_SELECT_UNTOUCHED, bytes([command] + data))
TypeError: can only concatenate list (not "bytes") to list

Wake> True
Wakey
No error

A fix in the Blinka displayio adafruit/Adafruit_Blinka_Displayio#137