color wave5i7color 600x448 B%7CR%7CY%7CBlue%7CG%7CO - martinberlin/cale-idf GitHub Wiki

  • Size: 600 * 448 5.6" Black/Red/Yellow/Blue/Green/Orange (7 colors considering white)
  • Controller: SPD1656
  • Status: Implemented and merged in master (Tested and working)
  • Product page
  • Important before buying: This epaper colors are very washed out if it's used in a low temperature environment. It should be only used in places that have warm temperatures (18°C and above)
  • Refresh time: 14 seconds
  • Partial update: Not supported as in most of the color epapers.
  • Development status: Merged in master & refactor/oop / Issue: 29

5.65 inches 7 Color epaper from Waveshare wave5i7color

NEWS: Class for the 4.01 inches 7 color epaper with the same SPD1656 controller is also completed and merged in latest release.

Test code:

#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "color/wave5i7Color.h"

// Single SPI EPD
EpdSpi io;
Wave5i7Color display(io);

extern "C" { void app_main(); }

void app_main(void)
{
   printf("CalEPD version: %s\n", CALEPD_VERSION);
   // Initialize class
   display.spi_optimized = true;
   display.init(false);
   // Fill pixel buffer
   display.fillScreen(EPD_YELLOW);
   // Refresh epaper
   display.update(); 
}

Rendering a 4 bit per pixel Bitmap

Uncomment the right SRC file in CMakeLists.txt

idf_component_register(
    # CALE official ESP-IDF Firmware 
    #SRCS "cale.cpp"
    SRCS "cale-7-color.cpp"
)

In the cale-7-color.cpp make sure to use the right Wave5i7Color class for this epaper. Run:

idf.py menuconfig

First of all check in Display configuration to enter your SPI pin configuration with the GPIOs you use to communicate with the eink. In CALE configuration make sure to add your WIFI name and password so the ESP32 can connect to your network and the URL of a valid BMP file of 4 bits depth. If you create an account in Cale.es you can simply use a Content->Image gallery element and add it as a content partial to your screen. After uploading the Firmware with:

idf.py flash monitor

If everything is rightly configured your ESP32 controller will connect and download an image to render it in your eink display:

CALE image

Note that 4 bits per pixel can have up to 16 colors and the epaper only has 8. So of course is not photo quality and the best settings we found to simulate more colors is to use as Screen render options:

Dithering active: 2x2 or 3x3 ordered dither Bitsdepth: 24

Image is rendered first in 24 bpp but the dithering filter is converting it to 4 bitsdepth giving 16 colors output as you can see in the example image above.

Colors definition

#define EPD_BLACK     0x0000 // RED,   G, BLUE
#define EPD_RED       0xF800 // 255,   0,   0
#define EPD_YELLOW    0xFFE0 // 255, 255,   0
#define EPD_BLUE      0x001F //   0,   0, 255
#define EPD_GREEN     0x07E0 //   0, 255,   0
#define EPD_ORANGE    0xFD20 // 255, 165,   0

// Non-official extra color (Light purple)
#define EPD_PURPLE    0x41E8 //  67,  61,  68

Is important to understand that Adafruit GFX uses 16 bit colors: 16 bit GFX colorpack

For color-capable displays, colors are represented as unsigned 16-bit values. Some displays may physically be capable of more or fewer bits than this, but the library operates with 16-bit values. The primary color components — red, green and blue — are all “packed” into a single 16-bit variable, with the most significant 5 bits conveying red, middle 6 bits conveying green, and least significant 5 bits conveying blue. That extra bit is assigned to green because our eyes are most sensitive to green light.

This conversion from the GFX buffer to the epaper 7 colors (0x00 to 0x06) happens in the baseclass method epd7color::_color7 that will be inherited from every other 7 color epaper. All credits for this conversion go to Jean Marc from GxEPD2 library.

Statistics

Timing before SPI optimization

STATS (ms)
2287 _wakeUp settings+send Buffer
2002 _powerOn
4289 total time in millis

// SPI optimization: Sending full X lines without toggling CS high / low per byte
410 _wakeUp settings+send Buffer
2001 _powerOn
2412 total time in millis (1.8 seconds gained)

This 4.2 seconds total are measured with ESP32 running at max speed. The SPI optimization is by default on and makes it much faster. It's a public property of the Wave5i7Color class and we recommend to leave it on to reduce power and have a faster communication.

Known issues

This epaper is leaving always a ghost of last refresh. I tried different initialization commands, like the ones proposed from GxEPD2 against the original Waveshare example, it does not make any difference. Unless the screen is cleaned out at the beginning to full white, it leaves the last ghost, that affects the new printed image. This happens mostly when the last image is left for some minutes on the screen. All epapers can have a bit of ghosting but in this one it pretty intense and it's not cool to see last image blended with the new one. As a second pitfall also perform not so good in low temperatures, leaving a color of low intensity and washed out, so it's not appropriate for winter ambients with temperatures lower than 18 C.

Initialization commands from the manufacturer (Extracted from File: epd5in65f.cpp printed in our style)

 // Comments according to what is read in GxEPD2 since there is no controller PDF
    IO.cmd(0x00); //PANNEL SETTING
    IO.data(0xEF);
    IO.data(0x08);

    IO.cmd(0x01); //POWER SETTING
    IO.data(0x37);
    IO.data(0x00);
    IO.data(0x23);
    IO.data(0x23);

    IO.cmd(0x03); // PFS
    IO.data(0x00);
    
    IO.cmd(0x06); // Boost
    IO.data(0xC7);
    IO.data(0xC7);
    IO.data(0x1D);

    IO.cmd(0x30); //PLL:   0-15:0x3C, 15+:0x3A
    IO.data(0x3C);

    IO.cmd(0x40); // Temperature Sensor Command
    IO.data(0x00);

    IO.cmd(0x50); //VCOM AND DATA INTERVAL SETTING
    IO.data(0x37);

    IO.cmd(0x60); //TCON SETTING
    IO.data(0x22);

    IO.cmd(0x61); // Resolution setting 600*448
    IO.data(0x02);//source 600
    IO.data(0x58);
    IO.data(0x01);//gate 448
    IO.data(0xC0);

    IO.cmd(0xE3); //PWS
    IO.data(0xAA);
	
    vTaskDelay(100 / portTICK_PERIOD_MS);
    IO.cmd(0x50);  // VCOM Again. Why?
    IO.data(0x37); // When I disable this and restart epaper does strange noise colors, so leaving it on

Video demo showing the issue

The known workaround, but away from ideal solution, just print a full white screen and refresh before printing your own image. It will make everything 12 seconds slower, but is the only way I found so far, to avoid seeing the last image ghost on a newly printed image.

Updates

After some tests it was pretty clear that the intensity color problem is because of the ambient temperature. If you want to reproduce this, you just need to leave your epaper in the fridge for 20 minutes, and then you will experience the same. So it needs to be placed in a warm ambient to work properly. If you want to get more intense colors, try placing the epaper close to a warm surface, like in place that has good heating. Just raising the temperature 8 to 10 °C is enough to make a difference. I wanted to thank Waveshare for giving me the opportunity to test the 4.01 inches version of the 7 color epaper. The 4.01 inches it's a compact eink with a similar resolution and in my experience the colors looked a bit more intense. Overall it's a nice product if it can be located in an ambient where it performs well. I just hope in a near future we can have at least double colors and more resolution so it's possible to print a sharper image.

⚠️ **GitHub.com Fallback** ⚠️