Elecrow CrowPanel E-Paper 4.2 (ESP32-S3)

4.2" 400x300 black-and-white e-paper on an ESP32-S3 N8R8 with a rotary switch, buttons and 12 free header GPIOs - note that it ships with two different panel controllers under one SKU.

USB-C
Elecrow CrowPanel E-Paper 4.2 (ESP32-S3) board
ESP32-S3
MCU
240MHz
clock
8MB
flash
512KB
SRAM
28· Two 12-bit, 20 Channels ADC
GPIO
BLE 5.0+ WiFi
radio
On this page

Pinout

29 pins
View:
PinGPIOLabelsStatusCapabilitiesNotes
10IO0BOOTstrapping-BOOT button - hold at power-up for download mode
21IO1EXIT_BTNsafe-Exit button - active low
32IO2MENU_BTNsafe-Menu button - active low
43IO3HDRstrapping-Free GPIO on the 2x10 header
54IO4ROTARY_DOWNsafe-Rotary switch - down, active low
65IO5ROTARY_PRESSsafe-Rotary switch - press/confirm, active low
76IO6ROTARY_UPsafe-Rotary switch - up, active low
87IO7EPD_POWERcontrol-Switches the e-paper power rail - must be high before the panel responds to anything
98IO8HDRsafe-Free GPIO on the 2x10 header
109IO9HDRstrapping-Free GPIO on the 2x10 header
1110IO10SD_CSstrappingspimicroSD slot - chip select
1211IO11EPD_MOSIstrappingspiInternal - e-paper SPI MOSI
1312IO12EPD_CLKstrappingspiInternal - e-paper SPI clock
1413IO13SD_MISOstrappingspimicroSD slot - MISO
1514IO14HDRstrapping-Free GPIO on the 2x10 header
1615IO15HDRsafe-Free GPIO on the 2x10 header
1716IO16HDRsafe-Free GPIO on the 2x10 header
1817IO17HDRsafe-Free GPIO on the 2x10 header
1918IO18HDRsafe-Free GPIO on the 2x10 header
2019IO19HDRuart-Free GPIO on the 2x10 header
2120IO20HDRuart-Free GPIO on the 2x10 header
2221IO21HDRsafe-Free GPIO on the 2x10 header
2338IO38HDRstrapping-Free GPIO on the 2x10 header
2439IO39SD_CLKstrappingspimicroSD slot - clock
2540IO40SD_MOSIstrappingspimicroSD slot - MOSI
2645IO45EPD_CSstrappingspiInternal - e-paper chip select
2746IO46EPD_DCstrapping-Internal - e-paper data/command
2847IO47EPD_RSTstrapping-Internal - e-paper reset
2948IO48EPD_BUSYstrapping-Internal - e-paper busy signal

Start with these

12 pins with no boot or system involvement
IO1EXIT_BTNIO2MENU_BTNIO4ROTARY_DOWNIO5ROTARY_PRESSIO6ROTARY_UPIO7EPD_POWERIO8HDRIO15HDRIO16HDRIO17HDRIO18HDRIO21HDR

Freely assignable - no strapping, flash, USB or JTAG duties. Ideal first picks for buttons, sensors and LEDs.

Fine - with a little care

sampled at boot or shared with debug/serial
PinLabelWhat to knowRole
IO0GPIO0Must be pulled high (default) or low (to enter UART download mode) at reset. Using it for other functions can interfere with boot mode configuration.Strapping
IO3GPIO3Sampled at reset to select JTAG interface (USB Serial/JTAG controller vs. external pins). Improper use can disable external JTAG or alter debug interface.Strapping
IO39MTCK (GPIO39)Default JTAG debugging TCK pin. If JTAG is needed, this pin must be free; it may also be used internally for PSRAM chip select on certain modules, so avoid repurposing it.Other
IO40MTDO (GPIO40)Default JTAG TDO output for debugging. Using it as GPIO will interfere with JTAG debugging functionality.Other
IO45GPIO45Determines flash/PSRAM power voltage (3.3 V vs 1.8 V) at boot. Must match hardware configuration; using as GPIO can upset flash supply setting.Strapping
IO46GPIO46Must be at a defined level during reset (with GPIO0) to select normal or download boot and UART/USB print mode. This pin is input-only (no output drive), so it should be left for its intended strapping function.Strapping

