wave12i48 1304x984 EOL - martinberlin/cale-idf GitHub Wiki

  • Size: 1304 * 984, 12.48 inches Colors: B/W for 3 color version check wave12i48BR.h
  • Manufacturer: Waveshare (Added electronics/ESP32 support) / Good Display (GDEW1248T3 epaper)
  • Controller: IL0326 (_Note below)
  • Status: Implemented. Works stable, tests passed, merged in CalEPD in version>=0.9.2
  • Partial update: Not sure if it can be done, and even if it could, it will be a hard mission considering that the areas need to be calculated in the 4 areas of the display.
  • Requires: An ESP32 board with PSRAM like ESP-WROVER B: Check details
  • Out of stock: Please be aware that currently Waveshare has this epaper model marked as not available due materials shortage.

UPDATE: The 3 colors Black/Red model wave12i48BR.h is currently implemented in Issue 22 and merged in master.

12.38 inches epaper display

This is an 12.48 inch 4 Grayscale E ink E paper display panel with two FPC interfaces, 1304*984 resolution. An integrated circuit contains gate buffer, source buffer, interface, timing control logic, oscillator, DC-DC, SRAM, LUT, VCOM, and border are supplied with each panel.

_Note: Discovered in Good Display product page since Waveshare won't provide it. I guess has more than one IL0326 internally but check on Good Display PDF since they document things and attach all the PDF tech specs.

Important: This big display uses a buffer of 160 Kb of DRAM. Dynamic Random Access Memory. So if you will add more things that use DRAM then you will be out very shortly. Hint: Use external PSRAM to do something with this display or a very short and simple program. If you want to add an ESP32 WROVER with SPI Ram, check my hack at the end of this page.

Stats

v1 before SPI optimization (Toggling CS line on every byte)

3098 _wakeUp settings+send Buffer
4710 _powerOn
7809 total time in millis

Note On the manual, it says send byte per byte, but it seems it's possible to toggle Chip Select and send more than 1 byte optimizing communication speed.

v2 after sending complete lines to each Epd slave. Check the SPI optimization page

794 _wakeUp settings+send Buffer (NOTE: 2.3 seconds saved)
4715 _powerOn
5509 total time in millis

Please be aware that this display has 4 epapers combined that use a different Chip Select plus Busy pin each. DC pin and Reset are shared 2 on the top and 2 on the bottom like in the schema below. So it needs to be instantiated with a different IO class than the other displays. We left an sdkconfig example with the default GPIOs for ESP32devkitC that are already set to be compatible with the manufacturer's own. Just copy it from the config-examples:

cp config-examples/sdkconfig_Wave12I48 sdkconfig

This is the default Waveshare config. To use our PSRAM hack please check the information below and use the following config:

cp config-examples/sdkconfig_Wave12I48_PSRAM_active sdkconfig

To include it in your C++ program:

#include "wave12i48.h"
Epd4Spi io;
Wave12I48 display(io);

Remarks

This display it's a quite complex construct and it holds also an impressive pixel buffer of 160392 bytes. Hats off to Waveshare to make this PCB to support ESP32! Please be aware that this big _buffer[160392] is allocated in DRAM so if you really want to make something with this, that connects to WiFi to read sensors, and prints custom text and graphics. Well then you will be out of DRAM! So use a WROVER board or an external PSRAM. That is already out of my domains, since it depends on what kind of Firmware you are doing as a developer.

This class simply abstracts all this complexity so it can be used just like the other models. Just treat it like a single epaper display.

Test video after getting GFX working

Waveshare drawing with composite epaper display and SPI reference 12.48" Epaper SPI reference

Carlos Fasani, my partner guess on how this Epaper display is internally wired Waveshare 12.48" Epaper display wiring

Good display sample code for GDEW1248T3

ESP32 WROVER hack for this epaper

As our dear friends of Waveshare used an ESP32-DevKit-C that does not have PSRAM, making this ESP32 implementation quite useless, since you cannot really do an interesting program in C++ due to lack of memory we decided to take action. The reason is that a 160 Kb pixel buffer leaves virtually not enough memory for anything so even adding WiFi it just won't compile, you can try Waveshare demo and it will work since it streams the image without storing the whole pixel buffer in RAM, but any other complex Firmware will fail to compile since it has not enough memory. We found a hack that is not the cleanest thing to do and it's just a suggestion that works without rewiring all 16 cables. And it's to remap the pins 16 & 17 to other pins (Dear manufacturers can you please think that these PINs are reserved for internal use of the PSRAM?)

esp32 Wrover specifications mention this clearly:

External connections can be made to any GPIO except for GPIOs in the range 6-11, 16, or 17. GPIOs 6-11 are connected to the module’s integrated SPI flash and PSRAM. GPIOs 16 and 17 are connected to the module’s integrated PSRAM.

To summarize:

  1. Recommended board is an ESP32 Wrover B This board is one pin row too big, so you need to comb with care, the legs about 10 degrees inside (See picture 1) Picture 1 - Comb the Wrover B pins inside against a flat surface

Remove or comb pins 16 & 17 from ESP32 board since they should not connect to Waveshare's PCB. Comb pins 21 and 27 inside, so you can soldier in a nice way the wires 16 -> 21 and 17 -> 27 down the board nicely.

  1. Make an adapter like you see in Picture 2 to rewire Waveshare pins 16 & 17 to pins 21 & 27 in the ESP32 board: Picture 2 - Route Waveshare pins 16->21 and 17->27

  2. Update this pins in your menuconfig - Display configuration. Sample provided in config-examples

Basically it's updating this GPIOs:

Original WaveI48 Board   | Updated Firmware Pins in ESP32
CONFIG_EINK_SPI_M2_CS=16    21    
CONFIG_EINK_M2S2_DC  =17    27

To clarify, from ESP32 Firmware, this are the new pins 21 and 27, but as their signals will be now going from 21 (ESP32) -> 16 in Epaper PCB and from 27 (ESP32) -> 17 in Epaper PCB. It's not the most beautiful hack. But it works fine and provided you do it with care, you are not modifying Waveshare's PCB in any way, just minimally combing the connector 10° in order to connect the upgraded board.

1 minute video demo after the upgrade