Freenove ESP32-WROVER Board

Freenove's ESP32 development board built on Espressif's ESP32-WROVER-E module (4 MB flash, 8 MB PSRAM), with a camera connector, a microSD slot, a CH340 USB bridge and two 20-pin headers.

  • Module and coresESP32-WROVER-E (ESP32-D0WD-V3): dual-core Xtensa LX6, CPU clock adjustable from 80 to 240 MHz
  • Memory520 KB SRAM in the ESP32; 4 MB flash and 8 MB PSRAM in the module
  • RadiosWi-Fi 802.11 b/g/n 2.4 GHz and Bluetooth 4.2 (Classic and LE); PCB antenna
  • I/O voltage3.3 V logic; ESP32 power pins allowed at most 3.6 V, so pins are not 5 V tolerant
Freenove ESP32-WROVER Board, Freenove's ESP32 development board built on Espressif's ESP32-WROVER-E module (4 MB flash, 8 MB PSRAM), with a camera connector, a microSD slot, a CH340 USB bridge and two 20-pin headers.
In short

The Freenove ESP32-WROVER board carries Espressif's ESP32-WROVER-E module: two cores at up to 240 MHz, Wi-Fi, Bluetooth 4.2 (Classic and LE), 4 MB flash and 8 MB PSRAM (Freenove FNK0060 product page; ESP32-WROVER-E datasheet v2.4, p. 3). It adds a camera connector wired like Espressif's WROVER-KIT, a microSD slot in 1-bit mode, a CH340 USB-to-serial bridge and a blue LED on GPIO2 (Freenove pinout V3.0; C tutorial, p. 5). All I/O is 3.3 V; GPIO34 to 39 are input only, and GPIO16 and GPIO17 are not broken out because the PSRAM uses them.

Freenove's board is the ESP32 found in many starter kits: a classic ESP32 on the WROVER-E module, so it has the original chip's dual Xtensa LX6 cores, Bluetooth Classic and LE, two DACs and ten touch pins, plus 8 MB of PSRAM for camera frame buffers (ESP32-WROVER-E datasheet v2.4, p. 3). Freenove now sells it as the ESP32 DEV CAM with an OV2640 camera and a 1 GB card.

Both 20-pin headers are labelled with GPIO numbers. The camera connector uses GPIO4, 5, 18, 19, 21, 22, 23, 25, 26, 27, 34, 35, 36 and 39, the same assignment as Espressif's ESP-WROVER-KIT, so camera sketches use the CAMERA_MODEL_WROVER_KIT pin set; the microSD slot uses GPIO14 (CLK), GPIO15 (CMD) and GPIO2 (DATA) in 1-bit SDMMC mode (Freenove pinout V3.0).

USB goes through a CH340 bridge on GPIO1 and GPIO3, with TX and RX LEDs beside it (Freenove C tutorial, CH340 chapter; pinout V3.0). If an upload ever stalls on Connecting, hold BOOT (GPIO0) while it starts. Select ESP32 Wrover Module in Arduino and enable PSRAM for camera sketches.

Freenove ESP32-WROVER Board pinout

