Skip to content

ESP-WROVER-KIT V3

Support for for Espressif ESP-WROVER-KIT V3 @author Gunar Schorcht gunar@schorcht.net

\section esp32_wrover_kit ESP-WROVER-KIT V3

Table of Contents

  1. Overview
  2. Hardware
    1. MCU
    2. Board Configuration
    3. Board Pinout
    4. Optional Hardware Configurations
  3. Flashing the Device
  4. On-Chip Debugging with the device
  5. Other Documentation Resources

Overview

The Espressif ESP-WROVER-KIT is a development board that uses the ESP32-WROVER module which includes a built-in 4 MByte SPI RAM. Most important features of the board are

  • Micro-SD card interface
  • OV7670 camera interface
  • 3.2” SPI LCD panel
  • RGB LED
  • USB bridge with JTAG interface
  • external 32.768 kHz crystal for RTC

Furthermore, many GPIOs are broken out for extension. The USB bridge based on FDI FT2232HL provides a JTAG interface for OCD debugging through the USB interface.

ESP-WROVER-KIT V3

Back to table of contents

Hardware

This section describes

Back to table of contents

MCU

Most features of the board are provided by the ESP32 SoC. For detailed information about the ESP32, see section esp32_mcu_esp32 “MCU ESP32”.

Back to table of contents

Board Configuration

ESP-WROVER-KIT has the following on-board components

  • Micro-SD card interface
  • OV7670 camera interface
  • 3.2” SPI LCD panel
  • RGB LED
  • USB bridge with JTAG interface
  • external 32.768 kHz crystal for RTC

The following table shows the default board configuration sorted according to the defined functionality of GPIOs for different hardware options. This configuration can be overridden by esp32_application_specific_configurations .

These abbreviations are used in subsequent tables:

SDC = SD-Card interface is used (module periph_sdmmc is enabled)\n CAM = Camera is plugged in/used

