ESP32 Quick Start Guide

Your ESP32 Kit is Open.
Now What?

Three paths. All free. Pick the one that matches your style.

~15 minutes · Choose your path

Choose your path

Fastest

AI + CLI

AI controls your board directly. No IDE, no copy-paste. Just plain English sentences.

Tools: Claude Code, Cursor, Windsurf
IDE: Not needed
Cost: Free tier — $20/mo
Time: ~8 min
Start ↓
Recommended

AI + Arduino IDE

AI generates the code, you copy-paste it into Arduino IDE and upload. 100% free.

Tools: ChatGPT, Claude.ai, Perplexity
IDE: Arduino IDE (free)
Cost: 100% free
Time: ~15 min
Start ↓
Full control

Traditional

Arduino IDE, ready-made code from our tutorials, upload manually. No AI needed.

Tools: Arduino IDE
IDE: Arduino IDE (free)
Cost: 100% free
Time: ~15 min
Start ↓
🔧

Flash Tool — Install firmware from your browser

Connect your ESP32 via USB, flash MicroPython or CircuitPython, and write code — all from your browser. No installs needed.

Open Flash Tool
⚡

Path 1: AI + CLI — Zero IDE

Claude Code / Cursor / Windsurf control your board directly. You just describe what you want.

1

Plug in + open CLI tool

Plug in USB, open Claude Code (or Cursor/Windsurf) and type:

I connected an ESP32 board via USB. Can you see it?

→ AI detects your board, identifies the chip, and installs esptool.

2

Flash + Connect WiFi

Flash MicroPython on it and connect to my WiFi — SSID: MyWiFi, Password: MyPass

→ AI downloads the firmware, flashes it, and sets up WiFi. Your board communicates wirelessly.

3

Control it in plain English

Turn the LED blue
Show me the chip temperature
Build a web dashboard I can open on my phone
Done. Dashboard on your phone. ~8 minutes. Zero IDE. Zero copy-paste.
🤖

Path 2: AI + Arduino IDE — 100% Free

ChatGPT / Claude.ai / Perplexity generates the code. You copy-paste it into Arduino IDE.

1

What You Need

checklist
ESP32 board
Any ESP32 — USB-C or Micro-USB, doesn't matter
USB cable (data, not charge-only)
#1 beginner mistake — if nothing shows up, try a different cable first
Computer with internet
Mac, Windows, or Linux
Browser tab open
chatgpt.com or claude.ai — both free, no account needed for basic use
2

Install Arduino IDE

~5 min
Why Arduino IDE even on the AI path? AI generates code. You still need to upload it to your board. Arduino IDE is the free tool that does that.
  1. 1.Go to arduino.cc/en/software and download the free installer for your OS (Windows / Mac / Linux).
  2. 2.Install and open it. The first launch takes a moment.
  3. 3.
    Add ESP32 board support:
    • → File → Preferences (Mac: Arduino IDE → Settings)
    • → Find the Additional boards manager URLs field, paste this:
    https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
    • → Click OK
    • → Tools → Board → Boards Manager → search esp32 → Install (by Espressif Systems)
    • → This takes 1-2 minutes.
3

Connect Your Board

