ESP32 E-Paper Thermometer




About: I am Nick Koumaris from Sparta, Greece. I'm extremely passionate about electronics, making things and design. I love teaching what I know and sharing my experiences with you. I put out new YouTube videos eve...

Dear friends welcome to another project video! Today, we are going to use this small e-paper display with the ESP32 board and build a simple thermometer! It is a very easy project to build. It won’t take us more than 5 minutes so let’s get started!

As you can see, I have connected a small e-paper screen to an ESP32 board. At the screen, we display the temperature which is being measured by this temperature sensor the DS18B20. The temperature reading on the screen is updated every 5 seconds. The cool thing is that we don’t refresh the whole screen which is very slow, only part of the screen which is fast and low-power!

Great, the project is working fine but let’s now see how to build it!

Teacher Notes

Teachers! Did you use this instructable in your classroom?
Add a Teacher Note to share how you incorporated it into your lesson.

Step 1: Get All the Parts

The parts needed are the following:

Optional Parts

The total cost of the project is around 30$.

Step 2: The ESP32 Board

This is the second project I ever build with the new ESP32 chip.

If you are not familiar with it, the ESP32 chip is the successor of the popular ESP8266 chip we have used many times in the past. The ESP32 is a beast! It offers two 32 processing cores which operate at 160MHz, a massive amount of memory, WiFi, Bluetooth and many other features with a cost of around 7$! Amazing stuff!

Please watch the detailed review I have prepared for this board. I have attached the video on this Instructable. It will help understand why this chip will change the way we make things forever!

One of the most exciting things about the ESP32 is that even though it is so powerful, it offers a deep-sleep mode which requires only 10μΑs of current. This makes the ESP32 the ideal chip for low power applications.

Step 3: The 1.54" E-Paper Display

Let's now take a look at the E-Paper Display.

This display is small, it is 1.54inch, and it is relatively inexpensive. It costs around 15$. I can hear you ask, is it really inexpensive? It costs 15$ and it is so small! You are right, it is very expensive for a tiny display like this, but you have to take in consideration that it is an e-paper display, and e-paper displays are expensive. For example a 4.3-inch e-paper display I reviewed a few years ago costs around $50!

For the first time, we now have access to smaller and cheaper e-paper displays. So, we can now build low-cost projects which will use e-paper displays! I am really excited about this. But why use an e-paper display in a project?

E-Paper or Electronic paper are displays that unlike traditional LCD or OLED displays does not emit light but reflect light. It is like the ink on the paper. This characteristic makes e-paper displays very comfortable to read, and they have excellent readability under direct sunlight. Another great thing about e-paper displays is that they can hold static text and images for months without electricity! Yes, that’s correct, the display can show text and images even when it is off! That makes e-paper displays ideal for low powered projects!

Unfortunately, there are some disadvantages as well. The price of e-paper display is still very high. Another significant disadvantage is that e-paper displays take a lot of time to update, as much as 2-3 seconds. So, they are only helpful for static text and images and not animations. This display supports partial screen update which is so cool!

Let’s now see how to use this small e-paper display with Arduino. The display offers a resolution of 200x200 pixels which is great and it uses the SPI interface.

Step 4: The DS18B20 Sensor

The DS18B20 is a digital thermometer that accurately measures temperature in the range -10°C to +85°C and also includes alarm functions and trigger points.

It is a very easy sensor to use because it uses the One-Wire interface. So, we only need to connect one wire to make it work! I have used this sensor a lot in the past, and I am going to use it a lot in the future as well because of its ease of use and accuracy. The cost of the sensor is around $2.

Step 5: Connect All the Parts

The E-Paper screen uses the SPI interface to communicate with the ESP32 board so we must connect it to the hardware SPI pins of the ESP32 board we use. It took me some time to find out which pins are the SPI pins on this board searching online. After I discovered them, I designed this, to save you some of your precious time. You can find the pinout diagram of this ESP32 board in the description below.

