quiet bee.

TECHNICAL NOTEBOOK / DISPLAY

A display that stays readable between wake-ups.

E-paper retains an image without continuous refreshing. To make use of this, first obtain a stable display before adding networking or sleep.

Quiet Bee editorial team · Updated: 1 November 2026
Educational examples to adapt; hardware validation is specified in each article.

1. Prepare the hardware

You need a classic ESP32 board, a display with a compatible interface board, a USB data cable and eight short connections. Disconnect the power before wiring. Classic ESP32 GPIOs do not tolerate 5 V logic: check the signal voltage of the display board, even if its power input accepts several voltages.

Install ESP32 board support in Arduino IDE and the GxEPD2 library with its suggested dependencies. Record the versions used in your test notebook so that you can reproduce a problem.

2. Follow the project wiring

DisplayClassic ESP32Role
VCC3V3Power supply for the documented setup
GNDGNDCommon ground
DINGPIO23MOSI: data to the display
CLKGPIO18SPI clock
CSGPIO27Display selection
DCGPIO26Data or command
RSTGPIO25Reset
BUSYGPIO33Controller busy state

These numbers identify GPIOs, not connector positions. This plan cannot be applied directly to a XIAO ESP32-C3. Do not connect the e-paper and LTE-M projects together without reviewing the assignments: GPIO25 and GPIO26 have other reserved roles in the field project.

Quiet Bee e-paper setup on a breadboard
Photo of the existing setup. The wiring table refers to the project code; check every connection on your own board.

3. Isolate a first display test

This educational program does not connect to Wi-Fi or read a sensor. It displays fixed text to separate SPI errors from acquisition errors. The explicit SPI.begin call makes the bus pin assignments visible.

#include <SPI.h>
#include <GxEPD2_BW.h>

using Panel = GxEPD2_154; // V1 uniquement : identifier la dalle
GxEPD2_BW<Panel, Panel::HEIGHT> display(Panel(27, 26, 25, 33));

void setup() {
  Serial.begin(115200);
  SPI.begin(18, -1, 23, 27); // SCK, MISO inutilisé, MOSI, CS
  display.init(115200);
  display.setRotation(0);
  display.setFullWindow();
  display.firstPage();
  do {
    display.fillScreen(GxEPD_WHITE);
    display.setTextColor(GxEPD_BLACK);
    display.setTextSize(2);
    display.setCursor(10, 40);
    display.print("Quiet Bee");
    display.setCursor(10, 80);
    display.print("Test affichage");
  } while (display.nextPage());
  display.hibernate();
}
void loop() { delay(1000); }

Expected check: a full refresh may make the panel flash, then the text remains visible. This code is a starting point to compile for your target; it is not a hardware test report. A V2 panel may require GxEPD2_154_D67: only change drivers after identifying the panel.

4. Diagnose faults before adding a sensor

SymptomUseful check
Blank displayCheck VCC/GND, CS and DC; confirm the panel driver.
Endless BUSY waitCheck BUSY and RST, then the power supply and controller reference.
Rotated or offset textTest setRotation and the coordinates before changing the wiring.
Ghosting after several updatesReturn to a full refresh; follow the manufacturer's recommendations for partial updates.
ESP32 restartingRead the serial log and check the power supply, short circuits and USB cable.

5. What hibernate really means

display.hibernate() affects the display controller. The ESP32 processor remains active in loop(). To save battery power, you must also stop unnecessary peripherals and schedule the microcontroller's deep sleep. A retained image is not a recent measurement: add a timestamp or an age indicator to a field display.

The original temperature and humidity program uses simulated values. Before calling it a weather station, replace this generation with a sensor reading and handle errors without turning them into plausible values.

Sources and references

The schematics for your hardware reference and the documentation for your software version take precedence over a generic example.