tinkered.ai/components/freenove-esp32-wroverFreenove ESP32-WR…3V33.3 VENReset · CHIP_PU36GPIO36 · ADC1_CH0 · Sensor_VP · Camera Y639GPIO39 · ADC1_CH3 · Sensor_VN · Camera Y734GPIO34 · ADC1_CH6 · Camera Y835GPIO35 · ADC1_CH7 · Camera Y932GPIO32 · ADC1_CH4 · Touch 9 · PWM33GPIO33 · ADC1_CH5 · Touch 8 · PWM25GPIO25 · DAC1 · ADC2_CH8 · Camera VSYNC · PWM26GPIO26 · DAC2 · ADC2_CH9 · Camera SIOD · PWM27GPIO27 · ADC2_CH7 · Touch 7 · Camera SIOC · PWM14GPIO14 · ADC2_CH6 · Touch 6 · HSPI CLK · SD CLK · PWM12GPIO12 · ADC2_CH5 · Touch 5 · HSPI MISO · PWMGNDGND13GPIO13 · ADC2_CH4 · Touch 4 · HSPI MOSI · PWM3V33.3 V3V33.3 V3V33.3 V5V5 V5V5 VGNDGND23GPIO23 · VSPI MOSI · Camera HREF · PWM22GPIO22 · I2C SCL · Camera PCLK · I2S DIN · PWM1GPIO1 · UART0 TX3GPIO3 · UART0 RX21GPIO21 · I2C SDA · Camera XCLK · PWMGNDGND19GPIO19 · VSPI MISO · Camera Y5 · PWM18GPIO18 · VSPI CLK · Camera Y4 · PWM5GPIO5 · VSPI CS · Camera Y3 · PWMGNDGNDGNDGND4GPIO4 · ADC2_CH0 · Touch 0 · Camera Y2 · PWM0GPIO0 · ADC2_CH1 · Touch 1 · BOOT button2GPIO2 · ADC2_CH2 · Touch 2 · LED · SD DATA · PWM15GPIO15 · ADC2_CH3 · Touch 3 · HSPI CS · SD CMD · PWMGNDGNDGNDGNDGNDGNDGNDGND
PinFunctionType
3V33.3 V3.3 Vpower out
ENReset, CHIP_PU3.3 Vinput
36GPIO36, ADC1_CH0, Sensor_VP, Camera Y63.3 V onlyinput
39GPIO39, ADC1_CH3, Sensor_VN, Camera Y73.3 V onlyinput
34GPIO34, ADC1_CH6, Camera Y83.3 V onlyinput
35GPIO35, ADC1_CH7, Camera Y93.3 V onlyinput
32GPIO32, ADC1_CH4, Touch 9, PWM3.3 V onlybidirectional
33GPIO33, ADC1_CH5, Touch 8, PWM3.3 V onlybidirectional
25GPIO25, DAC1, ADC2_CH8, Camera VSYNC, PWM3.3 V onlybidirectional
26GPIO26, DAC2, ADC2_CH9, Camera SIOD, PWM3.3 V onlybidirectional
27GPIO27, ADC2_CH7, Touch 7, Camera SIOC, PWM3.3 V onlybidirectional
14GPIO14, ADC2_CH6, Touch 6, HSPI CLK, SD CLK, PWM3.3 V onlybidirectional
12GPIO12, ADC2_CH5, Touch 5, HSPI MISO, PWM3.3 V onlybidirectional
GNDGNDpassive
13GPIO13, ADC2_CH4, Touch 4, HSPI MOSI, PWM3.3 V onlybidirectional
3V33.3 V3.3 Vpower out
3V33.3 V3.3 Vpower out
3V33.3 V3.3 Vpower out
5V5 V5 Vpower in
5V5 V5 Vpower in
GNDGNDpassive
23GPIO23, VSPI MOSI, Camera HREF, PWM3.3 V onlybidirectional
22GPIO22, I2C SCL, Camera PCLK, I2S DIN, PWM3.3 V onlybidirectional
1GPIO1, UART0 TX3.3 V onlyoutput
3GPIO3, UART0 RX3.3 V onlyinput
21GPIO21, I2C SDA, Camera XCLK, PWM3.3 V onlybidirectional
GNDGNDpassive
19GPIO19, VSPI MISO, Camera Y5, PWM3.3 V onlybidirectional
18GPIO18, VSPI CLK, Camera Y4, PWM3.3 V onlybidirectional
5GPIO5, VSPI CS, Camera Y3, PWM3.3 V onlybidirectional
GNDGNDpassive
GNDGNDpassive
4GPIO4, ADC2_CH0, Touch 0, Camera Y2, PWM3.3 V onlybidirectional
0GPIO0, ADC2_CH1, Touch 1, BOOT button3.3 V onlybidirectional
2GPIO2, ADC2_CH2, Touch 2, LED, SD DATA, PWM3.3 V onlybidirectional
15GPIO15, ADC2_CH3, Touch 3, HSPI CS, SD CMD, PWM3.3 V onlybidirectional
GNDGNDpassive
GNDGNDpassive
GNDGNDpassive
GNDGNDpassive

Freenove ESP32-WROVER Board code

Every example here compiles for its board.

