Elecrow CrowPanel Advance 5.0 (ESP32-P4)

5" 800x480 HMI touchscreen built on the ESP32-P4 with 32MB PSRAM - Wi-Fi 6 comes from an onboard ESP32-C6, and a socket takes optional Zigbee, LoRa or nRF24 radio modules.

2× USB-C Native USB
Elecrow CrowPanel Advance 5.0 (ESP32-P4) board
131 × 80 mm
ESP32-P4
RISC-V MCU
400MHz
clock
16MB
flash
768KB
SRAM
47· Two 12-bit, 14 Channels ADC
GPIO
Wi-Fi
radio
On this page

Pinout

47 pins
View:
Elecrow CrowPanel Advance 5.0 (ESP32-P4) pinout diagram
PinGPIOLabelsStatusCapabilitiesNotes
12IO2LCD_DEsafe-Internal - RGB panel data enable
23IO3LCD_PCLKsafe-Internal - RGB panel pixel clock (16MHz)
34IO4LCD_B7safe-Internal - RGB panel data
45IO5LCD_B6safe-Internal - RGB panel data
56IO6LCD_B5safe-Internal - RGB panel data
67IO7LCD_B4safe-Internal - RGB panel data
78IO8LCD_B3safe-Internal - RGB panel data
89IO9LCD_G7safe-Internal - RGB panel data
910IO10LCD_G6safe-Internal - RGB panel data
1011IO11LCD_G5safe-Internal - RGB panel data
1112IO12LCD_G4safe-Internal - RGB panel data
1213IO13LCD_G3safe-Internal - RGB panel data
1314IO14LCD_G2safe-Internal - RGB panel data
1415IO15LCD_R7safe-Internal - RGB panel data
1516IO16LCD_R6safe-Internal - RGB panel data
1617IO17LCD_R5safe-Internal - RGB panel data
1718IO18LCD_R4safe-Internal - RGB panel data
1819IO19LCD_R3safe-Internal - RGB panel data
1921IO21I2S_LRCKsafe-Internal I2S word clock to the NS4168 speaker amplifiers
2022IO22I2S_SCLKsafe-Internal I2S bit clock to the NS4168 speaker amplifiers
2123IO23I2S_SDOUTsafe-Internal I2S data out to the NS4168 speaker amplifiers
2224IO24MIC_CLKuart-Internal - PDM microphone clock
2325IO25MIC_DATAuart-Internal - PDM microphone data
2426IO26SPI_CLKsafespiOn the GPIO header - shared SPI clock for the display init interface and the wireless module socket
2527IO27UART3_TXuartuartUART3-IN port - the port also accepts 5V/2A power input
2628IO28UART3_RXuartuartUART3-IN port - the port also accepts 5V/2A power input
2729IO29GPIO_HDRsafe-Free GPIO on the 2x8 header - also routed to the wireless module socket
2830IO30GPIO_HDRsafe-Free GPIO on the 2x8 header - also the wireless module socket's BUSY line when a module is fitted
2931IO31GPIO_HDRuartuartFree GPIO on the 2x8 header - also wired to the wireless module socket as UART2 TX
3032IO32C6_RSTsafe-Reset line for the onboard ESP32-C6 radio (ESP-Hosted) - also routed to the GPIO header and module socket (UART2 RX), but leave it to the radio driver
3136IO36TP_RSTstrapping-Internal - GT911 touch controller reset
3237IO37TXD0strappinguartUART0 - flashing and logs via the CH340K USB-C port
3338IO38RXD0strappinguartUART0 - flashing and logs via the CH340K USB-C port
3439IO39SD_D0safe-microSD slot - data 0 (card select is hard-wired to GND)
3542IO42TP_INTsafe-Internal - GT911 touch controller interrupt
3643IO43SD_SCKsafe-microSD slot - clock
3744IO44SD_CMDsafe-microSD slot - command
3845IO45SDAsafei2cShared I2C bus - Crowtail I2C port, GT911 touch and the STC8 backlight controller (0x2F); add devices, don't repurpose
3946IO46SCLsafei2cShared I2C bus - same bus as IO45
4047IO47UART1_TXSPI_MOSIuartuart · spiCrowtail UART1 port and GPIO header, shared with the wireless module socket SPI - a DIP switch selects which is active
4148IO48UART1_RXuartuart · spiCrowtail UART1 port and GPIO header, shared with the wireless module socket SPI - a DIP switch selects which is active
4249IO49C6_SDIO_D3safe-Reserved - SDIO data to the onboard ESP32-C6 radio (ESP-Hosted link), not usable as GPIO
4350IO50C6_SDIO_D2safe-Reserved - SDIO data to the onboard ESP32-C6 radio, not usable as GPIO
4451IO51C6_SDIO_D1safe-Reserved - SDIO data to the onboard ESP32-C6 radio, not usable as GPIO
4552IO52C6_SDIO_D0safe-Reserved - SDIO data to the onboard ESP32-C6 radio, not usable as GPIO
4653IO53C6_SDIO_CLKsafe-Reserved - SDIO clock to the onboard ESP32-C6 radio, not usable as GPIO
4754IO54C6_SDIO_CMDsafe-Reserved - SDIO command to the onboard ESP32-C6 radio, not usable as GPIO

