▧ domotique.← All tutorialsThe code ↓

LAB NOTES / DISPLAY & ENERGY

A screen that
keeps its memory.

An ESP32, eight wires and a small e-paper display. Build a dashboard that remains readable while the screen sleeps.

Waveshare 1.54″ · 200 × 200 pixels · Arduino

Actual ESP32 build with a logo, simulated temperature and humidity, date and time on an e-paper screen
The working build · simulated values

01 / FROM SKETCH TO SCREEN

Your first e-paper dashboard.

The project displays the iLM logo, year, temperature, humidity, date and time. No sensor is needed for this demonstration.

What you need

  • A uPesy ESP32 Wroom Low Power board
  • A black-and-white Waveshare 1.54-inch e-paper module with its driver board and eight-wire cable
  • A breadboard, jumper wires and a USB data cable
  • Arduino IDE, GxEPD2 and Adafruit GFX libraries

Simulated readings

Temperature varies slowly between 18 and 22 °C and humidity between 45 and 55 % RH. These are not actual measurements. The demonstration program updates the display every 60 seconds.

Original hand-drawn dashboard layout with logo, year, temperature, humidity, date and time
The original sketch, adapted to the square display.

02 / EIGHT WIRES, ONE SPI CONNECTION

Connect the screen to the ESP32.

Disconnect USB and the battery before wiring. Follow the printed labels: GPIO numbers identify signals, not physical header positions.

Wiring tested on the pictured build
Supplied cable wireDisplayESP32
RedVCC3V3
BlackGNDGND
BlueDIN / MOSIGPIO23
YellowCLK / SCKGPIO18
OrangeCSGPIO27
GreenDCGPIO26
WhiteRSTGPIO25
PurpleBUSYGPIO33

Colours refer to the photographed cable. With a different cable, follow the module labels.

Back of the Waveshare module showing BUSY, RST, DC, CS, CLK, DIN, GND, VCC and the BS jumper
All eight signals are labelled directly on the module.
Close-up of the uPesy ESP32 Low Power and its breadboard connections
On the ESP32 side, check the GPIO labels. The breadboard LEDs are not needed for this project.

03 / A PROGRAM YOU CAN REUSE

Complete code. Logo included.

This version was compiled and uploaded to the pictured build. It puts the screen to sleep after each update; the ESP32 remains awake between updates.

  1. Install the tools. Add the Espressif ESP32 board package in Arduino IDE. Install GxEPD2, Adafruit GFX Library and the suggested dependencies, including Adafruit BusIO.
  2. Open the project. Download and extract the archive. Place EpaperTableau.ino and logo_ilm.h in a folder named EpaperTableau, then open the .ino file.
  3. Select the board and port. For this uPesy Wroom, select “ESP32 Dev Module”. The test used COM4; select the actual port on your own computer.
  4. Upload and observe. Flickering during a full refresh is normal. Set the serial monitor to 115200 baud.
EpaperTableau.zipArduino program + iLM logo bitmap
Download the project ↓
Loading code…

Direct downloads: .ino program · .h logo. The tested Arduino program is shared by both language versions; its comments and display labels remain in French.

04 / DISPLAY, THEN SLEEP

The image stays.
Power use drops.

E-paper pigments retain their position without continuous refreshing. Sleeping the screen and sleeping the ESP32 are separate operations.

01

Wake up

The ESP32 starts and initialises the display.

02

Update

The program calculates values and draws the dashboard.

03

Sleep

The screen sleeps; the ESP32 can then sleep too.

What the program already does

display.hibernate();

With the V1 driver, this command powers down the panel drive voltages and requests controller deep sleep. The image remains visible. The blue adapter board remains connected to 3.3 V.

What to add for ESP32 deep sleep

A simple delay() does not put the board in deep sleep. For battery operation, the ESP32 can wake periodically, display new information and go back to sleep.

#include <esp_sleep.h>

// Conceptual example, after updating the display:
display.hibernate();
esp_sleep_enable_timer_wakeup(300ULL * 1000000ULL);
esp_deep_sleep_start();

Educational snippet, not included in the downloaded program. After five minutes of sleep, execution starts again in setup(). Adapt time initialisation so it does not reset the clock to compilation time at each wake-up, and keep the simulation counter in RTC memory if needed. The complete cycle also includes awake time.

Useful orders of magnitude

2–5 µA

Deep-sleep current specified for the GDEP015OC1 panel associated with the V1 driver: 2 µA typical, 5 µA maximum. This is not a measurement of the complete module.

< 15 µA

uPesy’s stated deep-sleep current for the Low Power board alone, powered through its battery connector or VIN under the specified conditions. It excludes the display and sensors. USB power is not the optimised mode.

Is a full refresh required when a number changes?

No. The V1 driver supports partial refresh: a selected area can be updated faster and with less flicker. Occasional full refreshes clear residual images; their frequency depends on the panel and how it is used.

Controller RAM is not retained after hibernation. Reliable partial updates after waking require restoring the necessary data and state. The supplied program uses full refreshes after waking the screen.

Choose a strategy for your application
StrategyBenefitTrade-off
Full refresh + hibernationSimple; deep sleep between updatesFlicker and full-refresh energy
Partial refresh + retained memoryUseful for frequent small changesPotentially higher standby current; periodic full cleanup
Display and ESP32 in deep sleepUseful for infrequent information updatesWake-up, time and state management required

Compare a complete cycle: Average current = (active current × active time + sleep current × sleep time) / cycle duration. Use consistent current and time units. Reducing wake-ups and radio-on time can matter as much as display sleep.

AT THE WORKBENCH

If nothing appears.

Blank display or “Busy Timeout”

Check 3V3, GND, BUSY on GPIO33 and RST on GPIO25, then DIN and CLK. Confirm the panel model: this build works with GxEPD2_154. Another 1.54-inch display may need a different driver. Check the wiring before trying drivers.

The dashboard remains after disconnecting USB

This is normal: e-paper retains its image without power. It does not mean the controller is still running or new values can be displayed.

The values do not match the room

Temperature and humidity are simulated. For actual measurements, add a sensor and replace the demonstration calculations with readings from it.

The time is wrong after a restart

Without Wi-Fi, compilation time is reused. Enable NTP in your local copy or use an RTC. During deep-sleep operation, preserve time instead of resetting it on every pass through setup().

Loading counter…

Views since counter activation, without cookies. Reloads from the same connection within 30 seconds are grouped. The French and English tutorial share this counter. This is not a unique-visitor count; some bots may be counted. No IP addresses are stored in the counter database; ordinary web-server logs remain separate.

FURTHER READING

Workshop references.

Workshop build and photographs · 23 October 2026. The iLM logo was supplied for this example.