Waveshare ESP32-P4-ETH is a small board with Espressif’s most powerful chip, the ESP32-P4 (2 RISC-V cores up to 400 MHz, 32 MB PSRAM), and Ethernet. It has MIPI connectors for a display and a camera, USB 2.0 High Speed, an audio codec with a microphone and a microSD slot. The 2 × 20 header follows the Raspberry Pi Pico layout: power and GND are in the same places, but the GPIO numbers differ.
The ESP32-P4 has no Wi-Fi or Bluetooth – networking here is Ethernet only. The PoE-ETH version also adds Power over Ethernet.
Specifications
- ESP32-P4NRW32: 2× RISC-V up to 400 MHz (360 MHz default) + low-power core, 32 MB PSRAM, 32 MB flash
- 100 Mbit Ethernet (IP101GRI), no Wi-Fi or Bluetooth
- 27 GPIO on the header: 9 analog inputs, 11 touch inputs, I2C, SPI, native USB (GPIO24/25)
- MIPI-DSI and MIPI-CSI (22 pins), USB 2.0 HS OTG, ES8311 audio codec with amplifier, microSD
- USB-C via a CH343P converter (UART0 and uploading)
- 78 × 21 mm
The pinout applies to revision Rev1.1 and is based on the Waveshare schematic. In Arduino, choose the “Waveshare ESP32-P4-POE-ETH” profile (same board) – I2C is on GPIO7/8, SPI SCK 27, MOSI 32, MISO 33, SS 46.
The board has three USB paths: USB-C goes only to the CH343P converter, native USB Serial/JTAG is on the header (GPIO24/25) and USB 2.0 High Speed is on the four-pin “USB” connector.
Pinout and pin table
Hover over a pin in the diagram or a table row; use the filter to highlight a bus. You can download the pinout as PNG or SVG.
| Pin | Name | Direction | UART | I2C | SPI | ADC | Touch | Note |
|---|---|---|---|---|---|---|---|---|
| 1 | GPIO54 | input/output | ADC2_CH5 | |||||
| 2 | GPIO19 | input/output | ADC1_CH3 | |||||
| 3 | GND | – | ||||||
| 4 | GPIO18 | input/output | ADC1_CH2 | |||||
| 5 | GPIO17 | input/output | ADC1_CH1 | |||||
| 6 | GPIO16 | input/output | ADC1_CH0 | |||||
| 7 | GPIO15 | input/output | T14 | |||||
| 8 | GND | – | ||||||
| 9 | GPIO14 | input/output | T13 | |||||
| 10 | GPIO6 | input/output | T5 | |||||
| 11 | GPIO5 | input/output | T4 | JTAG MTDO | ||||
| 12 | GPIO4 | input/output | T3 | JTAG MTMS | ||||
| 13 | GND | – | ||||||
| 14 | GPIO3 | input/output | T2 | JTAG MTDI | ||||
| 15 | GPIO2 | input/output | T1 | JTAG MTCK | ||||
| 16 | GPIO8 | input/output | SCL | T7 | I2C SCL – shared with the codec and the DISPLAY and CAMERA connectors, 2.2 kΩ pull-up | |||
| 17 | GPIO7 | input/output | SDA | T6 | I2C SDA – shared with the ES8311 audio codec (0x18) and the DISPLAY and CAMERA connectors, 2.2 kΩ pull-up | |||
| 18 | GND | – | ||||||
| 19 | GPIO24 | input/output | USB Serial/JTAG D− (native USB is on the header, not on USB-C) | |||||
| 20 | GPIO25 | input/output | USB Serial/JTAG D+ | |||||
| 21 | GPIO48 | input/output | VDD_IO_5 power domain – works only after enabling the internal LDO (channel 4) | |||||
| 22 | GPIO47 | input/output | VDD_IO_5 power domain – works only after enabling the internal LDO (channel 4) | |||||
| 23 | GND | – | ||||||
| 24 | GPIO46 | input/output | SS | SPI SS in Arduino. GPIO39–48 (VDD_IO_5) are powered by internal LDO channel 4 of the ESP32-P4, not 3.3 V – it is off after boot. Arduino turns it on automatically when the pin is used (3.3 V); in ESP-IDF, esp_ldo_acquire_channel(chan_id 4, 3300 mV). | ||||
| 25 | GPIO33 | input/output | MISO | |||||
| 26 | GPIO32 | input/output | MOSI | |||||
| 27 | GPIO27 | input/output | SCK | SPI SCK in Arduino; second USB Full Speed D+. | ||||
| 28 | GND | – | ||||||
| 29 | GPIO26 | input/output | Second USB Full Speed D− (PHY 2), otherwise GPIO. | |||||
| 30 | RUN | input | ESP32-P4 reset (CHIP_PU) – logic 0 holds the chip in reset | |||||
| 31 | GPIO23 | input/output | ADC1_CH7 | |||||
| 32 | GPIO22 | input/output | ADC1_CH6 | |||||
| 33 | GND | – | ||||||
| 34 | GPIO21 | input/output | ADC1_CH5 | |||||
| 35 | GPIO20 | input/output | ADC1_CH4 | ADC1_CH4. On the Raspberry Pi Pico this position is ADC_VREF – Pico expansion boards may not account for that. | ||||
| 36 | 3V3 | output | 3.3 V output from the MP1658 switching regulator (up to 3 A) | |||||
| 37 | 3V3_EN | input | 3.3 V supply enable (logic 0 = off) | |||||
| 38 | GND | – | ||||||
| 39 | VSYS | input/output | Board power 5 V (after the Schottky diode) | |||||
| 40 | VBUS | input/output | 5 V from USB-C (through an ideal diode) or from the PoE module |
Pins used on the board
These chip pins are used by parts on the board and are not broken out:
| Pin | Function on the board |
|---|---|
| GPIO0, 1 | Krystal 32,768 kHz |
| GPIO9–13 | Audio kodek ES8311 (I2S): DSDIN 9, LRCK 10, ASDOUT 11, SCLK 12, MCLK 13 |
| GPIO53 | Speaker amplifier enable (NS4150B) |
| GPIO28–31, 34, 35, 49–52 | Ethernet RMII (IP101GRI): CRS_DV 28, RXD0 29, RXD1 30, MDC 31, TXD0 34, TXD1 35, TX_EN 49, REF_CLK 50, reset PHY 51, MDIO 52 |
| GPIO35 | BOOT button and auto-reset (also RMII TXD1, strapping pin) |
| GPIO36 | 10 kΩ pull-up and test point TP5 (strapping pin) |
| GPIO37, 38 | UART0 to the CH343P converter (USB-C) |
| GPIO39–44 | Karta microSD: D0 39, D1 40, D2 41, D3 42, CLK 43, CMD 44 |
| GPIO45 | microSD card power (logic 0 = on) |
What to watch out for
- The GPIO are not 5V tolerant.
- GPIO46–48 are powered by the chip’s internal LDO – they only work once it is turned on (Arduino does this automatically).
- I2C (GPIO7/8) is shared by the audio codec and both MIPI connectors.
- The Pico’s ADC_VREF position carries GPIO20 – Pico add-on boards may not account for that.
- Espressif is replacing the ESP32-P4NRW32 chip (revision v1.x) with the P4NRW32X – newer units may have a different chip and require a newer arduino-esp32.
ESP32-P4 on chiptron.eu/
Projects and guides on chiptron.eu/:
- ESP32 chip comparison – when to choose the P4 (performance, camera, display) and when another chip
More pinouts
See all pinouts on the Pinouts page.