Now that we know the pins we need all we have to do is to connect the display and the sensor to the ESP32 according to this schematic diagram. Luckily all the SPI pin are placed on the same side of this ESP32 board so we can use a breadboard to test our project. After connecting all the parts together all we have to do is to power up the project.

At first, the project displays a splash screen for 3 seconds and then it shows the temperature icon. A few moments later the temperature reading appears. The temperature reading is updated once every 5 seconds. I have also prepared a version of the code with the temperature displayed in degrees Fahrenheit for the friends of the channel living in the United States.

Step 6: The Code of the Project

The code of the project is relatively simple.

We use the great GxEPD library to drive the display and a library for the temperature sensor.

At first we display the splash screen which is a bitmap file designed in Photoshop.

<p>display.drawExampleBitmap(gImage_splash, 0, 0, 200, 200, GxEPD_BLACK);<br>display.update();

Then we display another bitmap which is the main GUI of the project.

<p>display.drawExampleBitmap(gImage_gui, 0, 0, 200, 200, GxEPD_BLACK);<br>display.update();</p><p>display.drawExampleBitmap(gImage_gui, sizeof(gImage_gui), GxEPD::bm_default | GxEPD::bm_partial_update);</p>

The Wiki of the screen has detailed instructions on how to load bitmap graphics on this screen.

In the loop function we read the temperature every five seconds and we print the temperature we read on the display. We don’t refresh the whole display because it takes a lot of time, only the temperature part using the partial screen update function.