No library needed
// Freenove ESP32-WROVER Board on Freenove ESP32-WROVER Board: wiring and a free simulation at https://www.tinkered.ai/components/freenove-esp32-wrover
// Freenove ESP32-WROVER board: Wi-Fi scan, blue LED on GPIO2 lit while scanning,
// and a reading of GPIO32 (ADC1, safe with Wi-Fi on). Serial Monitor at 115200.
#include <WiFi.h>

const int LED_PIN = 2;   // blue LED, HIGH = on
const int ADC_PIN = 32;  // ADC1_CH4, free even with the camera fitted

void setup() {
  Serial.begin(115200);
  pinMode(LED_PIN, OUTPUT);
  WiFi.mode(WIFI_STA);
  WiFi.disconnect();
  delay(100);
  Serial.println("Freenove ESP32-WROVER Wi-Fi scan");
  Serial.printf("PSRAM: %u bytes\n", (unsigned)ESP.getPsramSize());
}

void loop() {
  digitalWrite(LED_PIN, HIGH);
  int n = WiFi.scanNetworks();
  digitalWrite(LED_PIN, LOW);
  if (n <= 0) {
    Serial.println("No networks found");
  } else {
    Serial.printf("%d networks found:\n", n);
    for (int i = 0; i < n; i++) {
      Serial.printf("%2d  %-32s  %4d dBm  ch %2d  %s\n", i + 1, WiFi.SSID(i).c_str(), (int)WiFi.RSSI(i),
                    (int)WiFi.channel(i), WiFi.encryptionType(i) == WIFI_AUTH_OPEN ? "open" : "secured");
    }
  }
  WiFi.scanDelete();
  Serial.printf("GPIO32: %d mV\n\n", (int)analogReadMilliVolts(ADC_PIN));
  delay(10000);
}
Compiled for esp32:esp32:wrover on 2026-10-30

Before you wire it

Do
  • Select ESP32 Wrover Module (or enable PSRAM) so the 8 MB PSRAM is usable; camera sketches need it.
  • Use the CAMERA_MODEL_WROVER_KIT pin set for the camera connector on this board.
  • Keep GPIO12 low and GPIO0 high at reset to boot your sketch (ESP32 datasheet pp. 22 to 23).
  • Read analog signals on GPIO32 to GPIO39 (ADC1) in Wi-Fi sketches; ADC2 pins fail while Wi-Fi runs (ESP-IDF ADC guide).
  • Install the CH340 driver if no serial port appears (Freenove C tutorial, CH340 chapter).
Don’t
  • Never use GPIO34, 35, 36 or 39 as outputs: they are input only with no internal pull-ups.
  • Never use the camera's pins, including the default I2C pins GPIO21 and GPIO22, for other parts while the camera runs.
  • Never apply 5 V to any GPIO; the ESP32's I/O is 3.3 V.
  • Never pull GPIO12 high at reset with a sensor or module: the chip then selects 1.8 V flash and fails to boot.
  • With the camera fitted, the only free GPIOs are GPIO0, 2, 12, 13, 14, 15, 32 and 33, and the microSD slot uses 2, 14 and 15. Plan I2C sensors on GPIO32 and GPIO33 with Wire.begin(32, 33) or similar.
  • GPIO25 and GPIO26 are the ESP32's two 8-bit DACs, but on this board they are also the camera's VSYNC and SIOD lines.
  • GPIO16 and GPIO17 are reserved for the PSRAM on WROVER modules (Espressif ESP-WROVER-KIT guide) and do not reach the headers.
  • The headers carry three 3.3 V pins and two 5 V pins at the USB end, handy for powering several sensors on a breadboard.

Specifications