Start with these

42 pins with no boot or system involvement
IO2LCD_DEIO3LCD_PCLKIO4LCD_B7IO5LCD_B6IO6LCD_B5IO7LCD_B4IO8LCD_B3IO9LCD_G7IO10LCD_G6IO11LCD_G5IO12LCD_G4IO13LCD_G3IO14LCD_G2IO15LCD_R7IO16LCD_R6IO17LCD_R5IO18LCD_R4IO19LCD_R3IO21I2S_LRCKIO22I2S_SCLKIO23I2S_SDOUTIO26SPI_CLKIO27UART3_TXIO28UART3_RXIO29GPIO_HDRIO30GPIO_HDRIO31GPIO_HDRIO32C6_RSTIO39SD_D0IO42TP_INTIO43SD_SCKIO44SD_CMDIO45SDAIO46SCLIO47UART1_TXIO48UART1_RXIO49C6_SDIO_D3IO50C6_SDIO_D2IO51C6_SDIO_D1IO52C6_SDIO_D0IO53C6_SDIO_CLKIO54C6_SDIO_CMD

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
IO36GPIO36Sampled at reset for boot mode and log output; driving it at boot can change the boot mode or silence/enable ROM logs. Free after reset.Strapping
IO37GPIO37Sampled at reset as a boot-mode strap; avoid holding it at a fixed level during boot unless intentionally configuring boot mode. Free after reset.Strapping
IO38GPIO38Sampled at reset as a boot-mode strap; avoid holding it at a fixed level during boot unless intentionally configuring boot mode. Free after reset.Strapping

Only if you know the tricks

wired to flash or USB - expect a fight
PinLabelWhat to knowRole
IO24USB_D- (GPIO24)Enabled as USB by default (used for flashing and console); using it as GPIO requires disabling/reconfiguring the USB Serial/JTAG function.USB
IO25USB_D+ (GPIO25)Enabled as USB by default (used for flashing and console); using it as GPIO requires disabling/reconfiguring the USB Serial/JTAG function.USB
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 All 47 pins on the Elecrow CrowPanel Advance 5.0 (ESP32-P4) are usable GPIO. Peripheral wiring is straightforward: I²C is mapped to SDA on GPIO45 and SCL on…

All 47 pins on the Elecrow CrowPanel Advance 5.0 (ESP32-P4) are usable GPIO.

Peripheral wiring is straightforward: I²C is mapped to SDA on GPIO45 and SCL on GPIO46.

3 of the exposed pins carry boot-time or system duties on the ESP32-P4 (IO36, IO37 and IO38) - check the guidance above before wiring anything to them. IO2, IO3, IO4, IO5 and 38 more are free of any such role - the safest first picks.


Most of the P4's pins are spoken for by the display: the 800x480 panel runs on a 16-bit RGB565 parallel bus (IO4-IO19 data, DE on IO2, PCLK on IO3, HSYNC/VSYNC on IO40/IO41). User I/O comes out through the ports instead: a Crowtail I2C port on IO45/IO46, a Crowtail UART1 port on IO47/IO48, a UART3-IN port on IO27/IO28 that doubles as a 5V/2A power input, and a 2x8 GPIO header carrying 3V3/5V rails plus IO26, IO29, IO30, IO31, IO32, IO47 and IO48 - of which only IO29, IO30 and IO31 are truly free general-purpose pins.

