From the workshop: Arduino Uno R3 Development Board (ATmega328P) With USB Cable

View product
All articles
Technology

🧠Arduino vs ESP32 vs Raspberry Pi Pico: Which Board Should You Start With?

An honest comparison for students and makers: specifications, programming options, which board suits which project, a beginner path, and the 3.3 V vs 5 V mistakes that damage boards.

TThinking Robot Team 11 min read
Arduino Uno, ESP32 DevKit and Raspberry Pi Pico boards compared side by side
In this article (13)

"Which board should I buy first: Arduino, ESP32 or Raspberry Pi Pico?" It is one of the most common questions we hear from students, parents and teachers. All three are small, affordable microcontroller boards that read sensors and control LEDs, motors and displays. But they are built for different jobs, and picking the wrong one can make your first project harder than it needs to be.

This is an honest, side-by-side comparison for Indian students and makers: real specifications, how you program each one, which board suits which project, and the beginner mistakes that damage boards (most of them involve 3.3 V vs 5 V). We will not quote prices; they change often and vary by seller, but all three are within reach of a school project budget.

The three boards at a glance

Three cards comparing Arduino Uno R3, ESP32 DevKit and Raspberry Pi Pico: processor, clock, RAM, flash, GPIO, ADC, logic level, wireless and languagesUno R3, ESP32 and Pico side by side. Figures are for the standard boards described below.

FeatureArduino Uno R3ESP32 DevKit (ESP32-WROOM-32)Raspberry Pi Pico (RP2040)
ProcessorATmega328P, 8-bit, 1 coreXtensa LX6, 32-bit, 2 coresArm Cortex-M0+, 32-bit, 2 cores
Clock speed16 MHzUp to 240 MHzUp to 133 MHz
RAM2 KB520 KB264 KB
Program flash32 KB4 MB on most modules2 MB
GPIO pins20 (14 digital + 6 analog)About 25 usable on a typical DevKit26
Analog inputs (ADC)6 × 10-bitUp to 18 × 12-bit3 × 12-bit
PWM outputs6Most output pins (16 channels)16 channels, any pin
Logic voltage5 V3.3 V (not 5 V tolerant)3.3 V (not 5 V tolerant)
Wi-Fi / BluetoothNoWi-Fi 2.4 GHz + Bluetooth (Classic and BLE)No (Pico W adds Wi-Fi and Bluetooth)
Built-in LEDPin 13GPIO 2 on many DevKitsGP25 (on Pico W: "LED")
USBVia a USB-serial chipVia a USB-serial chip (CP2102 or CH340)Native USB on the RP2040

Bar charts: RAM is 2 KB on the Uno R3, 264 KB on the Pico and 520 KB on the ESP32; clock speed is 16 MHz, 133 MHz and 240 MHzThe ESP32 has 260 times the RAM of an Uno R3. That is why it can run Wi-Fi and MicroPython and the Uno cannot.

Do the numbers matter for a beginner? Less than you might think. An Uno blinks an LED, reads an ultrasonic sensor and drives a robot car perfectly well. The difference shows up in bigger projects: a colour display, a web server, a long data log or MicroPython all need far more than 2 KB of RAM.

How you program each board

OptionArduino UnoESP32Raspberry Pi Pico
Arduino IDE (C++)Built inAdd the "esp32" boards packageAdd an RP2040 boards package
MicroPythonNot practical (too little RAM)YesYes (official, and the easiest way to start)
Manufacturer's own toolkit—ESP-IDF (C)Pico C/C++ SDK
How code is uploadedUSB, one clickUSB; some boards need the BOOT button heldUSB; or hold BOOTSEL and drag a .uf2 file onto the "drive"

The good news: the Arduino IDE works with all three. Learn pinMode(), digitalWrite() and analogRead() on an Uno and the same code style runs on an ESP32 or Pico. If you prefer Python, the Pico is the friendliest MicroPython board: copy one file onto it, open the free Thonny editor, and type commands that run instantly.

Which board for which project?

