adafruit / Adafruit_CircuitPython_DisplayIO_SSD1306

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

sleep() (and probably wake()) throws error #42

Closed EAGrahamJr closed 3 months ago

EAGrahamJr commented 3 months ago

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

Surefire bet that the same "fix" will work, so PR will be incoming.

EAGrahamJr commented 1 month ago

Re-opening due to reverting #43 (per #44).

This would more likely be fixed with https://github.com/adafruit/Adafruit_Blinka_Displayio/issues/137