The I2C bus on IO45/IO46 is shared with the GT911 touch controller and the STC8 housekeeping MCU (address 0x2F) that controls the backlight - add devices to it, don't repurpose the pins. IO26/IO47/IO48 are likewise shared with the wireless module socket's SPI bus, selected by a DIP switch on the back: module mode and UART1 mode are mutually exclusive. The socket also routes the I2C bus and IO29-IO32, so header pins stop being free once a radio module is plugged in.

The onboard ESP32-C6 radio occupies IO49-IO54 as a dedicated SDIO link plus IO32 for reset - those pins are not available for your own use. The microSD slot sits on IO39/IO43/IO44 (card select is hard-wired), audio I2S is on IO21-IO23 and the PDM mic on IO24/IO25. UART0 flashing and logs go through the CH340K USB-C port.

Getting started

flash your first firmware in ~2 minutes
Tool:
1
Connect over USB
Native USB - shows up as a port right away, no driver needed. 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 GPIO2 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: "ESP32P4 Dev Module"
USB CDC On Boot: "Enabled"
Flash Size: "16MB (128Mb)"
PSRAM: "QSPI PSRAM"
Partition Scheme: "16M Flash (3MB APP / 9.9MB FATFS)" (default)
Upload Speed: "921600"
▸ every other Tools option — leave at default
Board: ESP32P4 Dev Module
USB CDC On Boot: Enabled
Flash Size: 16MB (128Mb)
PSRAM: QSPI PSRAM
Partition Scheme: 16M Flash (3MB APP / 9.9MB FATFS)
Upload Speed: 921600
Find it: Tools ▸ Board ▸ ESP32 Arduino ▸ ESP32P4 Dev Module
blink.ino Copy
// blink the onboard LED
void setup() {
  pinMode(2, OUTPUT);
}
void loop() {
  digitalWrite(2, HIGH); delay(500);
  digitalWrite(2, LOW);  delay(500);
}
board to selectesp32dev⧉ copy
platformio.ini Copy
[env:elecrow-crowpanel-advance-5-esp32-p4]
platform = espressif32
board = esp32dev
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 esp32dev — or type it after board =.
board to selectesp32dev⧉ copy
device.yaml Copy
esp32:
  board: esp32dev
  variant: 
  framework:
    type: esp-idf
psram:
  mode: quad
  speed: 80MHz

# blink - GPIO2
output:
  - platform: gpio
    pin: 2
    id: led_out
light:
  - platform: binary
    name: "LED"
    output: led_out
Find it: search ESPHome's board list for esp32dev (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 esp32p4 --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
Wi-Fi 6 rides on an onboard ESP32-C6 illustration
Wi-Fi 6 rides on an onboard ESP32-C6
The P4 talks to an ESP32-C6-MINI-1 over a dedicated SDIO link ( IO49 - IO54 , reset on IO32 ) running ESP-Hosted firmware. In ESPHome this is the esp32_hosted component; in ESP-IDF and Arduino the hosted driver makes Wi-Fi look native. The C6 ships pre-programmed at the factory - per Elecrow's own wiki, it can't be reprogrammed directly through the P4. Some users report Wi-Fi dropping after a few minutes on the…

The P4 talks to an ESP32-C6-MINI-1 over a dedicated SDIO link (IO49-IO54, reset on IO32) running ESP-Hosted firmware. In ESPHome this is the esp32_hosted component; in ESP-IDF and Arduino the hosted driver makes Wi-Fi look native. The C6 ships pre-programmed at the factory - per Elecrow's own wiki, it can't be reprogrammed directly through the P4. Some users report Wi-Fi dropping after a few minutes on the stock ESP-Hosted firmware (v2.3.0), needing a power cycle to recover; the UART pads for a direct fix aren't populated on the board, though a community-built OTA workaround exists.

If Wi-Fi is flaky or the board resets when the link comes up, drop sdio_frequency from the default 40MHz to 10-20MHz - Elecrow's own ESPHome example runs the link at 10MHz for stability.

The module socket and UART1 share pins illustration
The module socket and UART1 share pins
Like the rest of the Advance series, there's a socket on the back for optional radio modules - ESP32-H2 (Zigbee/Thread), LoRa , nRF2401 or Wi-Fi HaLow . The socket's SPI bus ( IO26 / IO47 / IO48 ) shares pins with the Crowtail UART1 port, and a DIP switch selects which one is wired up. If UART1 (or a Crowtail sensor on it) has gone dead, check the function DIP switch first - in module mode those pins…