ProjectBest pickWhy
First LED, buzzer and sensor experimentsUno5 V parts plug straight in; endless tutorials
School science model, traffic light, rain alarmUnoSimple, forgiving, easy for teachers to check
Line follower or obstacle-avoiding robot carUno (or any)5 V sensors such as the HC-SR04 wire in directly
Phone-controlled robot over Wi-Fi or BluetoothESP32Radio built in, no extra module
IoT weather station, smart-home switch, web dashboardESP32Wi-Fi, plenty of memory, deep sleep
Battery-powered sensor that wakes up occasionallyESP32Very low deep-sleep current
Learning Python with real hardwarePicoMicroPython is official and simple
USB keyboard, macro pad or game controllerPicoNative USB
Precise timing: LED strips, many servos, custom signalsPico16 PWM channels and the programmable I/O (PIO) blocks

For a robot car, our L298N motor driver guide and HC-SR04 obstacle-avoiding robot use the Uno, and both work on an ESP32 with the small changes described there. Planning a battery-powered IoT sensor? Estimate how long it will last with our IoT deep-sleep battery life estimator.

Flowchart: needs Wi-Fi or Bluetooth leads to ESP32; wants Python leads to Pico; first board or 5 V shields leads to Uno; needs more speed or memory leads to Pico or ESP32; otherwise UnoAnswer the questions from the top. The first 'yes' is your board.

The big pitfall: 3.3 V vs 5 V

Voltage chart comparing the input thresholds of the Uno at 5 V and the ESP32 and Pico at 3.3 V; a 5 V signal falls in the damage zone for the 3.3 V boardsA 5 V signal is a normal HIGH for the Uno, but above the safe limit for the ESP32 and Pico.

The Uno's pins work at 5 V. The ESP32's and Pico's pins work at 3.3 V, and their absolute maximum input is only a few tenths of a volt above that. Many popular modules (HC-SR04, some relay boards, older LCDs) output 5 V signals.

SituationResultWhat to do
5 V module output → ESP32 or Pico inputCan damage the pinVoltage divider (1 kΩ + 2 kΩ gives 3.33 V) or a level shifter
3.3 V board output → 5 V module inputOften works (an ATmega328P at 5 V reads 3.0 V and above as HIGH), but some 5 V chips need 3.5 VTest it; use a level shifter if unreliable
Two-way bus such as I²C between 3.3 V and 5 VRiskyBidirectional level-shifter module
Connecting the 5 V rail to a 3.3 V board's GPIO pinDamageNever do this, even briefly

Work out divider values with our voltage divider calculator, and see the HC-SR04 guide for a worked divider on a real sensor.

Other common mistakes

  • Charge-only USB cables. Many phone cables carry power but no data. If your computer does not detect the board, try another cable first.
  • USB driver missing. Many Uno-compatible and ESP32 boards use a CH340 or CP2102 USB chip that needs a driver on some Windows PCs.
  • ESP32 and 5 GHz Wi-Fi. The ESP32 only connects to 2.4 GHz networks. If your home router or phone hotspot is set to 5 GHz only, it will not appear.
  • ESP32 ADC2 pins with Wi-Fi. The analog pins on ADC2 cannot be read while Wi-Fi is on. Use ADC1 pins (GPIO 32–39) for sensors.
  • ESP32 boot pins. GPIO 0, 2, 5, 12 and 15 affect how the chip starts up, GPIO 6–11 are used by the flash memory, and GPIO 34–39 are input-only. Avoid them for your first projects.
  • Weak power. When Wi-Fi switches on, the ESP32 draws current in bursts and a weak USB port or long cable can cause "brownout" resets.
  • Driving motors from pins. No microcontroller pin can run a motor. Use a driver such as the L298N, and give servos their own supply (see our SG90 servo guide).

Experiment: same knob, three boards

