Documentation

ShillehTek ESP32-DevKitC-VE Dev Board PSRAM Presoldered 8MB Flash + 8MB PSRAM | ShillehTek Product Manual
Documentation / ShillehTek ESP32-DevKitC-VE Dev Board PSRAM Presoldered 8MB Flash + 8MB PSRAM | ShillehTek Product Manual

ShillehTek ESP32-DevKitC-VE Dev Board PSRAM Presoldered 8MB Flash + 8MB PSRAM | ShillehTek Product Manual

ESP32-WROVERmanualMicroPythonPSRAMshillehtek

Overview

The ESP32-DevKitC-VE is Espressif's reference development board for the ESP32-WROVER-E module — the "VE" version comes with a generous 8 MB of Flash plus 8 MB of external PSRAM, four times the RAM of a stock ESP32. That extra PSRAM is what makes this board the right pick for image buffers, audio processing, AI inference, large web servers, and projects that just keep crashing the standard 320 KB SRAM ESP32 boards.

Under the hood it's a dual-core Tensilica Xtensa LX6 running at up to 240 MHz with built-in Wi-Fi (2.4 GHz, 802.11 b/g/n) and Bluetooth Classic + LE. Most GPIO pins are broken out on two rows of 0.1" headers (pre-soldered on this version), with the standard ESP32 mix of 12-bit ADCs, capacitive touch, hardware SPI/I2C/UART, and PWM on every digital pin.