Like the rest of the Advance series, there's a socket on the back for optional radio modules - ESP32-H2 (Zigbee/Thread), LoRa, nRF2401 or Wi-Fi HaLow. The socket's SPI bus (IO26/IO47/IO48) shares pins with the Crowtail UART1 port, and a DIP switch selects which one is wired up.

If UART1 (or a Crowtail sensor on it) has gone dead, check the function DIP switch first - in module mode those pins belong to the socket.

The backlight is an I2C command, not a PWM pin illustration
The backlight is an I2C command, not a PWM pin
Backlight brightness is handled by a small STC8 housekeeping MCU , not a P4 GPIO: you write register 0x20 with a value of 0-100 to I2C address 0x2F on the shared bus ( IO45 / IO46 ). The same chip drives the touch controller's reset. Elecrow's examples do this in an on_boot lambda - without that write the panel stays dark even though your firmware is running fine. A black screen after a successful flash…

Backlight brightness is handled by a small STC8 housekeeping MCU, not a P4 GPIO: you write register 0x20 with a value of 0-100 to I2C address 0x2F on the shared bus (IO45/IO46). The same chip drives the touch controller's reset. Elecrow's examples do this in an on_boot lambda - without that write the panel stays dark even though your firmware is running fine.

A black screen after a successful flash usually means the backlight command never ran - check the serial log over UART0 before debugging the display driver itself.

Specifications

ESP32-P4 · 131 × 80 mm
Compute
MCU
ESP32-P4 · RISC-V
Clock
400 MHz
SRAM · Flash
768 KB · 16MB · 32MB PSRAM
Radio
Wi-Fi
-
Bluetooth
-
Antenna
PCB (ESP32-C6-MINI-1)
I/O
GPIO · ADC
47 · Two 12-bit, 14 Channels
UART · I²C · SPI
5 · 2 · 4
PWM
8 channels
Power
USB
USB-C (UART) · USB-C (native)
Serial
CH340K
Boot address
0x2000
Display
Screen
IPS LCD · 5.0" · 800x480
Driver
-
Touch
GT911
Flashing
Upload · OTA
esptool_py · esp_ota
Flash · Boot mode
- · -
Sketch · Data
- · -
80 mm131 mm
131 × 80 mm
The Elecrow CrowPanel Advance 5.0 (ESP32-P4) uses esptool_py for firmware uploads, esp_ota for over-the-air (OTA) updates.

About this board

Around the module: 32MB PSRAM, an IPS LCD 5.0" 800x480 display with touch, a microSD slot, a microphone (PDM MEMS), a speaker (2x 3W 4 Ohm), an amplifier (2x NS4168), battery charging (TP4059) via PH2.0-2P, status LEDs (Power, Charge) and Boot/Reset buttons.


The Elecrow CrowPanel Advance 5.0 ESP32-P4 is the CrowPanel Advance formula with the controller swapped out. We've spent real time with this series - see our review of the ESP32-S3 CrowPanel Advance 7.0, and our three-generation CrowPanel comparison for how it stacks up against this board - and the format held up well: decent IPS panel, tidy Crowtail ports, and the clever swappable radio module socket. The consistent ceiling was the ESP32-S3 itself, which starts wheezing once an LVGL interface gets busy. This board answers that with an ESP32-P4: dual RISC-V cores at 400 MHz, 16 MB flash and 32 MB of PSRAM - four times what the S3 versions had to work with.


The P4 brings a wrinkle the S3 boards didn't have: no radio at all. Wi-Fi comes from an onboard ESP32-C6 over an SDIO link running ESP-Hosted firmware, which gets you 2.4 GHz Wi-Fi 6 and works transparently enough in ESP-IDF and ESPHome. Bluetooth 5.3 is on the spec sheet, but the hosted stack is Wi-Fi first - plan as if BLE isn't there. The module socket is the same one we plugged ESP32-H2 and nRF24 modules into on the 7.0, so Zigbee, Thread, LoRa or Wi-Fi HaLow remain a module away.


The "AI display" angle is more than marketing this time: two 3W speakers, a PDM microphone, and a MIPI-CSI camera header (2MP camera sold separately) that the P4's ISP and H.264 encoder can actually feed - voice-assistant panels and camera experiments are realistic here, not aspirational. A microSD slot, GPIO header and PH2.0 battery connector with charging round out the I/O.