FunctionNoneSDCCAMSDC + CAMRemarksConfiguration
ADC_LINE(0)GPIO34GPIO34--CAMERA_D6esp32_adc_channels
ADC_LINE(1)GPIO35GPIO35--CAMERA_D7esp32_adc_channels
ADC_LINE(2)GPIO36GPIO36--CAMERA_D4esp32_adc_channels
ADC_LINE(3)GPIO39GPIO39--CAMERA_D5esp32_adc_channels
PWM_DEV(0):0 / LED0GPIO0GPIO0--LED_RED / CAMERA_RESETesp32_pwm_channels
PWM_DEV(0):1 / LED2GPIO4GPIO4--LED_BLUE / CAMERA_D0esp32_pwm_channels
LED1GPIO2GPIO2GPIO2GPIO2LED_GREEN
I2C_DEV(0):SCLGPIO27GPIO27GPIO27GPIO27CAMERA_SIO_Cesp32_i2c_interfaces
I2C_DEV(0):SDAGPIO26GPIO26GPIO26GPIO26CAMERA_SIO_Desp32_i2c_interfaces
UART_DEV(0):TXGPIO1GPIO1GPIO1GPIO1esp32_uart_interfaces
UART_DEV(0):RXGPIO3GPIO3GPIO3GPIO3esp32_uart_interfaces
SDMMC_DEV(0):CLKGPIO14GPIO14--SD-Cardesp32_sdmmc_interfaces
SDMMC_DEV(0):CMDGPIO15GPIO--SD-Cardesp32_sdmmc_interfaces
SDMMC_DEV(0):DAT0GPIO2GPIO2--SD-Cardesp32_sdmmc_interfaces
SDMMC_DEV(0):DAT1GPIO4GPIO4--SD-Cardesp32_sdmmc_interfaces
SDMMC_DEV(0):DAT2GPIO12GPIO--SD-Cardesp32_sdmmc_interfaces
SDMMC_DEV(0):DAT3GPIO13GPIO--SD-Cardesp32_sdmmc_interfaces
SPI_DEV(0):SCKGPIO14GPIO14GPIO14GPIO14HSPI: SD-Card / Peripheralsesp32_spi_interfaces
SPI_DEV(0):MOSIGPIO15GPIO15GPIO15GPIO15HSPI: SD-Card / Peripheralsesp32_spi_interfaces
SPI_DEV(0):CS0GPIO13GPIO13GPIO13GPIO13HSPI: SD-Card CSesp32_spi_interfaces
SPI_DEV(1)/LCD:SCKGPIO19GPIO19--VSPI: LCD / CAMERA_D3esp32_spi_interfaces
SPI_DEV(1)/LCD:MOSIGPIO23GPIO23--VSPI: LCD / CAMERA_HREFesp32_spi_interfaces
SPI_DEV(1)/LCD:MISOGPIO25GPIO25--VSPI: LCD / CAMERA_VSYNCesp32_spi_interfaces
SPI_DEV(1)/LCD:CS0GPIO22GPIO22--VSPI: LCD / CAMERA_PCLKesp32_spi_interfaces
LCD_LEDGPIO5GPIO5--CAMERA_D1
LCD_SCLGPIO19GPIO19--CAMERA_D3
LCD_MOSIGPIO23GPIO23--CAMERA_HREF
LCD_MISOGPIO25GPIO25--CAMERA_VSYNC
LCD_CSGPIO22GPIO22--CAMERA_PCLK
LCD_D/CGPIO21GPIO21--CAMERA_XCLK
LCD_RESETGPIO18GPIO18--CAMERA_D2
CAMERA_D0--GPIO4GPIO4
CAMERA_D1--GPIO5GPIO5
CAMERA_D2--GPIO18GPIO18
CAMERA_D3--GPIO19GPIO19
CAMERA_D4--GPIO36GPIO36
CAMERA_D5--GPIO39GPIO39
CAMERA_D6--GPIO34GPIO34
CAMERA_D7--GPIO35GPIO35
CAMERA_XCLK--GPIO21GPIO21
CAMERA_PCLK--GPIO22GPIO22
CAMERA_HREF--GPIO23GPIO23
CAMERA_VSYNC--GPIO25GPIO25
CAMERA_SIO_D--GPIO26GPIO26
CAMERA_SIO_C--GPIO27GPIO27
CAMERA_RESET--GPIO0GPIO0

Following table shows the default board configuration sorted by GPIOs depending on used hardware.