The board is supported in the Arduino IDE (via Espressif's ESP32 core), MicroPython, CircuitPython, and ESP-IDF. The on-board Micro USB connector goes through a CP2102 USB-to-Serial chip — no extra drivers needed on most modern systems.

At a Glance

MCU
ESP32-WROVER-E (Dual-Core)
Clock Speed
240 MHz
Flash / PSRAM
8 MB / 8 MB
Wireless
Wi-Fi + BT Classic + BLE
Logic Level
3.3V (NOT 5V tolerant)
USB
Micro USB (CP2102)

Specifications

Parameter Value
Module ESP32-WROVER-E
SoC ESP32-D0WD-V3 (32-bit Tensilica Xtensa LX6 dual-core)
Clock Frequency Up to 240 MHz
Flash Memory 8 MB SPI Flash
PSRAM 8 MB external SPI PSRAM
SRAM (on-chip) 520 KB
Wireless Wi-Fi 802.11 b/g/n (2.4 GHz), Bluetooth Classic + BLE
Operating Voltage 3.3V
Input Voltage 5V via USB or 5V pin
GPIO Logic Level 3.3V (NOT 5V tolerant)
Digital I/O Pins ~25 broken-out GPIO
Analog Input Channels Up to 18 (12-bit, ADC1 + ADC2)
Analog Output (DAC) 2 channels (8-bit, GPIO 25 / 26)
Capacitive Touch 10 channels
Communication I2C, SPI, UART, I2S, CAN, SDIO
USB-to-Serial CP2102
USB Connector Micro USB
Headers Pre-soldered male pins

Pinout Diagram

ESP32-DevKitC-VE pinout diagram showing all GPIO pins with alternate functions including ADC1/ADC2 channels, V_SPI / HSPI buses, U0/U2 TXD/RXD UART pins, Touch sensor channels, RTC GPIO, DAC1/DAC2 analog outputs on GPIO 25 and 26, EN reset pin, Boot pin, 3.3V and 5V power, and GND connections

Wiring Guide

LED + Push Button

The fastest way to verify the board: blink an external LED on a free GPIO and read a button via INPUT_PULLUP. Use a 220-330 ohm series resistor on the LED.

Component ESP32 Pin Details
LED Anode (long) GPIO 23 Through 220 ohm resistor
LED Cathode (short) GND
Button Terminal 1 GPIO 4 INPUT_PULLUP in code
Button Terminal 2 GND
Info: GPIOs 34, 35, 36, 39 are input-only and have no internal pull-up — wire an external 10k pull-up if you use them with a button.

I2C Sensor

The default I2C bus is GPIO 21 (SDA) and GPIO 22 (SCL). Most 3.3V breakouts (BME280, MPU6050, SSD1306, BH1750, ADS1115, etc.) connect with no level shifting.

Sensor Pin ESP32 Pin
VCC 3V3
GND GND
SDA GPIO 21
SCL GPIO 22
Warning: ESP32 GPIO is 3.3V only. For 5V I2C devices, use a logic level converter (TXS0108E, BSS138-based, etc.).

SPI Device

Hardware VSPI defaults to GPIO 18 (SCK), 19 (MISO), 23 (MOSI), and 5 (CS). Any free GPIO can serve as a chip select.

SPI Pin ESP32 Pin
VCC 3V3
GND GND
SCK GPIO 18
MISO GPIO 19
MOSI GPIO 23
CS / SS GPIO 5

UART / Serial

UART2 is broken out to GPIO 16 (RX) and GPIO 17 (TX) — use it for talking to GPS modules, fingerprint scanners, etc. UART0 (GPIO 1/3) is reserved for USB-Serial; don't repurpose unless you know what you're doing.

External Device ESP32 Pin
Device TX GPIO 16 (UART2 RX)
Device RX GPIO 17 (UART2 TX)
VCC 3V3 or 5V (match device)
GND GND (shared)
Warning: If your device powers from 5V and outputs 5V on its TX line, that 5V signal can damage the ESP32 RX pin. Use a level shifter or a resistive divider.

Code Examples

Arduino IDE - PSRAM Confirmation

esp32_wrover_psram.ino
// ESP32-DevKitC-VE - Confirm PSRAM is detected and usable
// Board: "ESP32 Dev Module"; under Tools -> PSRAM, select "Enabled"

void setup() {
  Serial.begin(115200);
  delay(500);

  Serial.print("Free heap:  "); Serial.println(ESP.getFreeHeap());
  Serial.print("Has PSRAM:  "); Serial.println(psramFound() ? "yes" : "no");
  Serial.print("PSRAM size: "); Serial.println(ESP.getPsramSize());
  Serial.print("Free PSRAM: "); Serial.println(ESP.getFreePsram());

  // Allocate a 1 MB buffer in PSRAM
  uint8_t* buf = (uint8_t*) ps_malloc(1024 * 1024);
  if (buf) {
    Serial.println("Allocated 1 MB in PSRAM");
    free(buf);
  } else {
    Serial.println("PSRAM allocation FAILED");
  }
}

void loop() {}

Arduino IDE - Wi-Fi Connect

esp32_wifi.ino
// ESP32-DevKitC-VE - join Wi-Fi and print IP

#include <WiFi.h>

const char* ssid = "YOUR_SSID";
const char* pass = "YOUR_PASSWORD";

void setup() {
  Serial.begin(115200);
  delay(500);
  WiFi.begin(ssid, pass);
  while (WiFi.status() != WL_CONNECTED) { delay(300); Serial.print("."); }
  Serial.println();
  Serial.print("IP: "); Serial.println(WiFi.localIP());
  Serial.print("RSSI: "); Serial.print(WiFi.RSSI()); Serial.println(" dBm");
}

void loop() { delay(5000); }

MicroPython - I2C Bus Scan

i2c_scan.py
# ESP32-DevKitC-VE - scan I2C bus for devices (MicroPython)
# Flash MicroPython for ESP32-WROVER from micropython.org

from machine import I2C, Pin
import time

i2c = I2C(0, sda=Pin(21), scl=Pin(22), freq=100_000)

while True:
    devices = i2c.scan()
    if devices:
        print("Found:", [hex(d) for d in devices])
    else:
        print("No I2C devices")
    time.sleep(2)

Frequently Asked Questions

Which board do I select in the Arduino IDE?
Install the "esp32" core by Espressif Systems via the Boards Manager. Then choose Tools > Board > "ESP32 Dev Module". Under Tools, set PSRAM to "Enabled" so the 8 MB external PSRAM is mapped at boot, and Flash Size to "8MB" to use the full Flash partition.
What's special about this board vs the standard ESP32?
The "VE" stands for the WROVER-E module, which adds 8 MB of external PSRAM (vs 0 MB on a standard WROOM ESP32) and 8 MB of Flash (vs 4 MB). That extra RAM is critical for camera buffers, large MQTT payloads, audio buffers, ML models, and any project that runs out of memory on a regular ESP32.
Are the GPIO pins 5V tolerant?
No. All ESP32 GPIO pins are 3.3V only. Driving 5V into any GPIO can damage the chip. Use a level shifter for 5V devices.
Can I use GPIO 6, 7, 8, 9, 10, 11?
No. Those pins are wired to the on-board SPI Flash and PSRAM and must not be driven by user code. They will not be broken out as usable GPIO on this board.
My computer doesn't see the board on USB.
First confirm your USB cable supports data, not just charging. The board uses a CP2102 USB-to-Serial chip; on most modern systems no extra driver is needed. If the port still doesn't appear, install Silicon Labs' CP210x VCP driver.
Why is GPIO 0 sometimes called BOOT?
GPIO 0 controls the chip's boot mode. Holding it LOW at power-on/reset enters download mode, which is how the IDE flashes new code. The on-board BOOT button does this automatically when uploading; in regular operation GPIO 0 can be used as a normal GPIO.
Can I use this board for ESP-NOW?
Yes. ESP-NOW is fully supported on the ESP32 with the standard Espressif Arduino core or ESP-IDF — and the extra PSRAM is helpful when you need to buffer many peer messages.

Related Tutorials