Template:Arduino Guides for SPI e-Paper

From Waveshare Wiki
Jump to: navigation, search

Hardware connection

The demo code provide are based on Arduino UNO. If you want to use another Arduino board, you may need to change the connection even porting the codes yourself.
The RAM of Arduino UNO is too small to realize drawing function of e-Paper. In this case, for most of the e-Paper, we only make the image display function and save the image to flash.
We recommend you to use E-Paper Shield if you use Arduino UNO. The seven-color e-Paper is not compatible with the e-Paper shield, please note it.

Connect to Arduino UNO
e-Paper Arduino
Vcc 5V
GND GND
DIN D11
CLK D13
CS D10
DC D9
RST D8
BUSY D7
E-paper driver hat to arduino connet.png

Install Arduino IDE

  • Go to Arduino IDE, and download the IDE
  • Install it according to the guide of Arduino website.
  • Open the IDE software after installing.

Run examples

  • Download the deme codes and unzip it. Open the Arduino examples (~/Arduino/…)
  • Open a project, for example, open the opd1in54.ino project
  • Open the project and set the board to Arduino UNO
  • Select the correct COM port
  • Build and upload the codes to board

【Note】Because the flash of Arduino UNO is small, we recommend you use MEGA2560 if you use the big size e-Paper

Supports type

1.02inch(128×80):

epd1in02d:Example for 1.02inch e-Paper/1.02inch e-Paper Module

1.54inch(1.54inch e-paper c:152×152,others:200×200):

epd_1in54: Example for 1.54inch e-paper V1(Balck/White): This version is stopped production which can be bought before 2019-11-22;
epd_1in54_V2:Example for 1.54inch e-paper V2(Balck/White): This is the current version which can buy now (2020-07-29). The e-Paper has a V2 sticker on the backside.
epd_1in54b: Example for 1.54inch e-paper B(Black/White/Red);
epd_1in54c: Example for 1.54inch e-paper C(Black/White/Red);

2.7inch(264×176):

epd_2in7: Example for 2.7inch e-paper(Black/White);
epd_2in7b: Example for 2.7inch e-paper B(Black.White/Red);<be />

2.9inch(296×128):

epd_2in9: Example for 2.9inch e-paper(Black/White);
epd_2in9: Example for 2.9inch e-paper B(Balck/White/Red) and 2.9inch e-paper C(Black/White/Yellow);
epd_2in9: Example for 2.9inch e-paper D(Black/White);

2.13inch(2.13inch e-Paper:250×122,others:212×104):

epd_2in13: Example for 2.13inch e-paper V1(Black/White), this version is stopped production and it can be bought before 019-05-15;
epd_2in13_V2:Example for 2.13inch e-paper V2(Black/White) This is the current version with sticker V2 on the backside (2020-07-29);
epd_2in13bc:Example for 2.13inch e-paper B(Black/White/Red)and 2.13inch e-paper C(Blackj/White/Yellow);
epd_2in13d: Example for 2.13inch e-paper D(Black/White);

4.01inch(640×400)

epd_4in01f: Example for 4.01inch e-paper(Seven-color);

4.2inch(400×300)

epd_4in2: Example for 4.2inch e-paper(Black/White);
epd_4in2bc: Example for 4.2inch e-paper B(Black/White/Red);

5.65inch (600x448)

epd_5in65f: Example for for 5.65inch e-Paper F (Seven-color);

5.83inch(600×448):

epd_5in83: Example for 5.83inch e-paper(Black/White);
epd_5in83bc: Example for 5.83inch e-paper B(Black/White/Red)and 5.83inch e-paper C(Black/White/Yellow);

7.5inch(V1:640×384,V2:800×480):

epd_7in5: Example for 7.5inch e-paper(Black/White), this version is stopped production and it can be bought before 2019-12-07;
epd_7in5bc: Example for 7.5inch e-paper B(Black/White/Red)and 7.5inch e-paper C(Black/White/Yellow),7.5inch e-paper B V1 version is stopped production and it can be bought before 2019-12-07;
epd_7in5_V2: Example for 7.5inch e-paper V2(Black/White), This is the current version with V2 sticker on the backside (2020-07-29)
epd_7in5bc:Example for 7.5inch e-paper B V2(Black/White/Red); This is the current version with a V2 sticker on the backside. (2020-07-29);

Code Description

Files

