Go to file
Chris 5c0744ff01
Various improvements (#25)
- Added is_busy to Waveshare_Interface
- Added IS_BUSY_LOW const for all supported epds
- Added is_busy to DisplayInterface
- moved width, height and default_background_color directly to epd4in2 module
- Added VarDisplay (a variable buffersize display/graphic driver)
- Removed all Buffers (Buffer1in54,...) and instead made specialised Displays (Display1in54,...) with included Buffers
- Updated and added more examples
- Cargo fmt/clippy
- Improved Docs/Readmes
2019-03-06 11:48:05 +01:00
ci added ci 2018-05-11 14:02:55 +02:00
examples Various improvements (#25) 2019-03-06 11:48:05 +01:00
src Various improvements (#25) 2019-03-06 11:48:05 +01:00
.gitignore some changes 2018-05-09 16:50:54 +02:00
.travis.yml Various improvements (#25) 2019-03-06 11:48:05 +01:00
CHANGELOG.md - Renaming to epd-waveshare 2018-10-30 15:25:48 +01:00
Cargo.toml Improve keywords,description and Readme 2019-02-22 14:51:29 +01:00
License.md Create License.md 2018-05-04 13:25:57 +02:00
README.md Various improvements (#25) 2019-03-06 11:48:05 +01:00

README.md

Build Status

This library contains a driver for E-Paper Modules from Waveshare (which are basically the same as the Dalian Good Display ones).

It uses the embedded graphics library for the optional graphics support.

A 2018-edition compatible version (Rust 1.31+) is needed.

Other similiar libraries with support for much more displays are u8g2 and GxEPD for arduino.

Examples

There are multiple examples in the examples folder. For more infos about the examples see the seperate Readme there. These examples are all rust projects of their own, so you need to go inside the project to execute it (cargo run --example doesn't work).

// Setup the epd
let mut epd = EPD4in2::new(&mut spi, cs, busy, dc, rst, &mut delay)?;

// Setup the graphics
let mut buffer = Buffer4in2::default();
let mut display = Display::new(epd.width(), epd.height(), &mut buffer.buffer);

// Draw some text
display.draw(
    Font12x16::render_str("Hello Rust!")
        .with_stroke(Some(Color::Black))
        .with_fill(Some(Color::White))
        .translate(Coord::new(5, 50))
        .into_iter(),
);

// Transfer the frame data to the epd
epd.update_frame(&mut spi, &display.buffer())?;

// Display the frame on the epd
epd.display_frame(&mut spi)?;

(Supported) Devices

Device (with Link) Colors Flexible Display Partial Refresh Supported Tested
4.2 Inch B/W (A) Black, White Not officially [1]
1.54 Inch B/W (A) Black, White
2.13 Inch B/W (A) Black, White
2.9 Inch B/W (A) Black, White ✔ [2]

[1]: 4.2 Inch E-Ink Black/White - Partial Refresh

Out of the Box the original driver from Waveshare only supports full updates.

That means: Be careful with the quick refresh updates:
It's possible with this driver but might lead to ghosting / burn-in effects therefore it's hidden behind a feature.

[2]: 2.9 Inch E-Ink Black/White - Tests

Since my 2.9 Inch Display has some blurring issues I am not absolutly sure if everything was working correctly as it should :-)

Interface

Interface Description
VCC 3.3V
GND GND
DIN SPI MOSI
CLK SPI SCK
CS SPI chip select (Low active)
DC Data/Command control pin (High for data, and low for command)
RST External reset pin (Low for reset)
BUSY Busy state output pin (Low for busy)

Display Configs

There are two types of Display Configurations used in Wavedshare EPDs, which also needs to be set on the "new" E-Paper Driver HAT. They are also called A and B, but you shouldn't get confused and mix it with the Type A,B,C and D of the various Displays, which just describe different types (colored variants) or new versions. In the Display Config the seperation is most likely due to included fast partial refresh of the displays. In a Tabular form:

Type A Tybe B
1.54in (A) 1.54in (B)
2.13in (A) 1.54in (C)
2.13in (D) 2.13in (B)
2.9in (A) 2.13in (C)
2.7in (A)
2.7in (B)
2.9in (B)
2.9in (C)
4.2in (A)
4.2in (B)
4.2in (C)
7.5in (A)
7.5in (B)
7.5in (C)