Overview

The Waveshare 2.13-inch E-Paper Display HAT is an ultra-low-power electronic ink (E-Ink) display module featuring a resolution of 250×122250 \times 122 pixels. Built around an onboard controller (SSD1680 in V4 revisions), it connects to microcontrollers and single-board computers via a 3-wire or 4-wire SPI bus.

Electronic paper displays reflect ambient light just like physical paper, eliminating backlight glare while retaining full readability under direct sunlight. Crucially, electrophoretic E-Ink displays consume zero power to maintain static images—power is drawn only during screen updates. Supporting fast partial refresh (0.3 seconds) without screen flickering, it is widely deployed in Raspberry Pi desktop dashboards, crypto tickers, weather stations, and battery-powered Home Assistant sensors.

Quick reference

Operating voltage (VCC)3.3 V to 5.0 V DC (onboard level translator)
Display area2.13-inch diagonal (48.55 mm×23.71 mm48.55\text{ mm} \times 23.71\text{ mm})
Resolution250×122250 \times 122 pixels (130 DPI)
Display colorBlack and White (monochrome)
Interface3-Wire / 4-Wire SPI
Full refresh duration~2.0 seconds
Partial refresh duration~0.3 seconds
Standby power draw<0.017 mW<0.017\text{ mW} (near-zero current when idle)
Form factorRaspberry Pi 40-pin GPIO HAT footprint + 8-pin JST connector

Pinout (8-Pin JST Connector & Raspberry Pi 40-Pin Header)

PinCable ColorNameTypePi GPIO Header PinDescription
1RedVCCPowerPin 2 (5V) / Pin 1 (3.3V)Power supply (+3.3 V to +5.0 V DC)
2BlackGNDPowerPin 6 (GND)Ground reference (0 V)
3BlueDIN / MOSIDigital InputPin 19 (GPIO 10 - SPI0_MOSI)SPI Master Output Data
4YellowCLK / SCKDigital InputPin 23 (GPIO 11 - SPI0_SCLK)SPI Serial Clock
5OrangeCSDigital InputPin 24 (GPIO 8 - SPI0_CE0)Active-Low SPI Chip Select
6GreenDCDigital InputPin 22 (GPIO 25)Data / Command Select (Low = Cmd, High = Data)
7WhiteRSTDigital InputPin 11 (GPIO 17)Active-Low Reset pin
8PurpleBUSYDigital OutputPin 18 (GPIO 24)Active-High Busy signal (High = Screen Updating)

Specifications

ParameterSymbolMinTypMaxUnitConditions
Supply VoltageVCCV_{CC}3.33.3 / 5.05.5VDC
Active Refresh PowerPrefreshP_{refresh}26.440.0mWDuring screen update
Standby Sleep PowerPsleepP_{sleep}0.0170.03mWDeep sleep mode
Full Refresh Timetfullt_{full}2.03.0sRoom temperature (25C25^\circ\text{C})
Partial Refresh Timetpartt_{part}0.30.5sRoom temperature (25C25^\circ\text{C})
Viewing Angleθ\theta>170>170^\circdegFull reflection angle
Operating TemperatureToprT_{opr}02550°CB/W monochrome version

Refresh Modes & Screen Care

  1. Full Refresh: Inverts the entire display (black-to-white flash) to clear ghosting. Must be performed at least once every 24 hours to prevent permanent E-Ink burn-in.
  2. Partial Refresh: Updates only changing pixel regions (e.g. clock digits) in ~0.3 seconds without full-screen flashing.
  3. Deep Sleep Command (0x10): After updating the display, issue the deep sleep command to power down internal charge pumps and prevent DC voltage damage to the electrophoretic panel.

Wiring (Arduino / ESP32 SPI Connection)

E-Paper PinESP32 GPIOArduino UnoNotes
VCC3.3V5V / 3.3VPower rail
GNDGNDGNDSystem ground
DIN (MOSI)GPIO 23Digital D11SPI Data
CLK (SCK)GPIO 18Digital D13SPI Clock
CSGPIO 5Digital D10SPI Chip Select
DCGPIO 17Digital D9Data/Command pin
RSTGPIO 16Digital D8Hardware Reset
BUSYGPIO 4Digital D7Busy Status Output

Example (Python Raspberry Pi waveshare_epd)

python
import sys
import os
import time
from waveshare_epd import epd2in13_V4
from PIL import Image, ImageDraw, ImageFont

epd = epd2in13_V4.EPD()

print("Initializing 2.13inch e-Paper...")
epd.init()
epd.Clear()

# Create blank image canvas for drawing (250x122)
image = Image.new('1', (epd.height, epd.width), 255)  # 255: clear/white background
draw = ImageDraw.Draw(image)

font = ImageFont.load_default()
draw.text((10, 20), 'VoltDocs E-Ink Dashboard', font=font, fill=0)
draw.text((10, 50), 'Temp: 22.4 C | RH: 45%', font=font, fill=0)
draw.line([(10, 40), (200, 40)], fill=0, width=2)

# Display rendered image on screen
epd.display(epd.getbuffer(image))
time.sleep(2)

print("Entering Deep Sleep mode to save power...")
epd.sleep()

Common mistakes

  • Leaving the display powered continuously without issuing sleep(): Keeping voltage applied to the E-Ink panel without putting the controller to sleep causes permanent ghosting and panel degradation over time.
  • Ignoring the BUSY line: Sending SPI commands while the BUSY pin is High corrupts display memory. Always wait for BUSY to go Low before issuing new refresh commands.

Notes

  • 2.13" E-Paper Variants: Waveshare manufactures several 2.13" revisions: V2 (SSD1675), V3, V4 (SSD1680), and Tricolor (B/W/Red or B/W/Yellow). Ensure software drivers match your specific version.

Assets & downloads