12.48inch e-Paper Module (B)

From Waveshare Wiki
Revision as of 10:09, 15 June 2022 by Eng52 (talk | contribs)
Jump to: navigation, search
12.48inch e-Paper (B)
12.48inch e-Paper Module (B)





  • Dimension: 12.48inch
  • Outline dimension (raw panel):261.5mm × 211mm × 0.3mm
  • Outline dimension (Acrylic case):280mm x 229.5mm
  • Display size:252.98mm × 190.90mm
  • Working voltage:3.3V/5V
  • Interface:SPI
  • Dot pitch:0.194mm × 0.194mm
  • Resolution:1304 x 984
  • Display color:Black, white, red
  • Grey level:2
  • Full refresh time :16s
  • Refresh power : 82.5mW(typ.)
  • Standby power :82.5mW(typ.)(almost none)

【Note】: Refresh time:The data provided is experimental data, the actual time may be a little different.It is normal that the e-Paper blink when full updating.
Power:The power data is experimental data.

SPI Communication Timing


Since the ink screen only needs to be displayed, the data cable (MISO) sent from the machine and received by the host is hidden here.

  • CS: Slave chip select, when CS is low, the chip is enabled
  • DC: data/command control pin, write command when DC=0; write data when DC=1
  • SCLK: SPI communication clock
  • SDIN: SPI communication master sends, slave receives
  • Timing: CPHL=0, CPOL=0 (SPI0)

[Remarks] For specific information about SPI, you can search for information online.

How do e-Paper display

As we know, this display uses the SPI interface, however, there are two FPC cables. In fact, the 12.48inch e-Paper is combined by four small e-Paper, therefore, to control the e-Paper, you should use four chip select pin.

  • Update essence

It works as below:
12.48inch e-paper-4part.png
We name the four areas as S2, M2, M1 and S1 respectively, in demo codes, we will send data to these four area in order.
The resolution of S2 and M1 are same 648*492, and the resolution of M2 and S1 are the same 656*492.
Combine the four display we get the resolution of 12.48inch e-Paper: 1304*984

  • Control principle

They are four display indeed, therefore, we need to control four SPI salves:
Generally, the control pins of e-Paper are MOSI, SCLK, CS and DC
And power and reset pins: VCC, GND, RST
Because e-Paper will flash when updating, there is a busy pin:BUSY
To reduce pins, four displays use the same VCC, GND, MOSI and SCK pins. Every two displays use the same DC and RST pins.
Therefore, there are total 16 pins for controlling the e-Paper:
12.48inch e-paper-4part2.png

  • Codes analysis

To control the e-Paper, you should first reset and initialize registers. And then transmit image data to e-Paper and update.
Here we show you how to transmit the image data:
We take Black-white or Red-white image as a monochrome bitmap. One byte stands for 8 pixels.

S2 and M1: There are 648 pixels per raw, It needs 648/8 = 81 bytes. One display has 492 column,totally have 81 * 492 = 39852 bytes. The same as the M2 and S1: They totally have 40344 per display。
Registers 0x13 and 0x10 are used to control Black-white image data and Red image data transmitting, here we take two-color display as example