<p>void loop() {<br>  
  tempC = sensors.getTempCByIndex(0);

As always you can find the code of the project attached to this Instructable.

Step 7: Final Thoughts & Improvements

The project works fine, and it looks great. The e-paper display is ideal for a project like this because it offers great readability and extremely low-power consumption. When the screen is not updating it needs only 0.02mAs of current! The ESP32 board needs around 60mA of current when operating.

In the next Instructable, I will try to reduce the power consumption of the project. The goal is to make this project able to run on batteries for months. To achieve that I am going to learn how to put the ESP32 to sleep to conserve power and I am going to use another ESP32 board, the Firebeetle ESP32 by DFrobot. The creators of the board claim that this board requires only 12μΑ of current in sleep mode. So, in theory, the DFrobot Firebeetle board with an E-Paper display will need only 0.03mA in sleep mode! This means that we can easily make this project last on batteries for over a year! I can’t wait to try it and share my results with you.

I would love to hear your opinion about this project. Are you going to build any project with an ESP32 and an e-paper display? Please post your ideas in the comments section below; I love reading your thoughts!

1 Person Made This Project!


  • Assistive Tech Contest

    Assistive Tech Contest
  • Reuse Contest

    Reuse Contest
  • Made with Math Contest

    Made with Math Contest

18 Discussions


14 days ago

It looks good, but, unfortunately, it did not compile in this form.
Trying to reproduce this project, I get a huge number of messages "multiple definition ...." as a result of compilation, for example:
libraries\GxEPD-master\GxGDEP015OC1\GxGDEP015OC1.cpp.o: In function `GxGDEP015OC1::fillScreen(unsigned short)':
C:\Program Files (x86)\Arduino\libraries\GxEPD-master\src\GxGDEP015OC1/GxGDEP015OC1.h:35: multiple definition of `GxGDEP015OC1::fillScreen(unsigned short)'
sketch\ESP32_Epaper.ino.cpp.o:C:\Program Files (x86)\Arduino\libraries\GxEPD-master\src/GxGDEP015OC1/GxGDEP015OC1.cpp:113: first defined here
libraries\GxEPD-master\GxGDEP015OC1\GxGDEP015OC1.cpp.o: In function `GxGDEP015OC1::init(unsigned int)':
GxGDEP015OC1.cpp:(.text._ZN12GxGDEP015OC14initEj+0x0): multiple definition of `GxGDEP015OC1::init(unsigned int)'
sketch\ESP32_Epaper.ino.cpp.o:ESP32_Epaper.ino.cpp:(.text._ZN12GxGDEP015OC14initEj+0x0): first defined here
......" etc...
So sorry, a lot of time was spent looking for errors that turned out to be just negligence:
This works if you replace the inclusion of ".cpp" with ".h" as shown below:
!!!__the original text of the inclusions disappears, I don’t know the reason__!!!
just replace the .cpp extension with .h
Good luck!


4 months ago on Step 7

nice project. I also tried to run a e-paper project on the ESP32 (with a Waveshare 2.9 e-paper).
So I would like to recharge my battery (with is driving the ESP32 and the epaper) as less as possible. Therefore I also ordered a Firebeetle ESP32 (which should have a power consumption in µA range while in deep sleep - which is (up to my knowledge and my experiments - not possible with the "normal" ESP32 boards).

But I find a big problem when using the Firebeetle instead of a "regular" ESP32 board, and I wonder if you have also seen that:
When using the "partial Update /partial refesh" feature of the small Waveshare e-papers (which is a great feature for quick update without flicker) on a normal board (not Firebeetle ESP32) in combination with the deep sleep mode) it works well.
Using the Firebeetle ESP32 board instead the partial updated places in the display getting blurring.
Only Full Update works (but I even want to avoid this mode).

Any ideas?


Question 1 year ago on Step 4

Hello, im new here and want to use the epaper demo on a ESP32 Pico Kit V2 and V4. I have trouble to display the content on the epaper. Im sure i use the wrong SPI pins. Can someone give me a hint please? Thanks a lot in advance!


Question 1 year ago on Step 4

Well done. A very nice starter project.

Q1 Calibration. I have trouble with various digital thermemeters reding differently in the same water. How do you calibrate the DSB18B20 Sensor or does it come accurately calibrated?

Q2 How does your ESP32 compare with the Rasberry Pi?

Q3 I have a boat that needs a depth sensor. Do you know of any such projects preferably with WiFi connection.

It would be good to have a tick box here to send a copy of my queries to my email address.


Question 1 year ago

I downloaded 2 libraries that attached , i mean , when i compile your code by Arduino IDE.
And i got some problems. I imported 2 libraries into Arduino IDE.

fatal error: Adafruit_GFX.h: No such file or directory

#include <Adafruit_GFX.h>

Please help me to know what i have to do next?


1 year ago

Hello there.

I make this nice little thermometer to install it in my RV: I'll post images when the final setup will done...

I would like to have the word "Temperature" in my mother language, Italian, so "Temperatura", with the "a" at the end: how can I do that?

Thanx in advance,


5 replies

Reply 1 year ago

Hello Stefano, you have to create a bitmap file with the word Temperatura as the background of the display and then load it as I do it.


Reply 1 year ago

Done but, as expected, I lost other items...

It would be very useful if the Image2LCD utility was reversible, but not...


Reply 1 year ago

Not too bad, anyway...

Unfortunately we can't increase font size.


Reply 1 year ago

Mani thanx!

This is the very last release, ready to be permanently installed on my VW RV.

I'll do another one with outside temp, too.

I add the bmp also if anyone wish to do the same, but we have to change the position of the temperature "windows":

uint16_t box_x = 55;

uint16_t box_y = 55;

uint16_t box_w = 90;

uint16_t box_h = 85;

uint16_t cursor_y = box_y + 16;


Question 1 year ago on Step 6

Great Tutorial, but one question please, where do you get the fritzing part for the waveshare e-ink Display from?

1 answer

Answer 1 year ago

I just used a display that already existed in Fritzing and modified it in photoshop afterwards.


1 year ago

Awesome Instructable! I wasn't familar with e-paper displays before this and am now thinking they'll find a way into my next project. How long does that power bank last you?

1 reply

Reply 1 year ago

Oops, just saw "over a year" you have any observed numbers though?


1 year ago

Very nice ... I watch your projects!
My Wifi Weather Station with ePaper 2.9 + ESP Adafruit HUZZAH ESP8266 + DHT22 runs
on one charge for a month! :-)

2 replies

Reply 1 year ago

This is very cool! Thanks for sharing. Please post an Instructable about it. It is very interesting!