ESP32-S Development Board


Powerful 32-bit processor with WiFi and Bluetooth capability.

26 in stock

SKU: DEV-16 Category: Tags: , ,


The ESP32-S Development Board is a powerful processor with WiFi and Bluetooth capability and is the next step up to the popular ESP8266 line of IOT processors.


  • ESP32-S Development Board


  • Microcontroller:      Xtensa LX6 32-bit
  • Clock Speed:             160MHz
  • USB Converter:        CP2102
  • USB Connector:       Micro USB
  • Flash Memory:         4 MB
  • RAM:                          512Kb
  • Digital I/O:                32 (26 usable)
  • PWM:                          16 channels
  • Analog Outputs:        2 channels, 8-bit
  • Analog Inputs:          16 channels, 12-bit
  • Communications:     3 Serial, 4 SPI,  2 I2C, CAN bus, I2S Stereo
  • Integrated Sensors: IR remote, Hall sensor, temperature sensor, touch sensors, pulse counter
  • Bluetooth:                  4.2 and BLE (Bluetooth Low Energy)
  • WiFi:                           Built-in 802.11 b/g/n  2.4GHz
  • Buttons:                      EN (Reset) and IO0 (Boot)
  • Programming:          Compatible with Arduino IDE
  • Pin Spacing:              0.1″ centers.  Breadboard compatible
  • Operating Voltage:   3.3V internal power and I/O.  5V-9V external power with on-board regulator

The ESP32 -S is a very flexible IOT board that is a significant superset of the popular ESP8266 line.  Compared to the ESP8266, it primarily adds significantly more I/O that is very flexible in its functionality as well as Bluetooth.  The downside is that being newer, the support is not as extensive as it is for the ESP8266 for some of the unique features such as using the hall effect sensor, IR remote or I2S buses, but items such as CAN bus and capacitive touch are supported in the Arduino IDE.

Besides the IDE, it can also be programmed using the Espressif IDF, Microphytoon, LUA and other programming environments.

Compared to the typical AVR processor of the standard Arduino it also has a larger 4 MB of Flash memory for program space and runs at clock speeds of 160 MHz and can sometimes optionally be overclocked to 240 MHz and therefore has a very fast processing speed.  These can be used as a stand-alone MCU in place of something like an Arduino or it can be used as a peripheral in conjunction with another MCU just to provide WiFi, Bluetooth or other unique capabilities that it has.

The board incorporates 2 pushbuttons.  One is labeled ‘EN‘ which is the Reset button.  The other button is labeled ‘IO0‘ which is also called the Boot button.  This button is used to download programs to the board as described in the example program section down below.

The  ESP32-S chip allows most of the I/O such as the serial ports and I2C to be multiplexed to any of the GPIO pins for flexibility.  The pinout shown in the attached drawing is the default pinout.

The 38-pin board is breadboard compatible and will leave one row of open contacts on each side of the board.

The I/O is labeled only on the bottom side of the board and a bit hard to read, so refer to the pinout drawing to figure out where things are.

Digital I/O

There are a total of 32 GPIO on the board that are brought out to the header pins.  The pins are labeled GPIOx.  When using with Arduino IDE, the digital pin number is the same as the GPIO pin number, so GPIO2 is referenced as just ‘2’.

The pins labeled ‘FLASH’ (GPIO6 – 11) down by the USB connector are tied to the on-board FLASH memory chip and it is recommended to not use them for any other purposes to avoid possible conflict.  That leaves 26 GPIO for general use.

Also note that GPIO 34, 35, 36 and 39 are input only pins and cannot be used for outputs.

All of the digital I/O support PWM and interrupts.  In addition they can be configured to have pull-up or pull-down resistors.  16 of the pins support hardware LED PWM.

The small blue on-board LED is connected to GPIO2.

The digital I/O is limited to 3.3V.  If using with 5V logic other than over the I2C bus, level translators should be used.

Analog I/O

There are two 12-bit analog-to-digital converters (ADC1 / ADC2) which can be multiplexed across up to 16 input pins.

There are two 8-bit digital-to-analog converters (DAC1 / DAC2).

Powering the Board

Internally, the board operates on 3.3V.

There are three mutually exclusive ways to provide power to the board.

  • Micro USB port through the USB cable
  • 5-9V applied to the VIN 5V pin
  • 3.3V applied to the VIN 3.3V pin

Operating current is about 130mA under normal operation and the maximum current draw per the datasheet is 500mA.  A red power LED is lit when power is applied.

The ESP32 can be placed into various low power modes when batter operated to maximize battery life.  The power LED draws about 3mA and can be removed to reduce that power draw if desired.

Please note that the board does not have power switching circuitry as a typical Arduino does, so ensure only one of these power options are used to power the board at one time or damage may result.

If programming the board in a system that also has VIN power, a USB cable can be modified by cutting the red 5V power wire inside the cable to make it a data-only cable.

Programming the Board

To communicate over USB, the board uses the CP2102 USB to UART bridge chip.  If you experience any issues with connecting to the board, you may need to download a driver for this chip.

Drivers can be downloaded at this link:

This is how the board will look in the Windows Device Manager window with the CP2102 driver installed and the board recognized by the system.  The ‘COM19’ will vary.

ESP32-S Device Manager

