Maker tech hub — AI · 3D print · Pi · ESP32 · plus the classic tech archive.

Free ESP32 kit · Books · Network Ninja · Archive

Project · Beginner · ESP32

Getting Started with ESP32 for Beginners — First Project

Board choice, USB driver gotchas, blink + button, and how to structure your first real ESP32 project.

Written by

Avery J. Parker

IT veteran, maker educator, and author of Network Ninja, 3D Printing Mastery, and AI Workflow Mastery. Business IT: Diversified Tech Solutions.

Project template

  • Goal & materials
  • Steps / firmware
  • Troubleshooting
  • AI assist notes
  • Related gear & books

This is the “hello world” that actually teaches you something: power the board, flash firmware, read a button, and drive an LED without magic.

Depth checklist: materials → steps → troubleshooting → AI assist → related gear/books. See also the gear shortlist and free ESP32 kit.

What you’ll build

ESP32 DevKit with LED (via 220Ω) and button to GND using internal pull-up.
ESP32 DevKit with LED (via 220Ω) and button to GND using internal pull-up.

An ESP32 that blinks an onboard (or external) LED and prints button presses over serial.

Materials

  • ESP32 DevKit (ESP32-WROOM or ESP32-S3 DevKit are fine)
  • USB data cable (charge-only cables cause 80% of “it won’t flash” tickets)
  • Optional: breadboard, LED, 220Ω resistor, momentary button

Software

  1. Install Arduino IDE 2.x or PlatformIO
  2. Add ESP32 board support (Espressif board manager URL)
  3. Select your exact board + the correct COM/tty port

Steps

  1. Open the Blink example; change the LED pin if your board uses GPIO 2 vs 8 vs RGB
  2. Hold BOOT if your particular clone needs it; flash; open Serial Monitor at 115200
  3. Wire a button from GPIO to GND with INPUT_PULLUP
  4. Print state changes; debounce with a 30–50ms window
const int BTN = 0; // often BOOT button
void setup() {
  Serial.begin(115200);
  pinMode(BTN, INPUT_PULLUP);
  pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
  bool pressed = digitalRead(BTN) == LOW;
  digitalWrite(LED_BUILTIN, pressed ? HIGH : LOW);
  static bool last = false;
  if (pressed != last) {
    Serial.println(pressed ? "pressed" : "released");
    last = pressed;
    delay(40);
  }
}

Troubleshooting

  • Port missing — install CP210x or CH340 drivers; try another cable
  • Upload fails — lower upload speed to 115200; hold BOOT
  • Random resets — power from a solid USB port; avoid brownouts with Wi‑Fi + motors later

AI assist tip

Paste your board silkscreen photo + error log into a coding model and ask: “Which Arduino board profile and LED pin match this DevKit?” Verify against the schematic before trusting it.

Next

Add a DHT22 or BME280, then a relay. That’s the spine of most home-automation ESP32 projects.