PinNoneSDC 4-bitCAMSDC 1-bit + CAMRemarks
GPIO0PWM_DEV(0):0 / LED0PWM_DEV(0):0 / LED0CAMERA_RESETCAMERA_RESET
GPIO1UART_DEV(0):TXUART_DEV(0):TXUART_DEV(0):TXUART_DEV(0):TX
GPIO2SPI_DEV(0):MISO / LED1SDMMC_DEV(0):DAT0SPI_DEV(0):MISOSDMMC_DEV(0):DAT0HSPI
GPIO3UART_DEV(0):RXUART_DEV(0):RXUART_DEV(0):RXUART_DEV(0):RX
GPIO4PWM_DEV(0):1 / LED2SDMMC_DEV(0):DAT1CAMERA_D0CAMERA_D0
GPIO5LCD LEDLCD_LEDCAMERA_D1CAMERA_D1
GPIO6Flash CLKFlash CLKFlash CLKFlash CLK
GPIO7Flash SD0Flash SD0Flash SD0Flash SD0
GPIO8Flash SD1Flash SD1Flash SD1Flash SD1
GPIO9
GPIO10
GPIO11Flash CMDFlash CMDFlash CMDFlash CMD
GPIO12SDMMC_DEV(0):DAT2
GPIO13SPI_DEV(0):CS0SDMMC_DEV(0):DAT3SPI_DEV(0):CS0HSPI / SPI SD-Card CS
GPIO14SPI_DEV(0):SCKSDMMC_DEV(0):CLKSPI_DEV(0):SCKHSPI
GPIO15SPI_DEV(0):MOSISDMMC_DEV(0):CMDSPI_DEV(0):MOSIHSPI
GPIO16N/AN/AN/AN/Asee below
GPIO17N/AN/AN/AN/Asee below
GPIO18LCD_RESETLCD_RESETLCD_RESETCAMERA_D2
GPIO19SPI_DEV(1)/LCD:SCKSPI_DEV(1)/LCD:SCKSPI_DEV(1)/LCD:SCKCAMERA_D3VSPI
GPIO21LCD_D/CLCD_D/CLCD_D/CCAMERA_XCLK
GPIO22SPI_DEV(1)/LCD:CSSPI_DEV(1)/LCD:CS0SPI_DEV(1)/LCD:CS0CAMERA_PCLKVSPI
GPIO23SPI_DEV(1)/LCD:MOSISPI_DEV(1)/LCD:MOSISPI_DEV(1)/LCD:MOSICAMERA_HREFVSPI
GPIO25SPI_DEV(1)/LCD:MISOSPI_DEV(1)/LCD:MISOSPI_DEV(1)/LCD:MISOCAMERA_VSYNCVSPI
GPIO26I2C_DEV(0):SDAI2C_DEV(0):SDAI2C_DEV(0):SDAI2C_DEV(0)/CAMERASIO_D:SDA
GPIO27I2C_DEV(0):SCLI2C_DEV(0):SCLI2C_DEV(0):SCLI2C_DEV(0)/CAMERASIO_C:SCL
GPIO32N/AN/AN/AN/Asee below
GPIO33N/AN/AN/AN/Asee below
GPIO34ADC_LINE(0)ADC_LINE(0)ADC_LINE(0)CAMERA_D6
GPIO35ADC_LINE(1)ADC_LINE(1)ADC_LINE(1)CAMERA_D7
GPIO36ADC_LINE(2)ADC_LINE(2)ADC_LINE(2)CAMERA_D4
GPIO39ADC_LINE(3)ADC_LINE(3)ADC_LINE(3)CAMERA_D5
\n

@note

  • SPI_DEV(0) uses the HSPI interface with the GPIO2 pin as the MISO signal. Since GPIO2 has bootstrapping functionality, it might be necessary to to press the Boot button for flashing RIOT when the SD card or the peripheral hardware is attached to this SPI interface.
  • GPIO0 cannot be used as SPI CS signal for external hardware connected to SPI_DEV(0). The reason for this is that the LEDs on this board are high-active and the default state of the LEDs after power-up causes a low level on the corresponding GPIO outputs.
  • GPIO2 cannot be used as PWM_DEV(0) channel 1 / LED0 when SPI_DEV(0) is used in any way. Reason is that GPIO2 is the MISO signal when SPI_DEV(0) is used and is therefore an input. PWM channels are outputs.
  • It might be necessary to remove the SD card or the peripheral hardware attached to the SPI_DEV(0) interface for flashing RIOT. Reason is that the SPI_DEV(0) interface uses the HSPI interface with the GPIO2 pin as the MISO signal, which has bootstrapping functionality.
  • GPIO16 and GPIO17 are used for the built-in SPI RAM and are not available on the I/O expansion connector, even though they are labeled there.
  • GPIO32 and GPIO33 are attached to a 32 kHz crystal by default. To make them available as a GPIO on the I/O expansion connector, SMD resistors would need to be removed and soldered. Module esp_rtc_timer_32k is enabled by default.

For detailed information about the configuration of ESP32 boards, see section Peripherals in esp32_riot.

Back to table of contents

Optional Hardware Configurations

MRF24J40-based IEEE 802.15.4 radio modules and ENC28J60-based Ethernet network interface modules have been tested with the board. You could use the following code in your esp32_application_specific_configurations “application-specific configuration” to use such modules:

