After completing the Teams status light, for my next project, I’m moving on to something useful for the other half. This project requires very low power draw while driving an external display. E-ink displays are great for this task and once displayed, the device can go to sleep while still displaying the summary data with no power. As the e-ink display will be using SPI, and my sensors will be using I2C to keep the number of pins down. In the small microprocessors, not all can supply both I2C and SPI, however the Seeeduino Xiao met all my needs. I came across a few challenges on this project, so this post covers how to connect a Seeeduino Xiao with a Waveshare 1.02 e-ink display.
Parts
For this project, I used the following parts:
Both Seeed Studio and Waveshare provide guides on how to install the Arduino IDE and get it working with their hardware. This guide covers specifically the wiring and changes made to the code to get the 1.02″ display working with the Seeeduino Xiao
Seeeduino Xiao Pinout selection
The Seeeduino Xiao has 16 pins as below:
For this project, I am using:
Pins | Purpose |
3V3, GND | Powering the display and sensors |
D8, D10 | Display SPI pins |
D4, D5 | I2C sensors |
D0-D3 | Display pins |
Waveshare 1.02″ e-ink pins
The Waveshare display has the following pins:
Connecting the Seeeduino Xiao with a Waveshare 1.02 inch display
The pins are connected as follows:
Waveshare e-ink display | Seeeduino Xiao |
VCC | 3V3 |
GND | GND |
DIN | D10/MOSI |
CLK | D8/SCK |
CS | D0 |
DC | D1 |
RST | D2 |
BUSY | D3 |
Configuring the example code
Waveshare have example code for their screens running with various hardware platforms on their GitHub page. I downloaded the “epd1in02d” directory and opened it up in the Arduino IDE.
Before compiling the sample code, I first needed to update it to reflect the Seeeduino Xiao pin numbers.
The GPIO pins are defined in DEV_Config.h. I updated the pin numbers to reflect the Xiao’s configuration:
/**
* GPIO config
**/
#define EPD_RST_PIN 2
#define EPD_DC_PIN 1
#define EPD_CS_PIN 0
#define EPD_BUSY_PIN 3
My test compile still failed, due to the following error:
invalid conversion from 'const unsigned char*' to 'uint8_t* {aka unsigned char*}' [-fpermissive]
This occurred in a couple of places. If I updated the IDE to compile for an Arduino UNO, there were no problems with the compile. This error was specific to the Xiao code compile.
Investigating the errors, I found them to occur with the following files:
- font24cn.cpp
- imagedata.cpp
As I’m not using chinese fonts or loading images, I commented out the fonts from the file fonts.h:
// extern cFONT Font12CN;
// extern cFONT Font24CN;
and I commented out the the image processing code from the sample file:
#include "GUI_Paint.h"
#include "DEV_Config.h"
#include "EPD_1in02d.h"
#include "fonts.h"
//#include "imagedata.h"
and removed the image display:
// EPD_Display_Image(IMAGE_DATA);
// DEV_Delay_ms(500);
// EPD_Clear();
At this point, the code successfully compiled and was able to display the first sample page on the display:
And there you have it, a Seeeduino Xiao with a Waveshare 1.02Now on the rest of the project.