Arduino IDE setup: install, ports and first upload

Install Arduino IDE 2, fix the CH340 clone driver, choose the right board and port, and get the blink sketch uploading without guesswork.

Reference
RE-314
Published
Read
6 min

About the author · Sources, testing and AI policy

Laptop showing an Arduino sketch with a board connected by USB cable

Most “my Arduino is dead” messages are a setup problem, not a hardware problem. The board is fine; the port is wrong, the clone needs a driver, or the upload is fighting another program that has the serial port open.

This is the setup sequence that works for the Uno, Nano and the common clones sold in India, in the order that avoids the usual dead ends. It assumes Windows or macOS and a board connected by USB. Linux needs one extra permission step, noted at the end.

1. Install the IDE, not a random copy

Download the Arduino IDE from arduino.cc. The current version is IDE 2.x, which installs like a normal application and bundles the compiler, the board definitions for official boards and the serial monitor. Avoid installers from third-party download sites: they often bundle older versions, adware, or a modified board list.

On Windows, the installer may ask to install USB drivers. Allow it. On macOS, drag the app into Applications and open it once so the system can approve it. If macOS blocks the app, use System Settings → Privacy & Security to allow it rather than disabling security globally.

2. Plug in and find the port

Connect the board with a USB cable that carries data. This is not a formality: a large share of charging cables have only power wires inside, and the board will light up while the computer sees nothing. If no port appears, try a different cable before trying a different driver.

Open Tools → Port. On Windows you should see something like COM3 or COM7. On macOS it looks like /dev/cu.usbmodem14101 or /dev/cu.wchusbserial1420. Unplug the board and confirm the entry disappears, then plug it back in and confirm it returns. That is the port you want.

3. Select the right board

Tools → Board → Arduino AVR Boards → Arduino Uno for an Uno, or Arduino Nano for a Nano. A mismatch usually produces an upload error rather than damage, but a Nano with the wrong processor selected will fail every time. Clones with the old bootloader need Processor → ATmega328P (Old Bootloader); if uploads fail at a low baud rate, try that option.

For an ESP32 or ESP32-CAM, the board list does not include them by default. Add the Espressif board manager URL in Preferences, install the ESP32 package from Boards Manager, then select the exact DevKit model. The ESP32 pinout guide covers which pins to avoid once it uploads.

4. Upload the blink sketch

File → Examples → 01.Basics → Blink, then press Upload. The TX and RX LEDs should flicker for a few seconds and the message “Done uploading” should appear. The on-board LED on pin 13 will blink once per second. That single test proves the cable, driver, port, board selection and toolchain — five things at once — so do it before writing any robot code.

5. Fix the clone driver problem

Many Indian Uno and Nano clones use a CH340 or CH341 USB-serial chip instead of the official ATmega16U2. Windows 10 and 11 often install it automatically; older machines do not, and the board shows up as an unknown device with no COM port. Install the CH340 driver from the chip maker’s site, reboot, and check Device Manager under Ports. A Nano clone may need the driver before any port appears at all.

SymptomLikely causeFix
No port in the menuCharge-only cable, missing driver, dead USB portSwap cable, install CH340 driver, try another port
Port appears but upload failsWrong board or processor selectedSelect the exact board; try the old bootloader option on a Nano
“Access is denied” or port busySerial Monitor or another app is openClose Serial Monitor, IDE instances and PuTTY
Upload works once, then neverSketch uses pins 0 and 1 for something elseMove the device off the hardware serial pins
Board resets when motors startPower, not USBSeparate motor supply and common ground
Garbage in Serial MonitorBaud rate mismatchMatch the number in Serial.begin()
The six failures that account for most first-day setup problems.

6. Use the Serial Monitor properly

The Serial Monitor is the cheapest debugging tool you own. Start it at the same baud rate as Serial.begin(), usually 9600 or 115200. If you see nothing, check the baud rate before rewiring. If you see one garbled line at reset, that is normal on many boards. If you see garbage continuously, the rates do not match or the board is resetting.

void setup() {
  Serial.begin(115200);
  while (!Serial) { }        // native-USB boards only
  Serial.println("boot");
}

void loop() {
  Serial.print("millis=");
  Serial.println(millis());
  delay(500);
}

Do not put Serial.print() inside a tight control loop on a robot. At 9600 baud a short line can take several milliseconds, which is enough to ruin motor timing. Print a value every 100–200 ms, or print only when a state changes.

Linux: one permission step

On Ubuntu or another Linux distribution, the board appears as /dev/ttyACM0 or /dev/ttyUSB0 but uploads fail with a permission error until your user is in the dialout group:

sudo usermod -aG dialout $USER
# log out and back in, then check
groups

Some Ubuntu versions also need the brltty service disabled if it grabs the CH340 device. That is a known conflict, not a broken board.

What to do next

With blink working, move to a button and an LED, then a potentiometer and a servo. Those three exercises cover digital input, analog input, PWM and the habit of powering a load separately. The beginner projects list sequences ten builds, and the pinout guide explains which pins each one needs.

Keep one known-good board, one known-good cable and the blink sketch as your test kit. When something stops working months later, you can prove within two minutes whether the problem is the board, the cable or the new code.

Header pins and motor leads still need to be soldered; the soldering guide covers the joints a robot build actually needs.

Sources and further reading

Last reviewed: October 2026. Menu paths match Arduino IDE 2.x. Clone boards vary in USB-serial chip and bootloader, so a working setup on one board is not proof that the next one will behave the same way.

Pass it onWhatsAppLinkedIn

Keep reading

Continue learning

The Build Note

One short email when something is worth your bench time.

A new build sheet, a part price that moved, or a mistake worth avoiding. No daily drip, no recycled news.

One short email when a build or a price is worth your time. Unsubscribe in one click.