← Back to the blog

ESP32 from Scratch: Arduino IDE Setup and First Program

Real ESP32 board and Arduino IDE serial monitor, first program

ESP32 from scratch: Arduino IDE setup and your first program

In this ESP32 from scratch tutorial for beginners, we document our real Arduino IDE setup: we identified a 30-pin ESP32 board, installed Espressif board support, selected COM3 and verified the first serial messages.

Hardware and tools

We used a generic 30-pin ESP32 development board, marked ESP-32 on the metal module and ESP32S on the rear, with Micro-USB, EN and BOOT buttons, and a Windows computer. The ESP32S marking on the rear does not mean this is an ESP32-S2 or S3. The USB-to-serial bridge appears to be from the CP210x family, but the exact model was not confirmed.

Our ESP32 board: front side, ESP-32 module, EN/BOOT buttons and Micro-USB.
Our ESP32 board: front side, ESP-32 module, EN/BOOT buttons and Micro-USB.
Rear ESP32S marking on the board used.
Rear ESP32S marking on the board used.

ESP32 from scratch: step-by-step Arduino IDE setup

1. Connect the board and detect the port

After connecting the board over USB, Arduino IDE showed COM3 Serial Port (USB), but could not find a board: “NO BOARDS FOUND”. A visible serial port does not mean the ESP32 compilation support is already installed.

COM3 visible, but no board found.
COM3 visible, but no board found.

2. Install the Espressif board package

In Boards Manager, we searched for “esp32” and chose esp32 by Espressif Systems, not Arduino ESP32 Boards. We installed version 3.3.12 and the console confirmed the platform was installed. The available version may differ when you follow this guide.

Boards Manager: Espressif package before installation.
Boards Manager: Espressif package before installation.
Espressif core 3.3.12 installed.
Espressif core 3.3.12 installed.

3. Select the correct board

Under Select Board → Select Other Board and Port, we chose ESP32 Dev Module and COM3. We did not select ESP32S2 Dev Module, ESP32S3 Dev Module, or ESP32P4 Dev Module, as those target different chip families. The status bar then showed “ESP32 Dev Module on COM3”.

Board search results: different ESP32 variants.
Board search results: different ESP32 variants.
ESP32 Dev Module on COM3.
ESP32 Dev Module on COM3.

4. Write and upload the first sketch

We saved the code as lab00_serial.ino, clicked Upload and waited. The console reached 100%, verified the data hash and displayed “Done uploading”. We did not need to press BOOT for this upload.

// Zwart Apps - ESP32 desde cero
// LAB 00: Primera comunicacion serie

void setup() {
  Serial.begin(115200);
  delay(1000);

  Serial.println("================================");
  Serial.println("ZWART APPS - ESP32 LAB 00");
  Serial.println("ESP32 iniciado correctamente");
  Serial.println("================================");
}

void loop() {
  Serial.println("Hola desde mi ESP32!");
  delay(2000);
}
Firmware flashing and verification completed.
Firmware flashing and verification completed.

5. Check the Serial Monitor

We opened Tools → Serial Monitor and selected 115200 baud. The startup banner appeared, followed by “Hola desde mi ESP32!” every two seconds. The second screenshot also shows normal boot lines such as POWERON_RESET and SPI_FAST_FLASH_BOOT.

Serial Monitor at 115200 baud with real output.
Serial Monitor at 115200 baud with real output.

Observed issues and solutions

  • No boards available: install esp32 by Espressif Systems. Detecting a serial port and recognizing a board are separate things.
  • Unreadable characters in the Serial Monitor: they appeared briefly in our first capture, followed by readable output. Boot messages or a temporary baud-rate mismatch are possible reasons; the exact cause was not verified. Check that the monitor is set to 115200 baud.
  • If another board stalls at “Connecting…”, holding BOOT as the connection starts and releasing it when flashing begins may help. This was not necessary in our test.

First ESP32 program: verified lab result

Successful real-world test: compiling, flashing, verification and serial reception were confirmed. The next lab will control an external LED using a GPIO, resistor and breadboard, once the kit contents are verified. A video covering this setup is planned but not yet published.