#ifdef BOARD_ESP32_WROVER_KIT
#if MODULE_MRF24J40
#define MRF24J40_PARAM_CS GPIO9 /* MRF24J40 CS signal */
#define MRF24J40_PARAM_INT GPIO10 /* MRF24J40 INT signal */
#define MRF24J40_PARAM_RESET GPIO12 /* MRF24J40 RESET signal */
#endif
#if MODULE_ENC28J80
#define ENC28J80_PARAM_CS GPIO9 /* ENC28J80 CS signal */
#define ENC28J80_PARAM_INT GPIO10 /* ENC28J80 INT signal */
#define ENC28J80_PARAM_RESET GPIO12 /* ENC28J80 RESET signal */
#endif
#endif

For other parameters, the default values defined by the drivers can be used.

@note

  • Only a few GPIOs are available for external hardware on ESP-WROVER-KIT boards. Therefore, MRF24J40 and ENC28J60 based modules use the same GPIOs and only one of these modules can be used simultaneously.
  • The RESET signal of MRF24J40 and ENC28J60 based modules can also be connected to the RST pin of the board (see esp32_wrover_kit_pinout “pinout”) to keep the configured GPIO free for other purposes.

Back to table of contents

Board Pinout

The following picture shows the pinout of the ESP-WROVER-KIT V3 boards as defined by the default board configuration. The light green GPIOs are not used by configured on-board hardware components and can be used for any purpose. However, if optional off-board hardware modules are used, these GPIOs may also be occupied, see section esp32_wrover_kit_board_configuration for more information.

The corresponding board schematic can be found here.

ESP32-WROVER-KIT V3 Pinout

Flashing the Device

Flashing RIOT is quite straight forward. The board has a Micro-USB connector with reset/boot/flash logic. Just connect the board using the programming port to your host computer and type:

make flash BOARD=esp32-wrover-kit ...

The USB bridge is based on FDI FT2232HL and offers two USB interfaces:

  • the first interface is the JTAG interface for On-Chip debugging
  • the second interface is the console interface, which is also used for flashing

Therefore, you have to declare the USB interface in the make command. For example, if the ESP32-WROVER-KIT is connected to the host computer through the USB interfaces /dev/ttyUSB0 and /dev/ttyUSB1, the make command would be used as following:

make flash BOARD=esp32-wrover-kit PORT=/dev/ttyUSB1 ...

For detailed information about ESP32 as well as configuring and compiling RIOT for ESP32 boards, see esp32_riot.

Back to table of contents

On-Chip Debugging with the Device

Since the USB bridge based on FDI FT2232HL provides a JTAG interface for debugging through an USB interface, using ESP-WROVER-Kit V3 is the easiest and most convenient way for On-Chip debugging. Please refer the ESP-IDF Programming Guide for details on how to setup and how to use ESP-WROVER-Kit V3 and OpenOCD.

To use the JTAG interface, the esp_jtag module has to be enabled for compilation.

USEMODULE=esp_jtag make flash BOARD=esp32-wrover-kit ...

To flash and debug using OpenOCD, the precompiled version of OpenOCD for ESP32 has to be installed using the install script while being in RIOT’s root directory, see also section Using Local Toolchain Installation.

dist/tools/esptool/install.sh openocd

Before OpenOCD can then be used, the PATH variable has to be set correctly and the OPENOCD variable has to be exported using the following command.

. dist/tools/esptool/export.sh openocd

Once the PATH variable and the OPENOCD variable are set, OpenOCD can be used

  • to flash the application using command
    PROGRAMMER=openocd USEMODULE=esp_jtag make flash BOARD=esp32-wrover-kit ...
  • to start a debugging session (the board will be reset, but not flashed) using command
    PROGRAMMER=openocd USEMODULE=esp_jtag make debug BOARD=esp32-wrover-kit ...

by setting the PROGRAMMER variable to openocd.

Note: Even if the JTAG interface is used for debugging, the ESP32 standard method for flashing with esptool.py can still be used. In that case, the flash target is made without setting the PROGRAMMER variable.

Back to table of contents

Other Documentation Resources

There is a comprehensive Getting Started Guide for the ESP-WROVER-KIT with a lot information about hardware configuration.