Our honest read: this is first-wave P4 hardware. Current units ship engineering-sample silicon, ESP-IDF is the primary path, Arduino support leans on Elecrow's prepared package, and you'll copy their worked examples rather than wire things up from library docs. At around $43 it's one of the cheapest ways to get a P4 with a screen attached - but if you just need a dependable HMI today and 8 MB of PSRAM is enough, the S3-based CrowPanels are the more boring, safer buy.

  • 5" 800x480 IPS panel (400 cd/m2) on a 16-bit RGB565 parallel bus, with GT911 5-point capacitive touch
  • 2.4 GHz Wi-Fi 6 via onboard ESP32-C6-MINI-1 running ESP-Hosted over SDIO (Bluetooth 5.3 on paper, Wi-Fi-first in practice)
  • Wireless module socket for optional ESP32-H2 (Zigbee/Thread), LoRa, nRF2401 or Wi-Fi HaLow modules, DIP-switch shared with UART1
  • Dual 3W speakers on two NS4168 I2S amplifiers plus a PDM microphone for voice-assistant builds
  • MIPI-CSI camera header - optional 2MP camera, backed by the P4's ISP for face detection and object tracking
  • 32 MB PSRAM and 16 MB flash - LVGL at 800x480 fits comfortably
  • Two USB-C ports - UART0 flashing/logs via CH340K, plus native USB 2.0 (also used for supplementary power)
  • Crowtail I2C and UART ports, 2x8 GPIO header (IO26, IO29-IO32, IO47, IO48 + 3V3/5V rails), microSD (TF) slot
  • PH2.0 battery connector with TP4059 charging (430mA max) and a power switch
  • STC8 housekeeping MCU handles backlight brightness (I2C, address 0x2F) and touch reset
  • Boot and Reset buttons; -20 to 70 degrees C operating range

FAQ

6 common questions
Does the CrowPanel Advance 5.0 ESP32-P4 work with ESPHome?
Yes - Elecrow publishes an official ESPHome tutorial and a working example config. It needs the ESP-IDF framework with the `engineering_sample` flag enabled (current boards ship engineering-sample P4 silicon), the `esp32_hosted` component pointing at the onboard ESP32-C6 for Wi-Fi, and the display configured as a custom `mipi_rgb` panel. Copy Elecrow's example from GitHub rather than starting from scratch - the display timings and the backlight quirk are already solved there.
Does it have Bluetooth?
Treat it as Wi-Fi only for now. The ESP32-P4 has no radio, and while the onboard ESP32-C6 silicon supports Bluetooth 5.3, the ESP-Hosted firmware link between the chips is Wi-Fi focused - BLE is not exposed in ESPHome and support elsewhere depends on the ESP-Hosted stack's progress.
How is this different from the ESP32-S3 CrowPanel Advance 5.0?
Same screen and form factor, much more compute. The P4 brings dual RISC-V cores at 400 MHz, 32 MB PSRAM (vs 8 MB), Wi-Fi 6 via the onboard C6, a MIPI-CSI camera header and better audio hardware. The trade-off is maturity - the S3 version has broader Arduino/library support and no engineering-sample caveats, so pick the S3 for straightforward HMI work and the P4 when you need the extra memory, the camera, or on-device AI features.
How do I program it?
Over the UART0 USB-C port, which goes through a CH340K serial chip - Arduino (Elecrow's board package), ESP-IDF, MicroPython and ESPHome are all documented. One gotcha - a single computer USB port may not deliver enough current, and the screen can go black under load; plug the second (USB 2.0) port in for power at the same time, or feed 5V/2A into the UART3-IN port.
Is a camera included?
No - the standard board ships without a camera. There's a MIPI-CSI header on the back that takes Elecrow's optional 2MP camera module, which the P4's ISP and H.264 encoder can use for face-recognition and object-tracking demos.
Can it do Zigbee or Thread?
Not out of the box. The onboard ESP32-C6 is locked into Wi-Fi duty via ESP-Hosted firmware. Zigbee and Thread come from the optional ESP32-H2 plug-in module for the wireless socket - flip the function DIP switch to the module position, which takes the UART1 port out of action while a module is in use.

Where to buy

prices are typical street prices
Elecrow CrowPanel Advance 5.0 (ESP32-P4)
Elecrow CrowPanel Advance 5.0 (ESP32-P4)
$42.90per unit, typical
As an Amazon Associate, ESPboards earns from qualifying purchases.

Resources

Similar boards