Setup guide

Install Arduino IDE for ESP32 and Upload Your First Sketch

Install Arduino IDE 2, add the official esp32 board package, choose your board and port, then upload a Serial-only sketch. This first test needs no sensor, external wiring or onboard LED.

10 min read · Updated 2026-10-29

Arduino IDE setup screen with ESP32 board and USB cable
Jump to a section

Before you start

Supported example
Classic ESP32-WROOM-32/32E DevKit with USB-to-UART bridge, USB data cable and a computer supported by Arduino IDE 2. No external wiring needed.
Software
Arduino IDE 2.x; esp32 by Espressif Systems 3.x. Site API review baseline: 3.3.2, not a claim that it is the latest release. No extra libraries for the first sketch.
Other boards
Select the exact board/chip family and consult its USB and port settings. ESP32-C3/S2/S3 native USB can behave differently from the classic UART example.
Expected result
At 115200 baud, Serial Monitor prints ESP32 upload OK repeatedly. Instructions/API reviewed; not compiled, uploaded or hardware tested in this content review.

1. Install Arduino IDE 2

Download the installer for your operating system from https://www.arduino.cc/en/software and follow Arduino’s official installation instructions. On Windows run the installer; on macOS move the app to Applications; on Linux follow the download’s installation and serial-port permission instructions. This guide uses IDE 2 menu names.

Start Arduino IDE and create a new sketch. Use a supported computer/OS; do not assume old 32-bit Windows can run the current ESP32 toolchain.

2. Add the official Espressif board package

Open Preferences: File → Preferences on Windows/Linux, or the Arduino IDE menu on macOS. Add the stable index below to Additional boards manager URLs. Keep any existing URLs; add a separate entry rather than replacing them.

https://espressif.github.io/arduino-esp32/package_esp32_index.json

Open Boards Manager from the sidebar or Tools → Board → Boards Manager. Search esp32 and install esp32 by Espressif Systems. Use a stable 3.x release; 3.3.2 is this site’s API review baseline and can be selected when reproducing its examples. Record the installed version. Restart the IDE if board choices do not appear. The index URL downloads package metadata; it is not sketch code. You do not need the manual Git installation path for this beginner setup.

3. Connect USB and choose board and port

Leave external circuits disconnected and use a known USB data cable. A power LED alone does not prove the cable carries data. Wait for the USB device to appear.

Choose the exact supported board profile in the board selector or Tools → Board → esp32. For this generic classic WROOM example, use ESP32 Dev Module when no exact board profile is documented. Do not select it blindly for a C3/S2/S3 board. Leave flash/partition/USB settings at the documented board defaults.

Use Tools → Port or the board selector to choose the port that appears when you connect this board. On Windows it normally has a COM number; unplug/replug to identify it. A generic USB bridge can appear as an unknown board: select the board profile manually. On macOS/Linux use the corresponding serial device. Close other applications that hold the port.

Recorded board package and port selection

Explore the build photos and recorded results. Open any image to inspect the details.

About this recorded build

These supplied setup screenshots were captured in Arduino IDE 2.3.10 with esp32 by Espressif Systems 2.0.17 installed. The main instructions and example on this page retain the explicit Arduino-ESP32 3.3.2 review baseline.

Use the images to locate the settings, not as proof that a 3.x upload was tested. For the supplied Hello from ESP32 upload and Serial records, see the separate ESP32 with Arduino IDE reference; the first sketch below prints ESP32 upload OK.

Arduino IDE Preferences showing the Espressif ESP32 package index URL
Image 01

The supplied Preferences screenshot uses the Espressif package index URL shown in the setup instructions.

View full-size image
Boards Manager showing esp32 by Espressif Systems version 2.0.17 installed
Image 02

Recorded environment: Arduino IDE 2.3.10 and Espressif core 2.0.17. This is a legacy-core screenshot, not a record of the site’s 3.3.2 review baseline. Do not confuse the separate Arduino Nano ESP32 package with esp32 by Espressif Systems.

View full-size image
ESP32 Dev Module and COM7 selected in Arduino IDE board and port dialog
Image 03

ESP32 Dev Module and COM7 are selected for this supplied session. Choose the profile for your actual board; your COM number can differ.

View full-size image

4. Verify, upload and open Serial Monitor

Replace the new sketch with the complete example below and save it as esp32_first_upload. Click Verify (checkmark) to compile for the selected board. If compilation fails, read the first meaningful error; check the package and board before troubleshooting the cable.

Click Upload (arrow). This compiles and transfers the program. Wait for the IDE to finish successfully, then open Serial Monitor and set 115200 baud. The same message repeats once per second, so you can see it even if you opened the monitor after setup().

If you see the repeating message, upload and serial output are working. A power LED staying on is normal: this sketch does not control an LED. Next, follow the external LED tutorial’s exact wiring or the DevKit page’s optional GPIO16 test. No onboard GPIO2 LED is assumed.

Wiring and matching Arduino code

First upload: Serial-only test

USB data cable only. No LED or sensor wiring.

esp32_first_upload.ino
void setup() {
  Serial.begin(115200);
}

void loop() {
  Serial.println("ESP32 upload OK");
  delay(1000);
}

Expected output: ESP32 upload OK about once per second at 115200 baud. This is an expected result, not a hardware test record. The sketch uses basic Arduino APIs supported by the site’s 3.x baseline.

Windows USB detection: identify the bridge first

If no new port appears, test another data cable, a direct computer USB port and Device Manager while unplugging/replugging the board. Identify the USB-to-UART chip from its marking or hardware ID. A missing board package does not itself prevent a USB bridge from enumerating.

For CP210x, use the Silicon Labs VCP driver. For CH340/CH341 use the corresponding WCH package; CH9102 and other bridges may require their own driver. Follow the actual chip vendor’s supported Windows instructions rather than installing every driver or using an unrelated mirror. Some systems already have the driver.

Native USB boards do not automatically need CP210x/CH340 drivers. Use their board documentation for connector choice, USB CDC settings and changing ports after reset. Pressing BOOT does not fix a missing cable or driver.

Upload recovery on a classic BOOT/EN board

First check the selected port, close Serial Monitor/other serial programs, disconnect peripherals and try a reliable cable. If connecting fails, a lower Upload Speed such as 115200 may help an unreliable connection; it is separate from the sketch’s Serial Monitor baud.

On a classic UART DevKit with BOOT and EN buttons, automatic reset usually enters download mode. If it does not: hold BOOT, tap EN, start Upload, and release BOOT when writing begins. BOOT holds GPIO0 low during reset; EN resets the chip. After flashing, tap EN if the board remains in download mode.

Do not apply that sequence or classic strapping-pin rules universally to native USB C3/S2/S3 boards. Follow the exact board’s instructions and reselect its port if it changes.

Troubleshooting by symptom

  • No esp32 boards in Tools: check the stable index, network access and Boards Manager installation; restart the IDE.
  • No port: check data cable, connector and actual bridge driver before trying BOOT.
  • Port busy / access denied: close competing serial apps; on Linux follow official serial group/permission instructions.
  • Verify fails: confirm the selected chip family and package version; a compile error occurs before upload.
  • Failed to connect: check port and disconnected peripherals, then use the documented classic BOOT/EN recovery if appropriate.
  • Upload succeeds but no message: choose the correct port and 115200 baud, tap EN, and wait for the repeating line. Native USB may require different board settings.
  • Resets or hot board: unplug, remove peripherals, check shorts and use a sound cable/power source before retrying.

Next steps

Keep the board family, installed core version, selected port and working first sketch noted for future projects. Add one documented circuit at a time and repeat the simple Serial test when debugging.

FAQ

Technical references