Description
According to the Revision History section on the Adafruit 2.13" Monochrome E-Ink Bonnet for Raspberry Pi - SSD1680 (Product ID 4687) product page, the most recent devices are shipping (or at least have shipped) with a new display model (GDEY0213B74
):
- As of August 21, 2024 - The old 2.13" display has been discontinued, we're now shipping with the GDEY0213B74 which is still an SSD1680 but has 16-pixel offset when configuring the memory layout.
The product page references two Adafruit learning guides (RPi Weather Station and RPi Event Calendar) which use different driver classes, neither of which work with the latest hardware revision (circa August 2024 until at least now).
- Weather Station uses a new Adafruit_SSD1680Z driver, which is supposed to work with the new
GDEY0213B74
devices, but doesn't (see bug examples below) - Event Calendar uses the original Adafruit_SSD1680 driver, which isn't compatible with the new
GDEY0213B74
devices.
I'm aware of a few forum posts and GitHub PRs (linked below) that all relate to this issue. I'm mainly opening this GitHub issue to track the problem (provides clarity, PRs can reference it, etc). Hopefully this ticket remains open until the driver is fixed a bit more robustly and existing docs/examples are updated accordingly. I do plan on contributing some PRs towards the effort.
Examples
Note: the following examples/results were performed/produced using a Raspberry Pi 2 Model B Rev 1.1 with an Adafruit E-Ink Bonnet purchased (shipped and delivered) in September, 2024.
Edit: examples performed with release 2.13.0 of this library, specifically adafruit-circuitpython-epd==2.13.0
from PyPi
Using the following code to setup a display instance for each of the SSD1680
drivers:
import board
import busio
import digitalio
from PIL import Image
from adafruit_epd.ssd1680 import (
Adafruit_SSD1680,
Adafruit_SSD1680Z,
)
def init_display(driver_class):
disp = driver_class(
width=122,
height=250,
spi=busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO),
cs_pin=digitalio.DigitalInOut(board.CE0),
dc_pin=digitalio.DigitalInOut(board.D22),
sramcs_pin=None,
rst_pin=digitalio.DigitalInOut(board.D27),
busy_pin=digitalio.DigitalInOut(board.D17),
)
disp.rotation = 1
return disp
legacy = init_display(Adafruit_SSD1680)
driver_zed = init_display(Adafruit_SSD1680Z)
Note: the blinka.png
file referenced in the examples below was sourced here.
-
Using the
legacy
driver instance: -
Performing the same operations with
driver_zed
driver instance:
Links
Related forum posts, PRs
- Adafruit forum 2.1" GDEY0213B74 eInk
- Relates to: added ssd1680z 2.13 eink bonnet #83
- Relates to: off by one adjustments #84
Known affected examples / tutorials
- Adafruit_Learning_System_Guides/EInk_Bonnet_Weather_Station/code.py
- Adafruit_Learning_System_Guides/EInk_Bonnet_Event_Calendar/code.py
- Adafruit_CircuitPython_EPD/examples/epd_pillow_demo.py
- Adafruit_CircuitPython_EPD/examples/epd_pillow_image.py
- possibly Adafruit_CircuitPython_EPD/examples/epd_bonnet.py -- uses RPi pins, so could be updated to use same variety of drivers as the two Pillow examples above.
- possibly others (not sure which are supposed to work on this device)