Skip to content

Neither SSD1680 drivers (Adafruit_SSD1680/Adafruit_SSD1680Z) work for the latest GDEY0213B74 E-Ink Bonnets #85

Open
@joxl

Description

@joxl

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.

  1. Using the legacy driver instance:

    • WHITE fill:
      legacy.fill(legacy.WHITE)
      legacy.display()
      image
    • BLACK fill:
      legacy.fill(legacy.BLACK)
      legacy.display()
      image
    • Image:
      legacy.image(Image.open("blinka.png"))
      legacy.display()
      image
  2. Performing the same operations with driver_zed driver instance:

    • WHITE fill:
      driver_zed.fill(driver_zed.WHITE)
      driver_zed.display()
      image
    • BLACK fill:
      driver_zed.fill(driver_zed.BLACK)
      driver_zed.display()
      image
    • Image:
      driver_zed.image(Image.open("blinka.png"))
      driver_zed.display()
      image

Links

Related forum posts, PRs

Known affected examples / tutorials

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions