Newly ordered "V2" 1.54in B/W e-ink display not working

Hi all,

I use this 1.54in B/W e-ink display module from Heltec in one of my projects. I have been using the board with “V2” printed on the back for a couple of months now, specifically with the GXEPD2 library.
Recently, I ordered 20pcs of the same display from Aliexpress, making sure that I was buying the board with “V2”. I expected everything to work smoothly, because the HW is supposed to be the same. However, when I tried using the newly ordered displays with the same board and FW that the old displays work with, I discovered a bizarre issue. The display is turning on and refreshing according to the code, but the output on the screen is just a couple of scattered lines:

The attached photo shows the output from a standard piece of example code from the GXEPD2 library which is just supposed to print “Hello world” on the screen. The exact same code works with the displays I ordered a couple of months ago.

Has anyone else encountered this issue? Visually, the old and new displays look exactly the same. They have the same components in the same places and they both say “V2” on the back. I have tried using the original Heltec library and other pieces of example code, but I keep running into the same issue. I have also switched the driver board to a completely new one, but it didn’t help. The issue seems to be the same on all the displays from the 20pcs batch I ordered, so it’s not an isolated problem. Maybe some sort of production error?

Thanks in advance for any answers.

Has anyone else encountered this issue? Visually, the old and new displays look exactly the same. They have the same components in the same places and they both say “V2” on the back.

Unfortunately, yes. There have been multiple different (non-interchangable) displays released, all using the same PCB, all sold under the same name.

One way to tell them apart is by the label printed on the orange flex connector.
I cannot see the label in your photo, but judging by the pattern of the vias, I am guessing that the label is “FPC-7525”.

I believe that this makes the true model of your display to be “DEPG0154BN”. Unfortunately, GxEPD2 doesn’t seem to support this panel.

I would guess that your old panels were probably labeled “FPC-8101”, which would make them “DEPG0150BN”.

Your old panels had a resolution of 200x200; the new ones have a resolution of 152x152. I believe that this is the only thing causing the garbled image.

If you’re up to it, a few small modifications to the GxEPD2_150_BN class should get everything “more or less” working again.

In GxEPD2_150_BN.h:
(Change resolution)

// Change these to 152
static const uint16_t WIDTH = 200;
static const uint16_t HEIGHT = 200;

In GxEPD_150_BN.cpp:
(Shunt image over by 8 pixels)

void GxEPD2_150_BN::_setPartialRamArea(uint16_t x, uint16_t y, uint16_t w, uint16_t h)
{
  _writeCommand(0x11); 
  _writeData(0x03);    
  _writeCommand(0x44);          // (Sets mem. X start / end pos.)
  _writeData(x / 8);            // Should be: (x/8) + 1
  _writeData((x + w - 1) / 8);  // Should be: (x + w) / 8
  _writeCommand(0x45);
  _writeData(y % 256);
  _writeData(y / 256);
  _writeData((y + h - 1) % 256);
  _writeData((y + h - 1) / 256);
  _writeCommand(0x4e);          // (Sets mem. X counter)
  _writeData(x / 8);            // Should be: (x/8) + 1
  _writeCommand(0x4f);
  _writeData(y % 256);
  _writeData(y / 256);
}

This seems to get Hello World back running, but I haven’t tested it any further.

If you’re after more specific information, ZinggJM, the author of GxEPD2, monitors the displays section of the Arduino forums, although he’s pretty busy.