Dependancies
Pre-requisites
Buy the components
waveshare-1in54-v2-e-paper-samd21g.ino
#include <SPI.h>
#include "epd1in54_V2.h"
#include "imagedata.h"
#include "epdpaint.h"
#include <stdio.h>
Epd epd;
unsigned char image[1024];
Paint paint(image, 0, 0);
unsigned long time_start_ms;
unsigned long time_now_s;
#define COLORED 0
#define UNCOLORED 1
void setup() {
SerialUSB.begin(9600);
while (!SerialUSB) { }
SerialUSB.println("e-Paper init and clear!");
epd.LDirInit();
epd.Clear();
paint.SetWidth(200);
paint.SetHeight(24);
SerialUSB.println("e-Paper paint");
paint.Clear(COLORED);
paint.DrawStringAt(30, 4, "Hello world!!", &Font16, UNCOLORED);
epd.SetFrameMemory(
paint.GetImage(), 0, 10, paint.GetWidth(), paint.GetHeight());
paint.Clear(UNCOLORED);
paint.DrawStringAt(30, 4, "e-Paper Demo", &Font16, COLORED);
epd.SetFrameMemory(
paint.GetImage(), 0, 30, paint.GetWidth(), paint.GetHeight());
paint.SetWidth(64);
paint.SetHeight(64);
paint.Clear(UNCOLORED);
paint.DrawRectangle(0, 0, 40, 50, COLORED);
paint.DrawLine(0, 0, 40, 50, COLORED);
paint.DrawLine(40, 0, 0, 50, COLORED);
epd.SetFrameMemory(
paint.GetImage(), 16, 60, paint.GetWidth(), paint.GetHeight());
paint.Clear(UNCOLORED);
paint.DrawCircle(32, 32, 30, COLORED);
epd.SetFrameMemory(
paint.GetImage(), 120, 60, paint.GetWidth(), paint.GetHeight());
paint.Clear(UNCOLORED);
paint.DrawFilledRectangle(0, 0, 40, 50, COLORED);
epd.SetFrameMemory(
paint.GetImage(), 16, 130, paint.GetWidth(), paint.GetHeight());
paint.Clear(UNCOLORED);
paint.DrawFilledCircle(32, 32, 30, COLORED);
epd.SetFrameMemory(
paint.GetImage(), 120, 130, paint.GetWidth(), paint.GetHeight());
epd.DisplayFrame();
delay(2000);
SerialUSB.println("e-Paper show pic");
epd.HDirInit();
// Part display
epd.HDirInit();
epd.DisplayPartBaseImage(IMAGE_DATA);
paint.SetWidth(50);
paint.SetHeight(60);
paint.Clear(UNCOLORED);
char i = 0;
char str[10][10] = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"};
for (i = 0; i < 10; i++) {
paint.Clear(UNCOLORED);
paint.DrawStringAt(10, 10, str[i], &Font24, COLORED);
epd.SetFrameMemoryPartial(
paint.GetImage(), 80, 70, paint.GetWidth(), paint.GetHeight());
epd.DisplayPartFrame();
delay(100);
}
SerialUSB.println("e-Paper clear and goto sleep");
epd.HDirInit();
epd.Clear();
epd.Sleep();
}
void loop() { }
BOARD?=arduino:samd:mzero_bl
PORT := $(shell ls /dev/cu.usbmodem*)
.PHONY: default all flash clean
default: all flash clean
all:
arduino-cli compile --fqbn $(BOARD) ./
flash:
arduino-cli upload -p $(PORT) --fqbn $(BOARD) --verbose
clean:
rm -r build
Check the version of the Waveshare module and use the example code for version 1 and version 2 accordingly.
The 4 non-SPI pins are defined in epdif.h
file:
#define RST_PIN 8
#define DC_PIN 9
#define CS_PIN 10
#define BUSY_PIN 7
The SPI pins for Arduino M0 / SAMD21G are defined as following:
SAMD21G Pin | I/O Pin | SERCOM-ALT | Name |
---|---|---|---|
19 |
PB10 |
SERCOM4/PAD[2] |
MOSI |
20 |
PB11 |
SERCOM4/PAD[3] |
SCK |
Arduino Zero | Waveshare E-Ink module | SAMD21G |
---|---|---|
D7 | BUSY | PA21 |
D8 | RST | PA06 |
D9 | DC | PA07 |
D10 | CS | PA18 |
CLK | SCK on ICSP connector | PB11 |
DIN | COPI on ISCP connector | PB10 |