~2 min
  1. 1.Plug the USB cable into the ESP32, then into your computer. A light should come on.
  2. 2.Tools → Board → esp32 → choose ESP32S3 Dev Module (or ESP32 Dev Module if you have an older board).
  3. 3.Tools → Port → select the port that appeared (on Mac it looks like /dev/cu.usbserial-..., on Windows it's COM3 or similar).

Not sure if it worked?

Open the Flash Tool and click Health Check — it tests your USB cable, board connection, and chip in 10 seconds.

Troubleshooting:

No port appears

Try a different USB cable. Most cables sold with phones are charge-only.

Upload fails

Hold the BOOT button on the board while clicking Upload. Release after it starts.

Wrong board selected

If unsure, look for a chip label on the board. ESP32-S3 and ESP32-C6 are common.

4

Ask AI for Code — The Magic Moment

~3 min

Open ChatGPT.com or Claude.ai in your browser. Type this prompt exactly:

Project 1 — Blink the LED

I have an ESP32-S3 connected to Arduino IDE. Write me complete Arduino code that blinks the built-in LED on pin 2 every half second. Include all #include statements and comments.
  1. 1. AI gives you a code block
  2. 2. Click the copy button on the code block
  3. 3. In Arduino IDE: select all the text (Ctrl/Cmd+A), paste (Ctrl/Cmd+V)
  4. 4. Click the Upload button (right arrow icon)
  5. 5. Wait ~10 seconds
  6. 6. LED BLINKS. You just programmed hardware.

Project 2 — WiFi Scanner

Write Arduino code for ESP32-S3 that scans WiFi networks and prints them to Serial Monitor with signal strength. Include all necessary includes.

After uploading: Tools → Serial Monitor → set baud rate to 115200 → see every WiFi network around you.

Project 3 — Control from Your Phone

Write Arduino code for ESP32-S3 that creates a WiFi web server. The web page should have a button to toggle the built-in LED on/off. Connect to my WiFi: SSID: YourWiFiName, Password: YourPassword. Print the IP address to Serial Monitor on startup.

After uploading: open Serial Monitor, copy the IP address, type it in your phone's browser — you'll see a button that toggles your LED from your phone.

You just became a maker. You can build almost anything with this workflow — just describe what you want in English, AI writes the code, you upload it.
⌨️

The Traditional Path

Code pasted directly — no AI account needed, full control from day one.

1

Install Arduino IDE

~5 min
  1. 1.Go to arduino.cc/en/software — download and install the free version for your OS.
  2. 2.Open Arduino IDE.
  3. 3.
    File → Preferences → paste this URL into Additional boards manager URLs:
    https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
  4. 4.Tools → Board → Boards Manager → search esp32 → Install (by Espressif Systems).
2

Connect Your Board

~2 min
  1. 1. Plug in the USB cable. A light on the board should come on.
  2. 2. Tools → Board → esp32 → ESP32S3 Dev Module or ESP32 Dev Module.
  3. 3. Tools → Port → select the port that appeared.
3

Blink the LED

~2 min

Select all the code in Arduino IDE (Ctrl/Cmd+A), then paste this over it:

// Blink the built-in LED on pin 2
// Works on most ESP32 boards

#define LED_PIN 2   // change to 8 for ESP32-C6, 38 for some S3 boards

void setup() {
  pinMode(LED_PIN, OUTPUT);
}

void loop() {
  digitalWrite(LED_PIN, HIGH);  // LED on
  delay(500);                   // wait 0.5 second
  digitalWrite(LED_PIN, LOW);   // LED off
  delay(500);                   // wait 0.5 second
}

Click Upload (right arrow icon). Wait ~10 seconds. The LED blinks.

LED not blinking? Try changing LED_PIN to 8 (for ESP32-C6) or 48 (for some S3 boards). Or hold the BOOT button while clicking Upload.
4

WiFi Scanner

~2 min

Paste this code, upload it, then open Tools → Serial Monitor (set baud rate to 115200):

#include "WiFi.h"

void setup() {
  Serial.begin(115200);
  WiFi.mode(WIFI_STA);
  WiFi.disconnect();
  delay(100);
  Serial.println("WiFi Scanner Ready");
}

void loop() {
  Serial.println("Scanning...");
  int n = WiFi.scanNetworks();

  if (n == 0) {
    Serial.println("No networks found.");
  } else {
    Serial.print(n);
    Serial.println(" networks found:");
    for (int i = 0; i < n; ++i) {
      Serial.print(i + 1);
      Serial.print(": ");
      Serial.print(WiFi.SSID(i));
      Serial.print(" (");
      Serial.print(WiFi.RSSI(i));
      Serial.println(" dBm)");
    }
  }
  delay(5000);  // scan every 5 seconds
}

You'll see every WiFi network near you, with signal strength. The scanner runs every 5 seconds.

5

Control LED from Your Phone

~3 min

Change the WiFi credentials below, paste the code, and upload:

#include <WiFi.h>
#include <WebServer.h>

const char* ssid     = "YourWiFiName";      // <-- change this
const char* password = "YourWiFiPassword";  // <-- change this

#define LED_PIN 2   // change to 8 for C6, or 38/48 for some S3

WebServer server(80);
bool ledState = false;

void handleRoot() {
  String html = "<!DOCTYPE html><html><head>";
  html += "<meta name='viewport' content='width=device-width, initial-scale=1'>";
  html += "<style>body{font-family:sans-serif;text-align:center;padding:40px;}";
  html += "button{font-size:24px;padding:20px 40px;border-radius:12px;border:none;";
  html += "background:" + String(ledState ? "#f97316" : "#e5e7eb") + ";cursor:pointer;}</style></head>";
  html += "<body><h2>ESP32 LED Control</h2>";
  html += "<p>LED is: <strong>" + String(ledState ? "ON" : "OFF") + "</strong></p>";
  html += "<form action='/toggle' method='POST'>";
  html += "<button type='submit'>" + String(ledState ? "Turn OFF" : "Turn ON") + "</button>";
  html += "</form></body></html>";
  server.send(200, "text/html", html);
}

void handleToggle() {
  ledState = !ledState;
  digitalWrite(LED_PIN, ledState ? HIGH : LOW);
  server.sendHeader("Location", "/");
  server.send(303);
}

void setup() {
  Serial.begin(115200);
  pinMode(LED_PIN, OUTPUT);

  WiFi.begin(ssid, password);
  Serial.print("Connecting to WiFi");
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println();
  Serial.print("Connected! Open this on your phone: http://");
  Serial.println(WiFi.localIP());

  server.on("/", handleRoot);
  server.on("/toggle", HTTP_POST, handleToggle);
  server.begin();
}

void loop() {
  server.handleClient();
}

1. Open Tools → Serial Monitor (115200 baud)

2. Copy the IP address shown (like 192.168.1.42)

3. Type that IP into your phone's browser

4. You now control your ESP32 LED from your phone.