This experiment shows the real difference in analog inputs. You need a 10 kΩ potentiometer and whichever boards you have.

  1. Connect the pot's outer pins to the board's supply and GND: 5V on the Uno, 3.3V on the ESP32 and Pico. Never 5 V on a 3.3 V board.
  2. Connect the middle pin (wiper) to A0 on the Uno, GPIO 34 on the ESP32, or GP26 on the Pico.
  3. Upload the matching code, open the serial monitor (or Thonny's shell for the Pico) and turn the knob slowly from end to end.

Arduino Uno (Arduino IDE):

cpp
void setup() {
  Serial.begin(9600);
}

void loop() {
  int raw = analogRead(A0);              // 0 ... 1023 (10-bit)
  float volts = raw * 5.0 / 1023.0;
  Serial.print(raw);
  Serial.print("  ");
  Serial.println(volts, 2);
  delay(200);
}

ESP32 (Arduino IDE with the esp32 boards package):

cpp
const int POT = 34;                      // an ADC1 pin (input only)

void setup() {
  Serial.begin(115200);
}

void loop() {
  int raw = analogRead(POT);             // 0 ... 4095 (12-bit)
  int mv = analogReadMilliVolts(POT);    // calibrated millivolts
  Serial.print(raw);
  Serial.print("  ");
  Serial.println(mv);
  delay(200);
}

Raspberry Pi Pico (MicroPython in Thonny):

python
from machine import ADC
import time

pot = ADC(26)                  # GP26 is ADC0
while True:
    raw = pot.read_u16()       # 0 ... 65535 (12-bit reading, scaled up)
    print(raw, round(raw * 3.3 / 65535, 2))
    time.sleep(0.2)
UnoESP32Pico
Raw range0 – 10230 – 40950 – 65535 (scaled from 12-bit)
Full-scale voltage5 VAbout 3.3 V3.3 V
Smallest step5 ÷ 1024 ≈ 4.9 mV3.3 ÷ 4096 ≈ 0.8 mV (nominal)3.3 ÷ 4096 ≈ 0.8 mV
What you will noticeSteady and linearSquashed near 0 V and near the topSteady; only 3 analog pins

What you learn: the 12-bit boards resolve finer steps, but the ESP32's ADC is not very linear near the ends of its range, which is why analogReadMilliVolts() exists. For predictable measurements, the Uno and Pico are easier to work with.

A sensible beginner path

  1. Start with an Uno (or an Uno-based kit) to learn circuits, digitalWrite(), analogRead() and Ohm's law. Our Ohm's law guide is a good companion.
  2. Move to an ESP32 when you want your project on Wi-Fi or controlled from a phone.
  3. Try a Pico when you want to learn Python, or need precise timing.

You do not have to choose only one. The skills carry over, and most makers end up owning all three. Get started with our Arduino and ESP32 kits, browse boards and sensors in our products, or learn hands-on at our workshops.

Frequently asked questions

Is the ESP32 better than the Arduino Uno?

It is more powerful, with far more memory, a faster processor and built-in Wi-Fi and Bluetooth. But "better" depends on the job. The Uno's 5 V pins, simple hardware and huge number of tutorials make it easier for a complete beginner, and it is harder to damage.

Can I use Arduino code on the ESP32 or Raspberry Pi Pico?

Yes. Install the ESP32 or RP2040 boards package in the Arduino IDE and most simple sketches run with only pin-number changes. Libraries that talk directly to Uno hardware (such as some timer libraries) may need an alternative.

Is the Raspberry Pi Pico the same as a Raspberry Pi?

No. A Raspberry Pi (such as the Pi 4 or Pi 5) is a full computer that runs Linux, with HDMI, USB ports and an SD card. The Pico is a microcontroller board, like an Arduino, that runs one program directly.

Which board is best for a school science project?

For most projects, the Arduino Uno. It works with common 5 V sensors and modules, and teachers and examiners are usually familiar with it. Choose an ESP32 if the project needs to send data over Wi-Fi or to a phone.

Can I connect 5 V sensors to an ESP32 or Pico?

You can power many 5 V sensors from the board's 5V (VBUS/VIN) pin, but any signal coming back to a GPIO pin must be 3.3 V or less. Use a voltage divider for one-way outputs, or a level-shifter module for two-way connections such as I²C.

Try the calculators

T

Thinking Robot Team

Thinking Robot is a team of engineers and educators in Pune who design electronics and robotics kits and run hands-on workshops for students and schools. Spotted a mistake or have a question? Get in touch.

Filed under#Arduino#ESP32#Electronics#IOT#Tutorial

Keep learning

WhatsApp