book collections email follower instructable user

Ever since I found out about the E-paper technology I was fascinated by it. I always wondered if there something I can build using it. Couple months ago I bought a Kindle e-reader and I found out that despite having a black and white screen, the images looked stunning. Almost as if they had some Instagram filter. So I decided to make a digital picture frame with an E-ink display.

The great thing about these displays is that they don't need any power to retain an image. You only need to power it in order to change the screen. Even if you completely unplug one of these displays it will retain the last image indefinitely. This is why using it as a picture frame is actually viable.

Most people can't even tell they are looking at a screen since it looks just like a printed photo. The image is updated every 24 hours. Unlike a regular picture frame where you stop noticing it after a couple of days, this one always catches your attention.

It's running on 3 button cell batteries which should last about 9-12 months. Using AAA batteries would extend that to a couple of years. The nice thing is that if the battery does run out the last image will stay loaded on the screen. The images are saved on a microSD card and the software just cycles through them. There is also a button to skip a current picture.

Step 1: Tools and Materials

Picture of Tools and Materials


  • Soldering iron
  • 3D printer (optional)
  • Hand saw
  • Hot glue gun


RahulA1175 months ago
I am in process of building this project but I am facing some of the issues and so I am trying to get some help here. I have followed the exact procedure to complete the project but my images are not displayed in the e paper display. It refresh for once and stays blank. The led however does not blink but stays static. I have tried so many ways of fixing this bug. Hope someone might help me out!!. What might be the problem? How can I fix it?
tronicgr6 months ago
Great job! Thanks for sharing this. I found an easier way to convert the photos to 4bit though, using this online conversion site:

Even if they still look colored after converting to 4bit, they look grayscale on the e-paper!

IMG_20190314_084426.jpgimage converter online settings.jpg
IvanN711 year ago

Great job putting this together and its awesome! I'm an arduino noob so I tried building one and it works well with timing however the issue is that the button push does not advance the image properly.
If the refresh rate is 1 or 2 I can get it to advance on 1 push, but if it is higher, like 10 - 20 I have to push it many times. I'm guessing its only decreasing the time to refresh rather than advancing the image. On the full 24 hours it doesn't advance no matter how many times I push it. Please help!

I reached out for help on Reddit and after some tweaking I got the following code to work for both the timing and the button. Some of the code was re-written as it was unnecessary. Hope this helps anyone else struggling with this.


1) Added de-bounce

2) Button press moves the refresh counter to match the refresh rate which then advances the picture.


#include "LowPower.h"

#include "epd.h"

const int wake_up = 6;

const int reset = 5;

const int lcd_on = 4;

const int button = 3;

int refreshRate = 10800; //time between loading images. number you enter * 8 = seconds between refresh (10800 = 24h)

int counter = 1;

int refreshCounter = 0;

int ByteReceived;

bool errorFlag = false;

bool picSend = false;

bool picLoaded = false;

bool buttonP() {

if (digitalRead(button) == HIGH) {


return true;

} else {

return false;



void setup(void)


pinMode(lcd_on, OUTPUT);

pinMode(13, OUTPUT);

pinMode (buttonP,INPUT);

digitalWrite(13, LOW);

attachInterrupt(1, buttonPr, RISING);


void loop(void) {




void buttonPr(){

refreshCounter = refreshRate;



void wakeUp() {


if (refreshCounter < refreshRate ) enterSleep();


void DrawPic() {

digitalWrite(13, LOW);


digitalWrite(lcd_on, HIGH);


epd_init(wake_up, reset);




digitalWrite(13, HIGH);

//int index = 7;

String indexStr = String(counter);

String str = 'i' + indexStr + ".BMP ";

char character[str.length()] ;

str.toCharArray(character, str.length());

epd_disp_bitmap(character, 0, 0);



while (1) {

ByteReceived =;

if (ByteReceived == 13) {

picSend = true;


if (ByteReceived == 69) {

errorFlag = true;

//if(!picSend && counter == 1) noSDcard();

//if(picSend && counter == 1) noPic();


counter = 0;




if (ByteReceived == 75 && picSend && picLoaded) {



if (ByteReceived == 75 && picSend) {

picLoaded = true;



digitalWrite(13, LOW);

digitalWrite(lcd_on, LOW);

picLoaded = false;

errorFlag = false;

picSend = false;

refreshCounter = 0;



void enterSleep() {

LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);



_Gyro (author)  IvanN7112 months ago

Sorry I didn't reply sooner. But thank you very much for fixing it :)

casman3001 year ago

This is so awesome I decided to make one! Worked great while testing, I had set to refresh rate to 1 so I could test out all the images but after changing back to full 24 hours it doesn't want to refresh the display :( Have tried different refresh rates to test the math at lowe numbers and this works fine. Not sure what would cause this?

Nice work

jan_vda1 year ago

Very nice project. Especially because you managed to get the power consumption extremely low something I appreciate a lot. Jan.

_Gyro (author)  jan_vda1 year ago

thanks :)

raphan1 year ago

Who's get an Elon Musk photo at home ? Certainly the same that got Steve Jobs photo as well.

raphan raphan1 year ago

And I do like this project !

jperch1 year ago

I really like this project. I think I might take a stab at building one myself. I think it would be a really cool gift. It is unfortunate that the process of putting pictures on it is a bit tedious. But that is where opportunity is.

Also, it would be fun to try to take this project to the next step: make it wireless. It would almost certainly need a bigger battery for that. But that would be an interesting project.

Thanks for sharing!

_Gyro (author)  jperch1 year ago

Thanks :) I agree that making it wireless would be a lot more interesting. Good luck if you decide to build one :)

Yeah, I agree, certain types of photos do look really good on e-ink displays. This is such a cool project!

Thanks for sharing!