Only if you know the tricks

wired to flash or USB - expect a fight
PinLabelWhat to knowRole
IO9FSPIHDConnected to external flash (data/hold signal) on most modules. Not recommended for use as GPIO, since it must remain dedicated to flash communication.Flash
IO10FSPICS0Used to select the external flash chip. It is required for flash access and cannot be repurposed without losing flash connectivityFlash
IO11FSPIDUsed as a data line for flash (and in-package PSRAM). It should not be used as GPIO when the flash/PSRAM is in use.Flash
IO12FSPICLKDrives the flash (and PSRAM) clock. This critical signal must be reserved for memory and not used as general GPIO.Flash
IO13FSPIQUsed as a data line for flash/PSRAM transfers. Not available for other uses when flash/PSRAM is connected.Flash
IO14FSPIWPConnected to external flash (data/write-protect signal). Not recommended as GPIO because it’s reserved for flash operations.Flash
IO19USB_D-By default connected to the on-chip USB Serial/JTAG controller. Using it as general GPIO without reconfiguring IO MUX will interfere with USB functionality.USB
IO20USB_D+By default connected to the on-chip USB Serial/JTAG controller. Using it as general GPIO without reconfiguring IO MUX will interfere with USB functionality.USB
IO38FSPIWPOn flash-equipped chips, this pin is tied to the flash’s WP# (or D3) line. It should be avoided for other use, as it’s needed for flash operations.Flash
IO47SPICLK_PUsed only on variants with Octal SPI interface (e.g. ESP32-S3R16V) as part of the differential clock pair. On such chips it operates at 1.8 V and is reserved for the high-speed octal SPI clock, not for general GPIO use.Flash
IO48SPICLK_NUsed only on variants with Octal SPI interface, as the negative leg of the differential clock&. On such chips it operates at 1.8 V; it should be avoided for GPIO to prevent conflicts with the octal flash/PSRAM clock.Flash
These are recommendations, not hard rules - with the right pull-ups, timing and boot-state awareness most pins can be made to work. When in doubt, start green.
Pinout notes Across 29 pins, the Elecrow CrowPanel E-Paper 4.2 (ESP32-S3) exposes 28 GPIO. 6 of the exposed pins carry boot-time or system duties on the ESP32-S3 ( IO0 ,…

Across 29 pins, the Elecrow CrowPanel E-Paper 4.2 (ESP32-S3) exposes 28 GPIO.

6 of the exposed pins carry boot-time or system duties on the ESP32-S3 (IO0, IO3, IO39 and 3 more) - check the guidance above before wiring anything to them. IO1, IO2, IO4, IO5 and 8 more are free of any such role - the safest first picks.


The e-paper panel takes SPI on IO12 (CLK) / IO11 (MOSI) with IO45 (CS), IO46 (DC), IO47 (RST) and IO48 (BUSY). Critically, IO7 switches the display's power rail - it must be driven high before the panel responds at all, and a board that looks perfectly healthy over serial will show a blank screen until it is. This pin map is identical on both board revisions; only the controller behind the FPC differs.

Physical input sits on IO2 (Menu), IO1 (Exit) and the rotary switch on IO6/IO4/IO5 (up/down/press) - all active-low with pull-ups. The microSD slot runs its own SPI bus on IO39 (CLK), IO40 (MOSI), IO13 (MISO), IO10 (CS).

The 2x10 header exposes 3V3 and GND rails plus twelve free GPIOs - IO3, IO8, IO9, IO14, IO15, IO16, IO17, IO18, IO19, IO20, IO21 and IO38. That is enough for I2C plus a handful of sensors with no bus-sharing gymnastics, and unusually generous for a board of this size.

Getting started

flash your first firmware in ~2 minutes
Tool:
1
Connect over USB
Install your USB-serial driver (CH340 / CP210x) if no port appears. Not detected? Hold BOOT while plugging in.
2
Match & flash
Set the Tools options shown, then click Upload.
3
Verify it runs
The onboard LED on GPIO1 blinks - swap the pin if your board's LED differs.
Set these in Tools · leave everything else at default
Arduino IDE 2.x — Tools Copy
Board: "ESP32S3 Dev Module"
Flash Size: "8MB (64Mb)"
PSRAM: "QSPI PSRAM"
Partition Scheme: "8M with spiffs (3MB APP / 1.5MB SPIFFS)" (default)
Upload Speed: "921600"
▸ every other Tools option — leave at default
Board: ESP32S3 Dev Module
Flash Size: 8MB (64Mb)
PSRAM: QSPI PSRAM
Partition Scheme: 8M with spiffs (3MB APP / 1.5MB SPIFFS)
Upload Speed: 921600
Find it: Tools ▸ Board ▸ ESP32 Arduino ▸ ESP32S3 Dev Module
blink.ino Copy
// blink the onboard LED
void setup() {
  pinMode(1, OUTPUT);
}
void loop() {
  digitalWrite(1, HIGH); delay(500);
  digitalWrite(1, LOW);  delay(500);
}
board to selectesp32-s3-devkitc-1⧉ copy
platformio.ini Copy
[env:elecrow-crowpanel-epaper-4-2]
platform = espressif32
board = esp32-s3-devkitc-1
framework = arduino
monitor_speed = 115200
upload_speed = 921600
board_build.arduino.memory_type = qio_qspi
build_flags = -DBOARD_HAS_PSRAM
Find it: PlatformIO Home ▸ Boards, search esp32-s3-devkitc-1 — or type it after board =.
board to selectesp32-s3-devkitc-1⧉ copy
device.yaml Copy
esp32:
  board: esp32-s3-devkitc-1
  variant: 
  framework:
    type: esp-idf
psram:
  mode: quad
  speed: 80MHz

# blink - GPIO1
output:
  - platform: gpio
    pin: 1
    id: led_out
light:
  - platform: binary
    name: "LED"
    output: led_out
Find it: search ESPHome's board list for esp32-s3-devkitc-1 (same ids as PlatformIO).
esptool doesn't pick board settings — a prebuilt .bin already has them baked in. This is just the raw flash command.
terminal Copy
esptool.py --chip esp32s3 --port /dev/ttyACM0 \
  --baud 921600 write_flash 0x0 firmware.bin
--port = your /dev/tty* (macOS/Linux) or COMx (Windows).

Good to know

board-specific quirks worth 60 seconds
Two board revisions ship under one SKU illustration
Two board revisions ship under one SKU
Elecrow sells this board with two different display controllers under one listing: v1.0 uses an SSD1683 , v1.2 uses a UC8276C . They need different drivers - different command sets, different init sequences, different refresh mechanics. The revision is printed only on the PCB, next to the SKU, as pictured. Elecrow's wiki still documents the SSD1683 alone. A blank or garbled panel on an otherwise healthy…

Elecrow sells this board with two different display controllers under one listing: v1.0 uses an SSD1683, v1.2 uses a UC8276C. They need different drivers - different command sets, different init sequences, different refresh mechanics. The revision is printed only on the PCB, next to the SKU, as pictured. Elecrow's wiki still documents the SSD1683 alone.

A blank or garbled panel on an otherwise healthy board usually means the driver is set to the wrong revision. Our write-up covers how to tell them apart and what changes between them.

We wrote the ESPHome driver for this panel illustration
We wrote the ESPHome driver for this panel
Generic e-paper components do not drive this board under LVGL, so we rewrote the driver from scratch - correct DisplayBuffer inheritance, a non-blocking update state machine, and both board revisions supported by a single model key. It is open source as crowpanel_epaper , and the guide builds a full weather dashboard on it. Set full_update_every: 10 for frequently updating dashboards, or 9999 and trigger full…

Generic e-paper components do not drive this board under LVGL, so we rewrote the driver from scratch - correct DisplayBuffer inheritance, a non-blocking update state machine, and both board revisions supported by a single model key. It is open source as crowpanel_epaper, and the guide builds a full weather dashboard on it.

Set full_update_every: 10 for frequently updating dashboards, or 9999 and trigger full refreshes manually with force_full_update().

The display is dead until IO7 goes high illustration
The display is dead until IO7 goes high
IO7 switches the e-paper's power rail. Firmware must drive it high before the first SPI transaction, or the panel stays blank while every symptom points at a wiring or driver problem that is not there. It also means you can hard-cut display power in deep-sleep scenarios for extra savings. Check the IO7 rail before you start swapping driver settings - it produces the same blank screen as picking the wrong…

IO7 switches the e-paper's power rail. Firmware must drive it high before the first SPI transaction, or the panel stays blank while every symptom points at a wiring or driver problem that is not there. It also means you can hard-cut display power in deep-sleep scenarios for extra savings.

Check the IO7 rail before you start swapping driver settings - it produces the same blank screen as picking the wrong board revision.

Specifications

ESP32-S3
Compute
MCU
ESP32-S3
Clock
240 MHz
SRAM · Flash
512 KB · 8MB · 8MB PSRAM
Radio
Wi-Fi
802.11 b/g/n
Bluetooth
5.0 LE
Antenna
PCB
I/O
GPIO · ADC
28 · Two 12-bit, 20 Channels
UART · I²C · SPI
3 · 2 · 4
PWM
8 channels
Power
USB
USB-C
Serial
-
Boot address
0x0
Display
Screen
E-Paper · 4.2" · 400x300
Driver
SSD1683 (v1.0) / UC8276C (v1.2)
Touch
No
Flashing
Upload · OTA
esptool_py · esp_ota
Flash · Boot mode
- · -
Sketch · Data
- · -
The Elecrow CrowPanel E-Paper 4.2 (ESP32-S3) uses esptool_py for firmware uploads, esp_ota for over-the-air (OTA) updates.

About this board

Inside sits the ESP32-S3 - a dual-core Xtensa with vector extensions suited to AI workloads.

The $26.90 price tag is typical for an ESP32-S3 board.

With 28 GPIO broken out, you get more pins to play with than most ESP32-S3 boards offer.

Around the module: 8MB PSRAM, an E-Paper 4.2" 400x300 display, a microSD slot, a rotary encoder, battery charging via SH1.0-2P and Menu/Exit/Boot/Reset + rotary up/down/press buttons.


The Elecrow CrowPanel E-Paper 4.2 pairs an ESP32-S3-WROOM-1 N8R8 (8 MB flash, 8 MB PSRAM, up to 240 MHz) with a 400x300 black-and-white e-paper panel in a white acrylic case. It is the squarer, cheaper sibling of the 5.79" CrowPanel e-paper, and shares its input hardware, its connectors and most of its pin map.


One thing to know before you buy or write firmware: Elecrow has shipped this board with two different display controllers under the same product listing and the same SKU. v1.0 boards carry an SSD1683; v1.2 boards carry a UC8276C. The two need genuinely different drivers, and the revision is not printed on the listing or the box - only on the PCB itself. Everything else about the board is identical, which is why this page covers both.


The input hardware is the underrated part: besides Boot and Reset you get Menu and Exit buttons plus a three-way rotary switch (up/down/press), so menu-driven UIs work without any external controller. A microSD slot on its own SPI bus, an SH1.0 battery connector with charging, and a 2x10 header carrying 12 free GPIOs round it out - twice what the 5.79" exposes, and a genuinely generous allocation for a display board.


Where it fits: always-on dashboards, weather stations and status displays where an LCD's backlight is wrong, and where deep sleep between updates matters. E-paper holds its image at zero power, so a wake-update-sleep cycle gives battery life in weeks. It won't do video or smooth animation - that is e-paper physics, not a flaw. We wrote the ESPHome external component that drives it with full LVGL support, and later added support for the v1.2 controller, with partial refresh at 448 ms.

  • 4.2" 400x300 black-and-white e-paper (SSD1683 on v1.0 boards, UC8276C on v1.2)
  • ESP32-S3-WROOM-1 N8R8 - 8 MB flash, 8 MB PSRAM, up to 240 MHz
  • Menu and Exit buttons plus a three-way rotary switch (up/down/press) for controller-free UIs
  • 2x10 GPIO header with twelve free IOs - double what the 5.79" model exposes
  • microSD slot on a dedicated SPI bus
  • SH1.0 battery connector with onboard charging - built for deep-sleep battery projects
  • Full ESPHome + LVGL support via our open-source crowpanel_epaper external component
  • Partial refresh in 448 ms on v1.2 boards, with configurable full-refresh cadence to clear ghosting
  • White acrylic case included; demo firmware preloaded

FAQ

6 common questions
How do I tell whether I have a v1.0 or a v1.2 board?
Open the acrylic case and read the silkscreen next to the SKU on the back of the PCB - v1.2 boards are marked "V1.2" there. It is the only reliable method - the product listing, the box and the outside of the case say nothing, and Elecrow's own test (a green circular sticker on the back) does not hold, since v1.2 boards ship without it. If you are buying now you will most likely receive a v1.2.
Does the CrowPanel E-Paper 4.2 work with ESPHome?
Yes - using the crowpanel_epaper external component we published, which supports both board revisions with full LVGL support and partial refresh. Set model to "4.20in" on a v1.0 board or "4.20in-v1.2" on a v1.2 board. Everything else in the config, including the pin map, is identical between them.
Why is my display blank or garbled?
Two likely causes, in this order. First, IO7 gates power to the e-paper and must be pulled high before any SPI traffic - hand-rolled firmware that skips this gets a permanently blank panel that looks exactly like a driver bug. Second, if the power rail is on and the panel is still blank or garbled, you are probably driving the wrong controller; swap the model key between "4.20in" and "4.20in-v1.2" and reflash.
How fast does the screen update?
On a v1.2 board with our ESPHome component, a partial refresh takes 448 ms and a full refresh 1056 ms - measured on hardware. Partial updates accumulate mild ghosting, so a full refresh runs every N updates; the component exposes this as full_update_every and defaults to 10.
What is the difference from the 5.79" CrowPanel e-paper?
The 4.2" is 400x300 in a squarer aspect ratio, costs less, and exposes twelve free GPIOs on its header rather than six. The 5.79" gets you a wide 792x272 banner format driven by two SSD1683 controllers in a split configuration. Both are ESP32-S3 N8R8 boards with the same buttons, rotary switch and battery connector, and both are supported by the same crowpanel_epaper ESPHome component - only the model key and a couple of pins differ.
Can it run on battery?
That is the point of it. E-paper holds its image with zero power, so an ESP32-S3 deep-sleep cycle - wake, fetch data, update the display, sleep - gives battery life measured in weeks or months depending on update frequency. The SH1.0 connector has a charging circuit onboard.

Where to buy

prices are typical street prices
Elecrow CrowPanel E-Paper 4.2 (ESP32-S3)
Elecrow CrowPanel E-Paper 4.2 (ESP32-S3)
$26.90per unit, typical

Resources

Similar boards