Color 0x10 0x13
White 0xFF 0x00
Black 0x00 0x00
Red 0xFF/0x00 0xFF
void EPD_12in48_Display(const UBYTE *Image)
    int x,y;
    //S1 part 648*492
    for(y = 0; y < 492; y++)
        for(x = 0; x < 81; x++) {
            EPD_S2_SendData(*(Image + (y*163 + x)));

    //M2 part 656*492
    for(y = 0; y < 492; y++)
        for(x = 81; x < 163; x++) {
            EPD_M2_SendData(*(Image+ (y*163) +x));

    //S1 part 656*492
    for(y = 492; y < 984; y++)
        for(x = 81; x < 163; x++) {
            EPD_S1_SendData(*(Image+ (y*163) +x));

    //M1 part 648*492
    for(y = 492; y < 984; y++)
        for(x = 0; x < 81; x++) {
            EPD_M1_SendData(*(Image+ (y*163) +x));

We provide demo codes for four popular hardware platforms, Raspberry Pi, Arduino UNO, STM32 and the ESP32. The product you receive may be pre-assembled, you need to remove the back panel and connect your device like Raspberry Pi.


How to Install

Since it was assembled by us when you got the product, it has a bottom plate, you need to take the screwdriver delivered to unscrew the screws on the back and put it into the main control.

  • The Raspberry Pi, Arduino UNO, and ESP32 directly provide interface connections, and the specific control pins are introduced in the following sections.
  • For STM32, the demo is based on the STM32F103ZET6 chip, which was tested using our Open103Z, and connected using the pin headers of the board.

Software Description

Raspberry Pi Programs

We provide two program drivers, C and Python.
It takes about 8S to brush a frame of a picture in C language, and about 10S in Python. In addition to the basic brushing effect, python also adds the ability to crawl the weather:

Arduino UNO

We provide a C program, and the .c suffix is ​​changed to .cpp to be compatible with CPP.
Because the RAM of UNO is too small, 3 23LC1024 chips are used onboard to expand the memory of UNO. You need to build a picture of the whole picture and initialize it. For black and white pictures, you need 1304/8*984=160392 pieces Bytes, and a 23LC1024 can only have a maximum size of 128K. For black and white red, it needs 160392*2 = 320784 bytes, so 3 chips are needed, so the display speed of the whole frame picture is very slow and is about 1 minute. to display a black-and-white image.

  • The jumper cap needs to be connected to 5V.


We provide a C program.

  • Since STM32F103ZET6 has no interface for direct use, it needs to be connected with the delivered Dupont cable. For the specific connection method, please refer to the pin connection diagram below. There are only some examples here because the STM32F103ZET6 cannot establish a complete image cache, only part of the screen demos.


We provide a C program for the Arduino test program and an example that can be controlled using the web page.

  • Arduino: It can be used according to the corresponding ESP32 chapters. ESP32 cannot create a 1304/8*984 cache, so it is refreshed in a different way, 4304/8*492 data is transmitted at one time, and black and white needs to be transmitted twice. Black and white red transmission 4 times. The refresh speed of black and white is about 8S, and the refresh speed of black and white is about 16S.
  • Web page control: Due to my limited skills, I develop web pages while learning the front end. There may be some bugs in web page control, and you may not be able to complain, but the function can be completed in the end. The IP address will be displayed on the serial port. Under the same wifi, you can use the web page to open the IP address to control it, which will be described in detail in the subsequent chapters.

Raspberry Pi

Hardware Connection


The pins used can be found on schematic according to codes.


Enable SPI interface

PS: If you are using the system of the Bullseye branch, you need to change "apt-get" to "apt", the system of the Bullseye branch only supports Python3, and there is no wiringPi.
The communication interface of e-Paper is SPI, to use it, we should first enable the SPI interface.
Open terminal of Raspberry Pi, and open the configuration by the following command:
sudo raspi-config
Choose Interfacing Options -> SPI -> Yes.
Restart Raspberry Pi.
sudo reboot

RPI open spi.png
And then reboot the Raspberry Pi:

sudo reboot

You can check whether the SPI is occupied by other devices in /boot/config.txt.

  • Check /boot/config.txt, and you can see 'dtparam=spi=on' was written in.

Raspberry Pi Guides for 4.37 e-Paper.jpg
To make sure SPI is not occupied, it is recommended to close other drivers' coverage. You can use ls /dev/spi to check whether SPI is occupied. If the terminal outputs /dev/spidev0.1 and /dev/spidev0.1, SPI is not occupied.
Raspberry Pi Guides for 4.37 e-Paper02.jpg

Libraries installation

  • Install BCM2835:
wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.71.tar.gz
tar zxvf bcm2835-1.71.tar.gz 
cd bcm2835-1.71/
sudo ./configure && sudo make && sudo make check && sudo make install
  • Install wiringPi:
#Open the Raspberry Pi terminal and run the following command
sudo apt-get install wiringpi
#For Raspberry Pi systems after May 2019 (earlier than before, you may not need to execute), you may need to upgrade:
wget https://project-downloads.drogon.net/wiringpi-latest.deb
sudo dpkg -i wiringpi-latest.deb
gpio -v
# Run gpio -v and version 2.52 will appear. If it does not appear, the installation is wrong

#Bullseye branch system use the following command:
git clone https://github.com/WiringPi/WiringPi
cd WiringPi
gpio -v
# Run gpio -v and version 2.60 will appear. If it does not appear, it means that there is an installation error
  • Install python3:
sudo apt-get update
sudo apt-get install python3-pip
sudo apt-get install python3-pil
sudo pip3 install RPi.GPIO
sudo pip3 install spidev


Open the terminal and run commands to download codes.

git clone https://github.com/waveshare/12.48inch-e-paper.git
cd 12.48inch-e-paper/RaspberryPi

Run codes

Black White
  • C codes:
cd c
sudo nano examples/main.c
Confirm which kind of 12.48-inch e-Paper you use. If you use the two-color display, modify the file as below.
If you use the tree-color display, modify the file as below.
Black White Red
Save then compile and run the code.
sudo make clean
sudo make
sudo ./epd
  • Python codes:
Open a terminal and run the demo codes by commands:
cd python/examples
For the two-color version:
sudo python3 epd_12in48_test.py
For the three-color version
sudo python3 epd_12in48B_test.py
  • Python codes-Weather
cd python/examples
For a two-color display
sudo python3 Show_EN_Weather.py
For a three-color display
sudo python3 Show_EN_Weather.py B
For help information:
sudo python Show_EN_Weather.py help


Hardware connection

You can directly insert the Arduino UNO to PCB.


About the pins used:


Run codes

Download demo codes from the wiki and unzip them.
Copy the 12in48 folder to the libraries directory which is under the installation directory of Arduino IDE. (The installation directory generally is C:\Program Files (x86)\Arduino\libraries)
Open Arduino IDE software, choose Tool -> Board -> Arduino UNO:
Click File -> Examples -> EPD12in48 to open demo code.
If your e-Paper is a two-color version, use the epd12in48-demo, otherwise, use the epd12in48b-demo.
Compile and download the codes to the board.

If you are using a black and white screen, select epd12in48-demo on the right.
If you are using a black and white red screen, select epd12in48b-demo on the right.
Finally, select the corresponding COM port, and then click Compile and Download.

  • Note that the refresh process may take a long time. You can open the serial monitor to check the progress. Generally, it takes 1 minute for black and white, and 2 minutes for black and white.


The development board we use is Waveshare Open103Z. The project is developed based on STM32 HAL libraries.

Hardware connection

To assemble the Open32, you should connect it to the wires provided.


About the pins used, you can refer to e-paper.ioc file.


Run codes

Open the project (~\STM32\NUCLEO-F103RB\MDK-ARM\e-paper.uvprojx), compile and download to developmen board. It requires about 10s for the two-color version and 20s for three-color display.


The demo codes for ESP32 are developed with Arduino IDE as well.

Software setup

To develop ESP32, you should first set up the environment.

  • Enter the tools folder, and run the get.exe file as administrator. After installing, Copy the esp32-epd-12in48 folder of ESP32 demo codes to [Arduino IDE installation directory]/Hardware/espressif/esp32/libraries

Hardware connection

Here we use Waveshare e-Paper ESP32 Driver Board as an example. Attach it on PCB.


About the pins used, you can refer to schematic and codes


Arduino Example

Open Arduino IDE software, and find the examples on File->Examples.


If you use two-color e-Paper, choose the epd12in48-demo, otherwise, please use the epd12in48B-demo.

WiFi Example

As we know, ESP32 features WIFI, you can set it as master or slave. Here we provide demo codes that control the e-Paper on the web by WIFI.

  • You need to first modify the wifi connection information. Open the Web_App.cpp file and modify line 50 and line 51:


  • Open wifi.ino file, compile and download it to your ESP32 board. Open the Serial monitor to query the IP address.
  • Open the Chrome browser, and enter the web with the IP address.
  • Select the display type, here we take 12.48inch e-Paper (two-color version) as an example:
Click 12.48 e-Paper, and there are six functions provided. You can use them to draw points, lines and so on. On the top of the webpage, the type of e-Paper and display color are shown.
  • The corresponding coordination of display is as below:
  1. Draw points
    Click Draw point then you will get the window as below:
  2. Draw lines
    Click Draw Line, you will get the window below:
  3. Draw Rectangle
    Click Draw Rectangle, you will get the window below:
  4. Draw circle
    Click Draw Circle, and you will get the window below:
  5. Draw String
    Click Draw String, and you will get the windows below:
  6. Display picture
    Click Show picture, you will get the window like below. Click upload image to choose a picture.
    Draw the page to the bottom to check the original picture.
    Select a process algorithm, for a two-color display, only the mono methods work.
  7. Finally, click the upload image button on left to upload the image to the e-Paper for displaying.
You can open the Serial monitor of IDE to check the debug information.
You can also press the F12 button to open the debug console of the browser.



Demo codes


Third-Party examples

It is a "ESP-IDF component", you can drive the e-Paper with GFX and Fonts.


  • Two-color B/W e-paper
    • 【Working】Temperature: 0~50°C; Humidity: 35%~65%RH
    • 【Storage】Temperature: ≤30°C; Humidity: ≤55%RH; Max storage time: 6 months
    • 【Transport】Temperature: -25~70°C; Max transport time: 10 days
    • 【Unpack】Temperature: 20°C±5°C; Humidity: 50%RH±5%RH; Max storage time: Should be assembled in 72h
  • Three-Color e-Paper
    • 【Working】Temperature: 0~40°C; Humidity: 35%~65%RH
    • 【Storage】Temperature: ≤30°C; Humidity: ≤55%RH; Max storage time: 3 months
    • 【Transport】Temperature: -25~60°C; Max transport time: 10 days
    • 【Unpack】Temperature: 20°C±5°C; Humidity: 50%RH±5%RH; Max storage time: Should be assembled in 72h

When store three-color e-Paper, please refresh it to white, and keep the screen upward. Note that you need to update it at least every three months.


If you require technical support, please go to the Support page and open a ticket.