Use 2.13inch e-Paper as example, open the folder of epd2in13 v2
E-paper arduino ide codeDescription1.png
epd2in13.ino:The project file
epd2in13.cpp(.h):EPD driver of e-Paper
epdif.cpp(.h): Hardware interface, functions for GPIO and SPI ;
font8.cpp、font12.cpp、font16.cpp、font20.cpp、font24.cpp、fonts.h: fonts which has
imagedata.cpp(.h):Image data, which is pre-coverted data for display directly.
The codes are include three parts: Bottom hardware interface, middle EPD driver and application functions.程;

Bottom hardware interface

hardware interfaces are defined in epdif.cpp(.h) file

Write GPIO
void DigitalWrite(int pin, int value)

The first parameter is GPIO, and second parameter is level

Read GPIO
int DigitalRead(int pin)

The parameter is GPIO, and return value is level

Delay
DelayMs(unsigned int delaytime)

Delay time, unit is ms

SPI transmit data
SpiTransfer(unsigned char data)

Type of parameter is char

Hardware initailze
int IfInit(void)

The initialize function of SPI, input/ouptu are packaged here。

Middle EPD driver

Instantiate e-Paper class

The Arduino codes are based on C++, should instantiate e-Paper class is necessary.

Epd epd;
Initialize e-Paper, it should be used to initialize e-Paper or wakeup e-Paper from sleep mode.
  • 2.13inch e-Paper,2.9inch e-Paper
epd.Init(lut_full_update); //Fully update
epd.Init(lut_partial_update); //Partial update
  • 4.2inch e-Paper
epd.Init();
Clear, clear the e-Paper to white
epd.clear();

In some of project, the operation is divided to two part, they work in the same way

epd.ClearFrameMemory(0xFF); 
epd.DisplayFrame();//Display it
Transmit one frame of image and display
void Display(const unsigned char* frame_buffer);
void DisplayFrame(const unsigned char* frame_buffer_black, const unsigned char* frame_buffer_red); //Three color e-Paper
Sleep
epd.Sleep();

Set the e-Paper enter sleep mode. The consumption of the e-Paper will be reduced. However, you still need to update the display periodically to avoid a ghost problem.

Application functions

The drawing functions are defined in this part.
The coordination of the image buffer:
E-paper arduino pic1.png

The functions are defined in epdpaint.h file
E-paper arduino ide codeDescription2.png

Initailze image buffer
Paint(unsigned char* image, int width, int height);

The first parameter is image buffer, the second one is the width of the picture, and the third one is the height.

Paint paint(image, 0, 0);    // width should be the multiple of 8

The second and third parameters are set to 0, you can re-configure them with functions below:

Set the width, height, rotate degree.
int  GetWidth(void); //Get the width
void SetWidth(int width);//Set the width
int  GetHeight(void);//Get the height
void SetHeight(int height);//Set the height
int  GetRotate(void);//Get the degree
void SetRotate(int rotate);//Set the rotate degree
Get the image data
unsigned char* GetImage(void);
Draw circle
void DrawPixel(int x, int y, int colored);

Coordination(x,y)

Draw characater
void DrawCharAt(int x, int y, char ascii_char, sFONT* font, int colored);

Set(x,y)as the start point, draw characters ascii_char, set the fonts as font, color is colored.

Draw string
void DrawStringAt(int x, int y, const char* text, sFONT* font, int colored);

Set(x,y)as the start point, draw the string text, font is font,color is colored

Draw line
void DrawLine(int x0, int y0, int x1, int y1, int colored);

Use (x0,y0)as start point, (x1,y1) as end point;

Draw cross line
void DrawHorizontalLine(int x, int y, int width, int colored);

Set(x0,y0)as start points,draw a line, the widht is width, and color is colored</ br>

Draw a vertical line
void DrawVerticalLine(int x, int y, int height, int colored);

Use(x0,y0) as start point, draw a vertical line, width is height and color is colored./ br>

Draw a empty rectangle
void DrawRectangle(int x0, int y0, int x1, int y1, int colored);

User(x0,y0) as start point,(x1,y1)is end point, draw a rectangel, color of edges are colored.

Draw a full rectangle
void DrawFilledRectangle(int x0, int y0, int x1, int y1, int colored);

Use(x0,y0)as start point, (x1,y1) is end point, draw a rectange, filled it with color: colored

Draw an empty circle
void DrawCircle(int x, int y, int radius, int colored);

Use (x,y)as center,draw a empty circle with radius, color is colored

Draw a full circle
void DrawFilledCircle(int x, int y, int radius, int colored);

Use (x,y)as center, draw a circle, radius is radius, filled with color: colored