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.

The supplied Preferences screenshot uses the Espressif package index URL shown in the setup instructions.
View full-size image
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 are selected for this supplied session. Choose the profile for your actual board; your COM number can differ.
View full-size image4. 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.
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
No. This sketch prints a repeating Serial message and assumes no LED pin. Add a documented external LED circuit afterward.
Examples target Arduino-ESP32 3.x; 3.3.2 is the API review baseline, not a latest-version claim. Record your installed stable package version.
First check the cable and actual bridge driver. BOOT selects download mode on a classic board; it does not install a USB driver.
Technical references
- Arduino IDE download and installation — Official IDE 2 installation path.
- Espressif Arduino-ESP32 installation — Stable index, Boards Manager and board selection.
- ESP32-DevKitC hardware — Classic UART bridge, buttons and board-specific power options.
- Espressif boot mode selection — Manual download mode is specific to the classic board described.
- Silicon Labs CP210x drivers — Driver only for CP210x bridges.
- WCH CH340/CH341 drivers — Match the actual bridge; not a universal ESP32 driver.

