ESP32 Quick Start Guide
Your ESP32 Kit is Open.
Now What?
Three paths. All free. Pick the one that matches your style.
Choose your path
AI + CLI
AI controls your board directly. No IDE, no copy-paste. Just plain English sentences.
AI + Arduino IDE
AI generates the code, you copy-paste it into Arduino IDE and upload. 100% free.
Traditional
Arduino IDE, ready-made code from our tutorials, upload manually. No AI needed.
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 ToolPath 1: AI + CLI — Zero IDE
Claude Code / Cursor / Windsurf control your board directly. You just describe what you want.
Plug in + open CLI tool
Plug in USB, open Claude Code (or Cursor/Windsurf) and type:
→ AI detects your board, identifies the chip, and installs esptool.
Flash + Connect WiFi
→ AI downloads the firmware, flashes it, and sets up WiFi. Your board communicates wirelessly.
Control it in plain English
Path 2: AI + Arduino IDE — 100% Free
ChatGPT / Claude.ai / Perplexity generates the code. You copy-paste it into Arduino IDE.
What You Need
checklistInstall Arduino IDE
~5 min- 1.Go to arduino.cc/en/software and download the free installer for your OS (Windows / Mac / Linux).
- 2.Install and open it. The first launch takes a moment.
- 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.
Connect Your Board
~2 min- 1.Plug the USB cable into the ESP32, then into your computer. A light should come on.
- 2.Tools → Board → esp32 → choose ESP32S3 Dev Module (or ESP32 Dev Module if you have an older board).
- 3.Tools → Port → select the port that appeared (on Mac it looks like
/dev/cu.usbserial-..., on Windows it'sCOM3or 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.
Ask AI for Code — The Magic Moment
~3 minOpen ChatGPT.com or Claude.ai in your browser. Type this prompt exactly:
Project 1 — Blink the LED
- 1. AI gives you a code block
- 2. Click the copy button on the code block
- 3. In Arduino IDE: select all the text (Ctrl/Cmd+A), paste (Ctrl/Cmd+V)
- 4. Click the Upload button (right arrow icon)
- 5. Wait ~10 seconds
- 6. LED BLINKS. You just programmed hardware.
Project 2 — WiFi Scanner
After uploading: Tools → Serial Monitor → set baud rate to 115200 → see every WiFi network around you.
Project 3 — Control from Your Phone
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.
The Traditional Path
Code pasted directly — no AI account needed, full control from day one.
Install Arduino IDE
~5 min- 1.Go to arduino.cc/en/software — download and install the free version for your OS.
- 2.Open Arduino IDE.
- 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.Tools → Board → Boards Manager → search esp32 → Install (by Espressif Systems).
Connect Your Board
~2 min- 1. Plug in the USB cable. A light on the board should come on.
- 2. Tools → Board → esp32 → ESP32S3 Dev Module or ESP32 Dev Module.
- 3. Tools → Port → select the port that appeared.
Blink the LED
~2 minSelect 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_PIN to 8 (for ESP32-C6) or 48 (for some S3 boards). Or hold the BOOT button while clicking Upload.WiFi Scanner
~2 minPaste 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.
Control LED from Your Phone
~3 minChange 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.