The board can be programmed in C using the Arduino IDE and is how the modules are most often used.  An example program is shown down below which scans for WiFi networks.  This program is downloaded into the board to test its basic functionality and will be installed in the board when you receive it.

There are many instructions for installing and using ESP32 based boards with the Arduino IDE, but here is a short version.

  1.  Open IDE File/Preferences window and in the Additional Board Manager URLs field enter the following:  If you already have links for other additional boards loaded, just open the window and add it as a new line to the end of the existing list as shown here.ESP32 Board Manager

2.  Under Tools/Boards/Boards Manager, you can now find and install “ESP32 by Espressif Systems” as shown below.ESP32 by Espressif Systems Board Install

3.  Under Tools/Boards select “ESP32 Dev Module“.

4.  Select the port that the board is attached to.  In my case it happened to be COM19

Here is what the Tools menu looks like on my setup.  Note that once the ESP32 board type is added to the IDE, there will be many more items added to the Tools drop down menu

ESP32-S Tools Menu

To test whether the board is basically working, plug the board into the USB and open the Serial Monitor Window.  In the Serial Monitor window, set comm rate to 115200 and line ending to Both NL & CR.

The board should power up and automatically start scanning for visible WiFi networks every 5 seconds and reporting what it finds to the Serial Monitor window.  It will turn on the blue LED while each scan is in process

If you don’t get any output:

  • Ensure that you have the USB cable plugged into the board and the red power light is on.
  • If the blue light is blinking every 5 seconds, the board is probably running OK but is not communicating with the PC.
  • Make sure that you have the correct COM Port selected.
  • Verify the serial monitor window is set to a baud rate of 115200 and the line ending is set to Both NL & CR.

Our Evaluation Results:

These modules have good overall build quality.

The micro USB connector has a very small footprint and solder pads which makes it popular for small boards where space is limited.  As with any board that uses the micro USB connector, some care should be taken not to put too much stress on the connector by pulling up on the USB cable or it is possible for the connector to be dislodged from the board.  Push straight in and pull straight out and you should be fine.

Downloading Software to the Board

ESP32-S EN CapacitorUnlike an Arduino, the board requires user intervention to download software to it.

When the download button is pushed in the IDE and after the compile completes successfully, the IDE will show ‘Connecting…‘  At that time, push and hold the button labeled ‘IO0‘ (Boot) until the download starts, then release the button.

Once the download is complete, the IDE will report ‘Leaving….  Hard resetting via RTS pin… ‘.  At that point the download is complete and the board should be running the program.

If you want to avoid having to push the button to download a program, a small 1-10uF capacitor can be connected between the EN/RESET pin and ground.

The program below is based on one of the sample programs ‘WiFiScan’ that is available once the ESP32 boards are loaded into the IDE.  It scans for WiFi networks and sends the list of networks found to the Serial Monitor window.

The version here also lights the built-in LED while a scan is in process.

ESP32 WiFi Scan Example Program

    This sketch demonstrates how to scan for WiFi networks.
    Scans for networks every 5 seconds and turns on the on-board LED during the scan
#include "WiFi.h"

const int LED_PIN = 2;
//  Initialization
void setup()

  // Set WiFi to station mode and disconnect from an AP if it was previously connected
  pinMode(LED_PIN, OUTPUT);
  Serial.println("Setup done");
//  Main
void loop()
  Serial.println("scan start");
  digitalWrite(LED_PIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  // WiFi.scanNetworks will return the number of networks found
  int n = WiFi.scanNetworks();
  Serial.println("scan done");
  if (n == 0) {
    Serial.println("no networks found");
  } else {
    Serial.println(" networks found");
    for (int i = 0; i < n; ++i) {
      // Print SSID and RSSI for each network found
      Serial.print(i + 1);
      Serial.print(": ");
      Serial.print(" (");
      Serial.println((WiFi.encryptionType(i) == WIFI_AUTH_OPEN) ? " " : "*");
  digitalWrite(LED_PIN, LOW);    // turn the LED off by making the voltage LOW
  // Wait a bit before scanning again

Before they are shipped, these modules are:

  • Inspected
  • Test program downloaded and correct WiFi scan verified
  • Repackaged in high quality resealable ESD bag for safe storage.


  1. None

Technical Specifications

Microcontroller Xtensa LX6 32-bit
Serial to USB Converter CP2102
Operating Voltage 3.3V
Input Voltage 3.3V or 5V
Digital I/O Pins 32 (26 usable)
PWM I/O Pins (Shared with Digital I/O) 16
Analog Input Pins 16 (12-bit)
DC Current per I/O Pin 10-40mA depending on total chip loading
Hardware Serial Ports (UARTS) 3
I2C Ports 2
SPI Ports 4
CAN Bus 1
I2S Audio Bus 2
Touch Sensor Inputs 10
Flash Memory 4 MBytes
ROM 448 KBytes
SRAM 520 KBytes
Clock Speed 160MHz
Network IEEE 802.11 b/g/n WiFi 2.4GHz
Bluetooth V4.2 BR/EDR and BLE
Built-in LED Attached to pin 2
USB Connector Style  Micro-B Female
Board Dimensions (L x W)  49 x 25.6mm  (1.93 x 1.0″)
Pin Spacing (row-to-row)  22.86mm  (0.9″)
Country of Origin China
Datasheet ESP32
Schematics (representative) ESP32 Dev Kit


Good explanation of the general pinout and peripherals of the ESP32.


You may also like…