Module and cores
ESP32-WROVER-E (ESP32-D0WD-V3): dual-core Xtensa LX6, CPU clock adjustable from 80 to 240 MHzEspressif ESP32-WROVER-E datasheet v2.4, p. 3; Freenove FNK0060 product page
Memory
520 KB SRAM in the ESP32; 4 MB flash and 8 MB PSRAM in the moduleFreenove FNK0060 product page; ESP32 datasheet v5.3, p. 4; ESP32-WROVER-E datasheet v2.4, p. 3
Radios
Wi-Fi 802.11 b/g/n 2.4 GHz and Bluetooth 4.2 (Classic and LE); PCB antennaFreenove FNK0060 product page; Espressif ESP32-WROVER-E datasheet v2.4
I/O voltage
3.3 V logic; ESP32 power pins allowed at most 3.6 V, so pins are not 5 V tolerantEspressif ESP32 datasheet v5.3, p. 51
GPIO current
40 mA source (20 mA on VDD_SDIO pins) and 28 mA sink typical per pin at maximum drive; 1200 mA cumulative IO output currentEspressif ESP32 datasheet v5.3, pp. 51 to 52
USB
CH340 USB-to-serial bridge on UART0 (GPIO1 TX, GPIO3 RX); needs the CH340 driver on some systemsFreenove C tutorial, CH340 chapter, p. 5
ADC
Two 12-bit SAR ADCs, 18 channels on the ESP32; ADC1 on GPIO32 to 39 works with Wi-Fi, ADC2 does notESP32 datasheet v5.3, p. 43; ESP-IDF ADC oneshot guide
Camera and microSD
Camera connector on GPIO4, 5, 18, 19, 21, 22, 23, 25, 26, 27, 34, 35, 36, 39; microSD on GPIO14 (CLK), 15 (CMD), 2 (DATA)Freenove ESP32 WROVER pinout V3.0
LEDs and buttons
Blue LED on GPIO2; TX, RX and power LEDs; EN/RST and BOOT (GPIO0) buttonsFreenove ESP32 WROVER pinout V3.0

From the Freenove ESP32 WROVER Board repository: pinout V3.0 and C tutorial, published by Freenove (ESP32-WROVER-E module by Espressif).

Common mistakes

  1. Camera init fails

    The board uses the WROVER-KIT camera pin assignment, not the AI-Thinker one. Select CAMERA_MODEL_WROVER_KIT, enable PSRAM, and check the ribbon is fully inserted with the latch closed.

  2. I2C sensor stops the camera

    The ESP32's default I2C pins, GPIO21 and GPIO22, are the camera's XCLK and PCLK here. Move the sensor's I2C to GPIO32 and GPIO33 with Wire.begin(32, 33).

  3. analogRead() fails with Wi-Fi on

    GPIO0, 2, 4, 12 to 15 and 25 to 27 are ADC2 channels, which the Wi-Fi driver also uses. Use GPIO32 to GPIO39 for analog signals in connected projects.

  4. No serial port appears

    The CH340 bridge needs WCH's driver on older Windows and some macOS versions, and a charge-only cable shows nothing. Freenove ships the drivers in its repository's CH340 folder.

Freenove ESP32-WROVER Board questions

Which board do I select in the Arduino IDE?

ESP32 Wrover Module, which enables PSRAM. Freenove's own tutorial uses it for every example, including the camera web server.

What is the difference between WROVER and WROOM?

Both use the classic ESP32 chip; the WROVER module adds PSRAM, 8 MB on the WROVER-E (datasheet v2.4, p. 3), and uses GPIO16 and GPIO17 for it. That memory is what camera streaming and large buffers need; a WROOM board like the DevKit V1 has none but keeps GPIO16 and 17.

Which pins are free when the camera is connected?

GPIO0, 2, 12, 13, 14, 15, 32 and 33 (Freenove pinout V3.0). Of those, 0, 2, 12 and 15 are strapping pins and 2, 14, 15 serve the microSD slot, so GPIO13, 32 and 33 are the safest.

Does it have Bluetooth Classic?

Yes. The classic ESP32 on the WROVER-E module has Bluetooth 4.2 Classic and LE, so BluetoothSerial works, unlike on the ESP32-S2, S3, C3 or C6.

Freenove WROVER or AI-Thinker ESP32-CAM?

Both pair an ESP32 with PSRAM and an OV2640. The Freenove board has USB with auto-reset, more header pins and breadboard headers; the ESP32-CAM is smaller but needs a USB-serial adapter and leaves very few pins free.

Build something with the Freenove ESP32-WROVER Board

  • Camera web server

    Stream the OV2640 to a browser and save snapshots to the microSD card.

    Build this
  • Bluetooth serial bridge

    Send sensor readings to a phone over Bluetooth Classic serial.

    Build this
For AI assistants

This page as plain Markdown, for ChatGPT, Claude or your own agent. /components/freenove-esp32-wrover.md

What will you build with it?