You are reading a single comment by @Zak and its replies. Click here to read the full conversation.
  • For those people who might be struggling connecting an MH-ET LIVE 1.54" e-paper display (aka GDEP015OC1) i'd like to share some information on how to use it with ESP32 Dev Kit board. Hope it will help someone and save them time that i lost)

    I started out with an lifesaving library for e-paper by @MichaelPralow, thank you very much for your work. Module usage described here.
    It was rather easy to figure out the right way to connect the module to the board:

    DISPLAY    |    ESP32
    —————————————————————
    VCC        |    3.3V
    GND        |    GND
    SDI        |    D23
    SCLK       |    D18
    CS         |    D5
    D/C        |    D22
    Reset      |    D21
    Busy       |    D15
    

    Make sure the Interface switch on the back side of the module is set to «L».

    After that i started digging info about LUT data, Addresses of X and Y start and end, and that was a pain. Maybe i missed something, but i spent hours trying to implement data i found in a specification doc for GDEP015OC1.

    To cut the story short finally i stumbled upon a Cpp library (link), and here are the magicalal numbers:

    var spi = new SPI();
    spi.setup({ sck:D18, mosi:D23 });
    display = require('SSD1606.min').connect({
          display: {
            bpp : 1,
            displaySizeX      : 200,
            displaySizeY      : 200,
            lutRegisterData   : new Uint8Array([0x10, 0x18, 0x18, 0x08, 0x18, 0x18, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x14, 0x44, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]), // PARTIAL update lutRegisterData, covered further
            maxScreenBytes    : 5000, // this
            ramXStartAddress  : 0x00, // this
            ramXEndAddress    : 0x18, // this
            ramYStartAddress  : 0xC7, // this
            ramYEndAddress    : 0x00 // and this
          },
          spi        : spi,
          cs1Pin     : D5,
          dcPin      : D22,
          resetPin   : D21,
          busyPin    : D15,
          powerPin   : D4 
    });
    

    That is. This code worked for me after 5 long evenings i spent switching tens of browser tabs gathering the info instead of working on my project)
    Here's what i've got now:

    Now a few words about partial update: the GDEP015OC1 is able to partially update data on the screen. The above value of lutRegisterData property enables this ability. There's also another array of values that makes it reload the whole screen, here it is:

    0x50, 0xAA, 0x55, 0xAA, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
    

    lutRegisterData is used once in an init method of the module and also i don't need to update screen fully, so i'll just leave it here in case someone needs it.

    And one more: i saw definition of a preset for GDE021A1 model in module's code and wanted to ask if it is possible to update the SSD1606 module's code with the preset for GDEP015OC1 to make it more flexible? If so, what am i required to do for that? Thank you.

About

Avatar for Zak @Zak started